{%- 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 has_variable?( 'pxeserver' ) &&
  has_variable?( 'pxefilename' ) &&
  @pxeserver &&
  @pxefilename -%>
# PXE Handoff.
next-server <%= @pxeserver %>;
filename "<%= @pxefilename %>";
<% end -%>

#}

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

{%- endif %}
