#dhcpd.conf

<%
import re
%>
ddns-update-style none;

authoritative;

% for identifier, subnet in dhcp_config.get('subnets', {}).items():
# subnet '${identifier}'
subnet ${subnet['subnet']} netmask ${subnet['netmask']} {
%   if subnet.get('range_lower', None) and subnet.get('range_higher', None):
    range ${subnet['range_lower']} ${subnet['range_higher']};
%   endif
    interface "${subnet['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