forked from saratov/infra
117 lines
4.2 KiB
Django/Jinja
117 lines
4.2 KiB
Django/Jinja
{#
|
|
# First create a dict holding the entire zone information and create a hash
|
|
# from it, that it can be compared with subsequent task executions. In this
|
|
# way the serial will only be updated if there are some content changes.
|
|
#}
|
|
{% set _zone_data = {} %}
|
|
{% set _ = _zone_data.update({'ttl': bind_zone_ttl}) %}
|
|
{% set _ = _zone_data.update({'domain': bind_zone_name }) %}
|
|
{% set _ = _zone_data.update({'mname': bind_zone_name_servers}) %}
|
|
{% set _ = _zone_data.update({'aname': bind_other_name_servers}) %}
|
|
{% set _ = _zone_data.update({'mail': bind_zone_mail_servers}) %}
|
|
{% set _ = _zone_data.update({'rname': (( bind_zone_hostmaster_email)) + ('' if (bind_zone_hostmaster_email | search('\.')) else ('.' + _zone_data['domain']))}) %}
|
|
{% set _ = _zone_data.update({'refresh': bind_zone_time_to_refresh}) %}
|
|
{% set _ = _zone_data.update({'retry': bind_zone_time_to_retry}) %}
|
|
{% set _ = _zone_data.update({'expire': bind_zone_time_to_expire}) %}
|
|
{% set _ = _zone_data.update({'minimum': bind_zone_minimum_ttl}) %}
|
|
{% set _ = _zone_data.update({'hosts': bind_zone_hosts }) %}
|
|
{% set _ = _zone_data.update({'delegate': bind_zone_delegate }) %}
|
|
{% set _ = _zone_data.update({'services': bind_zone_services }) %}
|
|
{% set _ = _zone_data.update({'text': bind_zone_text }) %}
|
|
{#
|
|
# Compare the zone file hash with the current zone data hash and set serial
|
|
# accordingly
|
|
#}
|
|
{% set _zone = {'hash': _zone_data | string | hash('md5')} %}
|
|
{% set _hash_serial = forward_hashes.stdout.split(' ')[2:] %}
|
|
{% if _hash_serial and _hash_serial[0] == _zone['hash'] %}
|
|
{% set _ = _zone.update({'serial': _hash_serial[1]}) %}
|
|
{% else %}
|
|
{% set _ = _zone.update({'serial': timestamp.stdout}) %}
|
|
{% endif %}
|
|
{#
|
|
# Eventually output the zone data
|
|
#}
|
|
; Hash: {{ _zone['hash'] }} {{ _zone['serial'] }}
|
|
; Zone file for {{ _zone_data['domain'] }}
|
|
; {{ ansible_managed }}
|
|
|
|
$ORIGIN {{ _zone_data['domain'] }}.
|
|
$TTL {{ _zone_data['ttl'] }}
|
|
|
|
{% if _zone_data['mname']|length > 0 %}
|
|
@ IN SOA {{ _zone_data['mname']|first }}.{{ _zone_data['domain'] }}. {{ _zone_data['rname'] }}. (
|
|
{% else %}
|
|
@ IN SOA {{ ansible_hostname }}.{{ _zone_data['domain'] }}. {{ _zone_data['rname'] }}. (
|
|
{% endif %}
|
|
{{ _zone['serial'] }}
|
|
{{ _zone_data['refresh'] }}
|
|
{{ _zone_data['retry'] }}
|
|
{{ _zone_data['expire'] }}
|
|
{{ _zone_data['minimum'] }} )
|
|
|
|
{% if _zone_data['mname']|length > 0 %}
|
|
{% for ns in _zone_data['mname'] %}
|
|
IN NS {{ ns }}.{{ _zone_data['domain'] }}.
|
|
{% endfor %}
|
|
{% else %}
|
|
IN NS {{ ansible_hostname }}.{{ _zone_data['domain'] }}.
|
|
{% endif %}
|
|
{% for ns in _zone_data['aname'] %}
|
|
IN NS {{ ns }}.
|
|
{% endfor %}
|
|
|
|
{% for mail in _zone_data['mail'] %}
|
|
{% if loop.first %}@{% else %} {% endif %} IN MX {{ mail.preference}} {{ mail.name }}{% if not mail.name.endswith('.') %}.{{ _zone_data['domain'] }}.{% endif %}
|
|
{% endfor %}
|
|
|
|
{% if _zone_data['delegate']|length > 0 %}
|
|
{% for host in _zone_data['delegate'] %}
|
|
{{ host.zone.ljust(20) }} IN NS {{ host.dns }}
|
|
{% endfor %}
|
|
{% endif %}
|
|
|
|
{% if _zone_data['hosts']|length > 0 %}
|
|
{% for host in _zone_data['hosts'] %}
|
|
{% if host.ip is defined %}
|
|
{% if host.ip is string %}
|
|
{{ host.name.ljust(20) }} IN A {{ host.ip }}
|
|
{% else %}
|
|
{% for ip in host.ip %}
|
|
{{ host.name.ljust(20) }} IN A {{ ip }}
|
|
{% endfor %}
|
|
{% endif %}
|
|
{% endif %}
|
|
{% if host.ipv6 is defined %}
|
|
{% if host.ipv6 is string %}
|
|
{{ host.name.ljust(20) }} IN AAAA {{ host.ipv6 }}
|
|
{% else %}
|
|
{% for ip6 in host.ipv6 %}
|
|
{{ host.name.ljust(20) }} IN AAAA {{ ip6 }}
|
|
{% endfor %}
|
|
{% endif %}
|
|
{% endif %}
|
|
{% if host.aliases is defined %}
|
|
{% for alias in host.aliases %}
|
|
{{ alias.ljust(20) }} IN CNAME {{ host.name }}
|
|
{% endfor %}
|
|
{% endif %}
|
|
{% endfor %}
|
|
{% else %}
|
|
{{ ansible_hostname.ljust(20) }} IN A {{ ansible_default_ipv4.address }}
|
|
{% endif %}
|
|
{% for service in _zone_data['services'] %}
|
|
{{ service.name.ljust(20) }} IN SRV {{ service.priority|default('0') }} {{ service.weight|default('0') }} {{ service.port }} {{ service.target }}
|
|
{% endfor %}
|
|
{% for text in _zone_data['text'] %}
|
|
{% if text.text is string %}
|
|
{{ text.name.ljust(20) }} IN TXT "{{ text.text }}"
|
|
{% else %}
|
|
{% for entry in text.text %}
|
|
{{ text.name.ljust(20) }} IN TXT "{{ entry }}"
|
|
{% endfor %}
|
|
{% endif %}
|
|
{% endfor %}
|
|
{# vim: ft=text
|
|
#}
|