secrets_repo:
name: null
url: null
+
+# Main BIND conf vars
+named_conf_zones_path: "/var/named/zones"
+
+# Zone file conf vars
+named_conf_soa_ttl: 3600
+named_conf_soa_refresh: 3600
+named_conf_soa_retry: 3600
+named_conf_soa_expire: 604800
- include: packages.yml
tags:
- packages
+
+# Compile and write zone files
+- include: records.yml
+ tags:
+ - records
--- /dev/null
+---
+- name: Create zone file path
+ file:
+ path: "{{ named_conf_zones_path }}"
+ state: directory
+
+- name: Set named_serial variable
+ set_fact:
+ named_serial: "{{ ansible_date_time.epoch }}"
+
+- name: Write forward zone files
+ template:
+ src: forward.j2
+ dest: "{{ named_conf_zones_path }}/{{ item.key }}"
+ validate: named-checkzone {{ item.key }} %s
+ with_dict: "{{ named_domains }}"
+
+- name: Write reverse zone files
+ template:
+ src: reverse.j2
+ dest: "{{ named_conf_zones_path }}/{{ item.1 }}"
+ validate: named-checkzone {{ item.1 }} %s
+ with_subelements:
+ - "{{ named_domains }}"
+ - reverse
+ - flags:
+ skip_missing: True
--- /dev/null
+{% set domain = item.key %}
+{% if item.value.ipvar is defined and item.value.ipvar.0 is defined %}
+{% set ipvar = item.value.ipvar %}
+{% endif %}
+;
+; {{ ansible_managed }}
+;
+$TTL {{ named_conf_soa_ttl }}
+@ IN SOA {{ named_conf_soa }} (
+ {{ named_serial }} ; Serial
+ {{ named_conf_soa_refresh }} ; Refresh
+ {{ named_conf_soa_retry }} ; Retry
+ {{ named_conf_soa_expire }} ; Expire
+ {{ named_conf_soa_ttl }} ; TTL
+ )
+
+{% for nameserver in groups['nameserver'] %}
+ IN NS {{ nameserver }}.
+{% endfor %}
+
+$ORIGIN {{ domain }}.
+
+{% if item.value.miscrecords is defined %}
+{% for record in item.value.miscrecords %}
+{{ record }}
+{% endfor %}
+{% endif %}
+
+{% if item.value.ipvar is defined and item.value.ipvar.0 is defined %}
+{% for host in groups['all'] %}
+{% if hostvars[host][ipvar] is defined %}
+{% set ipaddr = hostvars[host][ipvar] %}
+{{ hostvars[host]['inventory_hostname_short'] }} IN A {{ hostvars[host][ipvar] }}
+{% endif %}
+{% endfor %}
+{% endif %}
--- /dev/null
+{% set zone = item.1 %}
+{% set domain = item.0.forward %}
+{% set ipvar = item.0.ipvar %}
+;
+; {{ ansible_managed }}
+;
+$TTL {{ named_conf_soa_ttl }}
+@ IN SOA {{ named_conf_soa }} (
+ {{ named_serial }} ; Serial
+ {{ named_conf_soa_refresh }} ; Refresh
+ {{ named_conf_soa_retry }} ; Retry
+ {{ named_conf_soa_expire }} ; Expire
+ {{ named_conf_soa_ttl }} ; TTL
+ )
+
+{% for nameserver in groups['nameserver'] %}
+ IN NS {{ nameserver }}.
+{% endfor %}
+
+; Reverse zone {{ zone }} belongs to forward zone {{ domain }}
+
+{% for host in groups['all'] %}
+{% if hostvars[host][ipvar] is defined %}
+{% set octet1,octet2,octet3,octet4 = hostvars[host][ipvar].split('.') %}
+{% set cutip = octet1 + '.' + octet2 + '.' + octet3 %}
+{% if cutip == zone %}
+{{ octet4 }} IN PTR {{ hostvars[host]['inventory_hostname_short'] }}.{{ domain }}.
+{% endif %}
+{% endif %}
+{% endfor %}