63 lines
2.4 KiB
Django/Jinja
63 lines
2.4 KiB
Django/Jinja
{% for zone in unbound_zones %}
|
|
# zone: {{ zone.zone }}
|
|
server:
|
|
local-zone: "{{ zone.zone }}." {{ zone.type | default('static') }}
|
|
|
|
{% for record in zone.records %}
|
|
{% if record.get('type', 'A') == 'MX' %}
|
|
local-data: "{{ record.name }}. IN MX {{ record.priority }} {{ record.value }}"
|
|
{% elif record.get('type', 'A') == 'CNAME' %}
|
|
local-data: "{{ record.name }}. IN CNAME {{ record.value }}"
|
|
{% elif record.get('type', 'A') == 'TXT' %}
|
|
local-data: "{{ record.name }}. IN TXT \"{{ record.value }}\""
|
|
{% elif record.get('type', 'A') == 'PTR' %}
|
|
local-data: "{{ record.name }}. IN PTR {{ record.value }}"
|
|
{% else %}
|
|
local-data: "{{ record.name }}. IN {{ record.get('type', 'A') }} {{ record.value }}"
|
|
{% endif %}
|
|
{% endfor %}
|
|
|
|
{% endfor %}
|
|
|
|
{# generate reverse dns zones from a records #}
|
|
{% set reverse_zones = {} %}
|
|
{% for zone in unbound_zones %}
|
|
{% for record in zone.records %}
|
|
{% if record.get('type', 'A') == 'A' %}
|
|
{% set ip_parts = record.value.split('.') %}
|
|
{% if ip_parts[0] == '192' and ip_parts[1] == '168' %}
|
|
{% set reverse_zone = ip_parts[2] + '.168.192.in-addr.arpa' %}
|
|
{% set reverse_record = ip_parts[3] + '.' + reverse_zone %}
|
|
{% if reverse_zone not in reverse_zones %}
|
|
{% set _ = reverse_zones.update({reverse_zone: []}) %}
|
|
{% endif %}
|
|
{% set _ = reverse_zones[reverse_zone].append({'ptr': reverse_record, 'hostname': record.name}) %}
|
|
{% elif ip_parts[0] == '10' and ip_parts[1] == '8' %}
|
|
{% set reverse_zone = '8.10.in-addr.arpa' %}
|
|
{% set reverse_record = ip_parts[3] + '.' + ip_parts[2] + '.' + reverse_zone %}
|
|
{% if reverse_zone not in reverse_zones %}
|
|
{% set _ = reverse_zones.update({reverse_zone: []}) %}
|
|
{% endif %}
|
|
{% set _ = reverse_zones[reverse_zone].append({'ptr': reverse_record, 'hostname': record.name}) %}
|
|
{% elif ip_parts[0] == '10' and ip_parts[1] == '0' %}
|
|
{% set reverse_zone = '0.10.in-addr.arpa' %}
|
|
{% set reverse_record = ip_parts[3] + '.' + ip_parts[2] + '.' + reverse_zone %}
|
|
{% if reverse_zone not in reverse_zones %}
|
|
{% set _ = reverse_zones.update({reverse_zone: []}) %}
|
|
{% endif %}
|
|
{% set _ = reverse_zones[reverse_zone].append({'ptr': reverse_record, 'hostname': record.name}) %}
|
|
{% endif %}
|
|
{% endif %}
|
|
{% endfor %}
|
|
{% endfor %}
|
|
|
|
{% for reverse_zone, ptr_records in reverse_zones.items() %}
|
|
# reverse dns zone: {{ reverse_zone }}
|
|
server:
|
|
local-zone: "{{ reverse_zone }}." static
|
|
|
|
{% for ptr_record in ptr_records %}
|
|
local-data: "{{ ptr_record.ptr }}. IN PTR {{ ptr_record.hostname }}."
|
|
{% endfor %}
|
|
|
|
{% endfor %}
|