<% import re from ipaddress import ip_network %> ddns-update-style none; authoritative; % for interface, subnet in sorted(dhcp_config.get('subnets', {}).items()): <% network = ip_network(subnet['subnet']) %> # interface ${interface} provides ${subnet['subnet']} subnet ${network.network_address} netmask ${network.netmask} { % if subnet.get('range_lower', None) and subnet.get('range_higher', None): range ${subnet['range_lower']} ${subnet['range_higher']}; % endif interface "${interface}"; default-lease-time ${subnet.get('default-lease-time', 600)}; max-lease-time ${subnet.get('max-lease-time', 3600)}; % for option, value in sorted(subnet.get('options', {}).items()): % if re.match('([^0-9\.,\ ])', value): option ${option} "${value}"; % else: option ${option} ${value}; % endif % endfor } % endfor % for identifier, allocation in dhcp_config.get('fixed_allocations', {}).items(): host ${identifier} { hardware ethernet ${allocation['mac']}; fixed-address ${allocation['ipv4']}; } % endfor