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

{%- if server.omapi_port is defined -%}
omapi-port {{ server.omapi_port }};
{% 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 -%}
{{ "\n" }}
next-server {{ server.next_server }};
{%- endif -%}

{%- if server.filename is defined %}
filename "{{ server.filename }}";
{{- "\n" }}
{%- 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";

{%- endif -%}