{%- from "isc_dhcp/map.jinja" import server with context %}
{%- if server.enabled %}

{%- if server.omapi_port is defined %}
omapi-port {{ server.omapi_port }};

{%- if server.omapi_key is defined %}
key omapi_key {
 algorithm HMAC-MD5;
 secret "{{ server.omapi_key }}";
};
omapi-key omapi_key;
{% endif %}
{%- endif %}

{%- if server.ddns_updates is defined %}

ddns-updates on;
ddns-update-style interim;

update-static-leases on;
use-host-decl-names on;

{#
# Key from bind
include "<%= @dnsupdatekey %>";
<% @dnsdomain.each do |dom| -%>
zone <%= dom %>. {
  primary <%= @nameservers.first %>;
  key <%= @dnskeyname%>;
}
#}

{%- else -%}

ddns-update-style {{ server.ddns_update_style|default('none') }};

{%- endif %}

{%- if server.update_static_leases is defined %}
update-static-leases {{ server.update_static_leases }};
{%- endif %}

{%- if server.use_host_decl_names is defined %}
use-host-decl-names {{ server.use_host_decl_names }};
{%- endif %}

{%- for zone_name, zone in server.zone.iteritems() %}

zone {{ zone_name }} {
  primary {{ zone.primary }};
  {%- if 'key' in zone %}
  key {{ zone.key|default('rndc-key') }};
  {%- endif %}
}

{%- endfor %}

default-lease-time {{ server.default_lease_time|default('600') }};
max-lease-time {{ server.max_lease_time|default('7200') }};

{%- if server.authoritative|default(False) %}
authoritative;
{%- endif %}

log-facility {{ server.logging.facility|default('local7') }};

{%- if server.next_server is defined -%}
next-server {{ server.next_server }};
{%- endif %}

{%- if server.filename is defined %}
filename "{{ server.filename }}";
{%- endif %}

option domain-name "{{ server.domain_name }}";
option domain-name-servers {{ server.name_servers|join( ', ') }};

allow booting;
allow bootp;

option fqdn.no-client-update    on;  # set the "O" and "S" flag bits
option fqdn.rcode2            255;
option pxegrub code 150 = text ;

{%- if server.pxeserver is defined %}
next-server {{ server.pxeserver }};
{%- endif %}

include "{{ server.config_dir }}/dhcpd.hosts";
include "{{ server.config_dir }}/dhcpd.subnets";

{%- endif %}
