{#
SPDX-FileCopyrightText: © 2020 Open Networking Foundation <support@opennetworking.org>
SPDX-License-Identifier: Apache-2.0
#}
;# nsd forward zone, templates/zone.forward.j2 - {{ ansible_managed }}

$ORIGIN {{ item.key }}. ; default zone domain
$TTL {{ item.ttl | default(nsd_default_ttl) }} ; default time to live

@ IN SOA {{ item.value.ns | first }} admin.{{ item.key }}. (
         {{ item.value.serial | default(ansible_date_time.epoch) }}   ; Serial, must be incremented every time you change this file
         3600        ; Refresh [1hr]
         600         ; Retry [10m]
         3600        ; Expire [1hr]
         60          ; Min TTL [1m]
         )

; NameServers
{% for ns in item.value.ns %}
 IN NS {{ ns }}
{% endfor %}
{% if item.value.a is defined %}

; A records
{% for name, ip4 in item.value.a.items() %}
{{ name }} IN A {{ ip4 }}
{% endfor %}
{% endif %}
{% if item.value.cname is defined %}

; CNAME records
{% for name, target in item.value.cname.items() %}
{{ name }} IN CNAME {{ target }}
{% endfor %}
{% endif %}
{% if item.srv is defined %}

; SRV records
{% for name, val in item.value.srv.items() %}
{{ name }} {{ val.ttl | default(nsd_default_ttl) }} IN SRV {{ val.priority | default(10) }} {{ val.port }} {{ val.target }}
{% endfor %}
{% endif %}
{% if item.value.txt is defined %}

; TXT records
{% for name, val in item.value.txt.items() %}
{{ name }} IN TXT "{{ val }}"
{% endfor %}
{% endif %}
