34 Commits

Author SHA1 Message Date
Daniel Akulenok
f93f2c5597 Update forwarders for 9.20 2026-01-23 12:24:06 +01:00
Daniel Akulenok
90f4f1d9db Merge branch 'main' of ssh://git.valid.dk:2222/daniel/ansible-bind9-role 2026-01-23 10:34:22 +01:00
Daniel Akulenok
df56bcd23d Start with some molecule stuff 2026-01-23 00:30:22 +01:00
781bd90580 revert 26c6e7844d
revert feat: Add remote-servers support for BIND 9.20
2026-01-22 22:36:55 +00:00
50d570a59e revert b5a9e97712
revert refactor: Update templates to use dynamic ordering and add deprecation warnings
2026-01-22 22:36:50 +00:00
276d7519ea revert 192747e438
revert refactor: Rename leaf config to site config

feat: Add argument specs and atomic validation
2026-01-22 22:36:43 +00:00
d870c5e0e7 revert 986b33df21
revert fix: explicit boolean checks for Ansible 12 compatibility
2026-01-22 22:36:25 +00:00
d1f384abab revert 2502389156
revert Merge pull request 'feature/bind9-20-support' (#1) from feature/bind9-20-support into main

Reviewed-on: https://gitea/daniel/ansible-bind9-role/pulls/1
2026-01-22 22:34:13 +00:00
0eacd56934 revert 0a8ea77c63
revert Merge pull request 'feature/role-improvements' (#2) from feature/role-improvements into main

Reviewed-on: https://gitea/daniel/ansible-bind9-role/pulls/2
2026-01-22 22:33:44 +00:00
0a8ea77c63 Merge pull request 'feature/role-improvements' (#2) from feature/role-improvements into main
Reviewed-on: https://gitea/daniel/ansible-bind9-role/pulls/2
2025-12-07 20:22:40 +00:00
2502389156 Merge pull request 'feature/bind9-20-support' (#1) from feature/bind9-20-support into main
Reviewed-on: https://gitea/daniel/ansible-bind9-role/pulls/1
2025-12-07 19:37:05 +00:00
Daniel Akulenok
986b33df21 fix: explicit boolean checks for Ansible 12 compatibility 2025-12-07 20:28:26 +01:00
Daniel Akulenok
192747e438 refactor: Rename leaf config to site config
feat: Add argument specs and atomic validation
2025-12-07 20:24:22 +01:00
Daniel Akulenok
b5a9e97712 refactor: Update templates to use dynamic ordering and add deprecation warnings 2025-12-07 20:15:54 +01:00
Daniel Akulenok
26c6e7844d feat: Add remote-servers support for BIND 9.20 2025-12-07 20:15:41 +01:00
Daniel Akulenok
cfde49d95a Spacing 2024-05-15 12:21:17 +02:00
Daniel Akulenok
e538644617 Spacing 2024-05-15 11:04:46 +02:00
Daniel Akulenok
f535f1af20 Remove surplus comment 2024-05-14 14:40:41 +02:00
Daniel Akulenok
b6fa879b93 demacro zone and view 2024-05-14 14:36:54 +02:00
Daniel Akulenok
73d8632c49 trust anchors 2024-05-14 14:34:49 +02:00
Daniel Akulenok
807077f78c tls demacro 2024-05-14 14:30:18 +02:00
Daniel Akulenok
0809bc7e91 statistics_channels 2024-05-14 14:29:10 +02:00
Daniel Akulenok
4577a40db9 Demacro server 2024-05-14 14:26:36 +02:00
Daniel Akulenok
52d5fa2d3f Demacro 2024-05-14 14:12:19 +02:00
Daniel Akulenok
8077d8c05c podman 2024-05-14 14:02:06 +02:00
Daniel Akulenok
a06fa3d679 key demacro 2024-05-14 14:01:49 +02:00
Daniel Akulenok
dfd93ecfea Demacro item.http 2024-05-14 13:47:59 +02:00
Daniel Akulenok
87c276c55b Demacro http 2024-05-14 13:47:03 +02:00
Daniel Akulenok
128b947ea2 demacro dnssec_policy 2024-05-14 13:45:31 +02:00
Daniel Akulenok
31692dd78d Demacro dlz 2024-05-14 13:44:21 +02:00
Daniel Akulenok
f69f631b36 Demacro include 2024-05-14 13:42:02 +02:00
Daniel Akulenok
7a834ae40c De-macro controls 2024-05-14 13:39:56 +02:00
Daniel Akulenok
ef28c98fc8 Fix typo 2024-05-14 13:28:15 +02:00
Daniel Akulenok
cdecd8c05c Fix typo 2024-05-14 13:24:54 +02:00
26 changed files with 177 additions and 107 deletions

View File

@@ -18,7 +18,7 @@
- "{{ bind9_libdir }}" - "{{ bind9_libdir }}"
dest: "{{ dest: "{{
bind9_backup_dir + '/bind9-config-' + bind9_backup_dir + '/bind9-config-' +
ansible_date_time.iso8601_basic_short + '.tar.gz' }}" ansible_facts.date_time.iso8601_basic_short + '.tar.gz' }}"
owner: root owner: root
group: root group: root
mode: 0640 mode: 0640

View File

@@ -0,0 +1,7 @@
---
collections:
- name: ansible.utils
- name: ansible.posix
- name: community.crypto
- name: community.general

View File

@@ -1,5 +1,31 @@
--- ---
- name: Converge - name: Converge
hosts: all hosts: all
roles: vars:
- keepit.bind9 bind9_group_config:
- name: named.conf.options
options:
directory: "{{ bind9_working_directory }}"
forwarders:
port: 853
tls: common-upstream
addresses:
- address: 192.0.2.10
port: 5353
tls: leaf-a
- address:
- 2001:db8::10
- 198.51.100.10
tls: dual-stack
- 203.0.113.10
tls:
- name: common-upstream
remote_hostname: upstream.example
- name: leaf-a
remote_hostname: leaf-a.example
- name: dual-stack
remote_hostname: dual-stack.example
tasks:
- name: Include bind9 role
ansible.builtin.include_role:
name: ../../../ansible-bind9-role

View File

@@ -1,22 +1,18 @@
--- ---
dependency:
name: galaxy
driver: driver:
name: docker name: podman
platforms: platforms:
- name: ubuntu-jammy - name: debian-trixie
image: ubuntu:jammy image: docker.io/jrei/systemd-debian:13
- name: ubuntu-focal command: /lib/systemd/systemd
image: ubuntu:focal privileged: true
- name: debian-bullseye volumes:
image: debian:bullseye - /sys/fs/cgroup:/sys/fs/cgroup:rw
cgroupns_mode: host
provisioner: provisioner:
name: ansible name: ansible
lint: config_options:
name: ansible-lint defaults:
ALLOW_BROKEN_CONDITIONALS: true
verifier: verifier:
name: ansible name: ansible
lint: |
set -e
ansible-lint .
yamllint .

View File

@@ -0,0 +1,6 @@
---
- hosts: all
tasks:
- name: Update apt
ansible.builtin.apt:
update_cache: true

View File

@@ -0,0 +1,21 @@
---
- name: Verify forwarders configuration
hosts: all
gather_facts: false
tasks:
- name: Read named.conf.options
ansible.builtin.slurp:
src: /etc/bind/named.conf.options
register: forwarders_file
- name: Assert forwarders render with port and tls
ansible.builtin.assert:
that:
- forwarders_content is search('forwarders port 853 tls common-upstream \{')
- forwarders_content is search('192.0.2.10 port 5353 tls leaf-a;')
- forwarders_content is search('2001:db8::10 tls dual-stack;')
- forwarders_content is search('198.51.100.10 tls dual-stack;')
- forwarders_content is search('203.0.113.10;')
fail_msg: "Forwarders block missing expected port/tls entries"
vars:
forwarders_content: "{{ forwarders_file.content | b64decode }}"

View File

@@ -1,5 +1,6 @@
{# ACL Macro. Very easy statement. It's just a list of address match elements. #} {# ACL Macro. Very easy statement. It's just a list of address match elements. #}
{% for acl in item.acl %} {% for acl in item.acl %}
acl {{ acl.name }} { acl {{ acl.name }} {
{{ functions.simple_item_list(acl.addresses) -}} {{ functions.simple_item_list(acl.addresses) -}}
}; };

View File

@@ -1,7 +1,7 @@
{% macro controls(controls) %}
controls { controls {
{% filter indent(bind9_config_indent, true) %} {% filter indent(bind9_config_indent, true) %}
{% for control in controls %} {% for control in item.controls %}
{% if control.type == "inet" %} {% if control.type == "inet" %}
{{ ('inet ' + control.address) -}} {{ ('inet ' + control.address) -}}
{{ (' port ' + control.port | string) if control.port is defined and control.port -}} {{ (' port ' + control.port | string) if control.port is defined and control.port -}}
@@ -16,4 +16,3 @@ controls {
{{ (' read-only ' + control.read_only | string) if control.read_only is defined -}}; {{ (' read-only ' + control.read_only | string) if control.read_only is defined -}};
{% endfor %}}; {% endfor %}};
{% endfilter %} {% endfilter %}
{% endmacro %}

View File

@@ -1,5 +1,5 @@
{% macro dlz(dlzs) %} {% for dlz in item.dlz if item.dlz is iterable %}
{% for dlz in dlzs if dlzs is iterable %}
dlz "{{ dlz.name }}" { dlz "{{ dlz.name }}" {
{% filter indent(bind9_config_indent, true) %} {% filter indent(bind9_config_indent, true) %}
{{ ('database "' + simple_item_list(dlz.database) + '";') }} {{ ('database "' + simple_item_list(dlz.database) + '";') }}
@@ -7,4 +7,3 @@ dlz "{{ dlz.name }}" {
{% endfilter %} {% endfilter %}
}; };
{% endfor %} {% endfor %}
{% endmacro %}

View File

@@ -1,5 +1,5 @@
{% macro dnssec_policy(policies) %} {% for policy in item.dnssec_policy if item.dnssec_policy is iterable %}
{% for policy in policies if policies is iterable %}
dnssec-policy "{{ policy.name }}" { dnssec-policy "{{ policy.name }}" {
{% filter indent(bind9_config_indent, true) %} {% filter indent(bind9_config_indent, true) %}
{% if policy.keys is defined and policy.keys %} {% if policy.keys is defined and policy.keys %}
@@ -36,4 +36,3 @@ nsec3param
{% endfilter %} {% endfilter %}
}; };
{% endfor %} {% endfor %}
{% endmacro %}

View File

@@ -1,8 +1,7 @@
{% macro dyndb(dyndbs) %} {% for dyndb in item.dyndb if item.dyndb is iterable %}
{% for dyndb in dyndbs if dyndbs is iterable %}
dyndb {{ dyndb.name }} "{{ dyndb.driver }}" { dyndb {{ dyndb.name }} "{{ dyndb.driver }}" {
{% filter indent(bind9_config_indent, true) %} {% filter indent(bind9_config_indent, true) %}
{{ functions.simple_item_list(dyndb.parameters) -}} {{ functions.simple_item_list(dyndb.parameters) -}}
{% endfilter %}}; {% endfilter %}};
{% endfor %} {% endfor %}
{% endmacro %}

View File

@@ -42,6 +42,46 @@
{% endif %} {% endif %}
{% endmacro %} {% endmacro %}
{% macro list_address_port_tls(dict, indent=bind9_config_indent) %}
{# This macro is for use for statements with grammar like #}
{# address port 00 tls string; address port 00 tls string; #}
{# it is usually called by a parent macro #}
{% filter indent(indent, true) %}
{% for item in dict %}
{% if item is not mapping %}
{{ item }};
{% elif item.address is string %}
{{ item.address -}}
{{- (' port ' + item.port | string) if item.port is defined and item.port -}}
{{- (' tls ' + item.tls | string) if item.tls is defined and item.tls -}};
{% elif item.address is sequence %}
{% for address in item.address %}
{{ address -}}
{{- (' port ' + item.port | string) if item.port is defined and item.port -}}
{{- (' tls ' + item.tls | string) if item.tls is defined and item.tls -}};
{% endfor %}
{% endif %}
{% endfor %}
{% endfilter %}
{% endmacro %}
{% macro parent_address_port_tls(name, dict) %}
{# This macro is for statements with grammar like #}
{# statement port 00 tls string { address port 00 tls string; address port 00 tls string; } #}
{# the list inside the statement is handled by list_address_port_tls #}
{% if dict is not mapping and dict is iterable %}
{{ name }} {
{{ list_address_port_tls(dict) -}}
};
{% else %}
{{ name }}
{{- (' port ' + dict.port | string) if dict.port is defined and dict.port -}}
{{- (' tls ' + dict.tls | string) if dict.tls is defined and dict.tls }} {
{{ list_address_port_tls(dict.addresses) -}}
};
{% endif %}
{% endmacro %}
{% macro list_address_port_dscp(dict, indent=bind9_config_indent) %} {% macro list_address_port_dscp(dict, indent=bind9_config_indent) %}
{# This macro is for use for statements with grammar like #} {# This macro is for use for statements with grammar like #}
{# address port 00 dscp 00; address port 00 dscp 00; #} {# address port 00 dscp 00; address port 00 dscp 00; #}
@@ -65,12 +105,14 @@
{# the list inside the statement is handled by list_address_port #} {# the list inside the statement is handled by list_address_port #}
{% if dict is not mapping and dict is iterable %} {% if dict is not mapping and dict is iterable %}
{{ name }} { {{ name }} {
{{ list_address_port_dscp(dict) }}}; {{ list_address_port_dscp(dict) }}
};
{% else %} {% else %}
{{ name }} {{ name }}
{{- (' port ' + dict.port | string) if dict.port is defined and dict.port -}} {{- (' port ' + dict.port | string) if dict.port is defined and dict.port -}}
{{- (' dscp ' + dict.dscp | string) if dict.dscp is defined and dict.dscp }} { {{- (' dscp ' + dict.dscp | string) if dict.dscp is defined and dict.dscp }} {
{{ list_address_port_dscp(dict.addresses) }}}; {{ list_address_port_dscp(dict.addresses) }}
};
{% endif %} {% endif %}
{% endmacro %} {% endmacro %}

View File

@@ -1,76 +1,56 @@
{% import 'named.conf.functions.j2' as functions with context %} {% import 'named.conf.functions.j2' as functions with context %}
{{ ansible_managed | comment }} {{ ansible_managed | comment }}
{% if item.options is defined and item.options %} {% if item.options is defined and item.options %}
options {
{% filter indent(bind9_config_indent,true)%}
{% include 'named.conf.options.j2' %} {% include 'named.conf.options.j2' %}
{% endfilter %}
};
{% endif %} {% endif %}
{% if item.acl is defined and item.acl %} {% if item.acl is defined and item.acl %}
{% include 'named.conf.acl.j2' %} {% include 'named.conf.acl.j2' %}
{% endif %} {% endif %}
{% if item.primaries is defined and item.primaries %} {% if item.primaries is defined and item.primaries %}
{% include 'named.conf.primaries' %} {% include 'named.conf.primaries.j2' %}
{% endif %} {% endif %}
{% if item.controls is defined and item.controls %} {% if item.controls is defined and item.controls %}
{% from 'named.conf.controls.j2' import controls with context %} {% include 'named.conf.controls.j2' %}
{{ controls(item.controls) }}
{% endif %} {% endif %}
{% if item.include is defined and item.include %} {% if item.include is defined and item.include %}
{% from 'named.conf.include.j2' import include with context %} {% include 'named.conf.include.j2' %}
{{ include(item.include) }}
{% endif %} {% endif %}
{% if item.dlz is defined and item.dlz %} {% if item.dlz is defined and item.dlz %}
{% from 'named.conf.dlz.j2' import dlz with context %} {% include 'named.conf.dlz.j2' %}
{{ dlz(item.dlz) }}
{% endif %} {% endif %}
{% if item.dnssec_policy is defined and item.dnssec_policy %} {% if item.dnssec_policy is defined and item.dnssec_policy %}
{% from 'named.conf.dnssec-policy.j2' import dnssec_policy with context %} {% include 'named.conf.dnssec-policy.j2' %}
{{ dnssec_policy(item.dnssec_policy) }}
{% endif %} {% endif %}
{% if item.dyndb is defined and item.dyndb %} {% if item.dyndb is defined and item.dyndb %}
{% from 'named.conf.dyndb.j2' import dyndb with context %} {% include 'named.conf.dyndb.j2' %}
{{ dyndb(item.dyndb) }}
{% endif %} {% endif %}
{% if item.http is defined and item.http %} {% if item.http is defined and item.http %}
{% from 'named.conf.http.j2' import http with context %} {% include 'named.conf.http.j2' %}
{{ http(item.http) }}
{% endif %} {% endif %}
{% if item.keylist is defined and item.keylist %} {% if item.keylist is defined and item.keylist %}
{% from 'named.conf.key.j2' import keylist with context %} {% include 'named.conf.key.j2' %}
{{ keylist(item.keylist) }}
{% endif %} {% endif %}
{% if item.logging is defined and item.logging %} {% if item.logging is defined and item.logging %}
{% from 'named.conf.logging.j2' import logging with context %} {% include 'named.conf.logging.j2' %}
{{ logging(item.logging) }}
{% endif %} {% endif %}
{% if item.parental_agents is defined and item.parental_agents %} {% if item.parental_agents is defined and item.parental_agents %}
{% from 'named.conf.parental-agents.j2' import parental_agents with context %} {% include 'named.conf.parental-agents.j2' %}
{{ parental_agents(item.parental_agents) -}}
{% endif %} {% endif %}
{% if item.server is defined and item.server %} {% if item.server is defined and item.server %}
{% from 'named.conf.server.j2' import server with context %} {% include 'named.conf.server.j2' %}
{{ server(item.server) }}
{% endif %} {% endif %}
{% if item.statistics_channels is defined and item.statistics_channels %} {% if item.statistics_channels is defined and item.statistics_channels %}
{% from 'named.conf.statistics-channels.j2' import statistics_channels with context %} {% include 'named.conf.statistics-channels.j2' %}
{{ statistics_channels(item.statistics_channels) }}
{% endif %} {% endif %}
{% if item.tls is defined and item.tls %} {% if item.tls is defined and item.tls %}
{% from 'named.conf.tls.j2' import tls with context %} {% include 'named.conf.tls.j2' %}
{{ tls(item.tls) }}
{% endif %} {% endif %}
{% if item.trust_anchors is defined and item.trust_anchors %} {% if item.trust_anchors is defined and item.trust_anchors %}
{% from 'named.conf.trust-anchors.j2' import trust_anchors with context %} {% include 'named.conf.trust-anchors.j2' %}
{{ trust_anchors(item.trust_anchors) }}
{% endif %} {% endif %}
{% if item.zones is defined and item.zones %} {% if item.zones is defined and item.zones %}
{% from 'named.conf.zone.j2' import zones with context %} {% include 'named.conf.zone.j2' %}
{{ zones(item.zones) }}
{% endif %} {% endif %}
{% if item.view is defined and item.view %} {% if item.view is defined and item.view %}
{% from 'named.conf.view.j2' import view with context %} {% include 'named.conf.view.j2' %}
{{ view(item.view) }}
{% endif %} {% endif %}

View File

@@ -1,5 +1,5 @@
{% macro http(seq) %} {% for http in item.http if item.http is iterable %}
{% for http in seq if seq is iterable %}
http {{ http.name }} { http {{ http.name }} {
{% filter indent(bind9_config_indent, true) %} {% filter indent(bind9_config_indent, true) %}
{% if http.endpoints is defined and http.endpoints %} {% if http.endpoints is defined and http.endpoints %}
@@ -14,4 +14,3 @@ endpoints {
{{ ('streams-per-connection ' + http.streams_per_connection | string + ';\n') if http.streams_per_connection is defined and http.streams_per_connection -}} {{ ('streams-per-connection ' + http.streams_per_connection | string + ';\n') if http.streams_per_connection is defined and http.streams_per_connection -}}
{% endfilter %}}; {% endfilter %}};
{% endfor %} {% endfor %}
{% endmacro %}

View File

@@ -1,5 +1,4 @@
{% macro include(files) %}
{% for file in files %} {% for file in item.include %}
include "{{ file }}"; include "{{ file }}";
{% endfor %} {% endfor %}
{% endmacro %}

View File

@@ -1,9 +1,8 @@
{% macro keylist(keylists) %} {% for keyname in item.keylist if item.keylist is iterable %}
{% for keyname in keylists if keylists is iterable %}
key {{ keyname.name }} { key {{ keyname.name }} {
{% filter indent(bind9_config_indent, true) %} {% filter indent(bind9_config_indent, true) %}
{{ ('algorithm ' + keyname.algorithm + ';\n') if keyname.algorithm is defined and keyname.algorithm -}} {{ ('algorithm ' + keyname.algorithm + ';\n') if keyname.algorithm is defined and keyname.algorithm -}}
{{ ('secret "' + keyname.secret + '";\n') if keyname.secret is defined and keyname.secret -}} {{ ('secret "' + keyname.secret + '";\n') if keyname.secret is defined and keyname.secret -}}
{% endfilter %}}; {% endfilter %}};
{% endfor %} {% endfor %}
{% endmacro %}

View File

@@ -1,11 +1,11 @@
{% macro logging(logging) %}
logging { logging {
{% filter indent(bind9_config_indent, true) %} {% filter indent(bind9_config_indent, true) %}
{% for category in logging.categories if logging.categories is defined and logging.categories %} {% for category in item.logging.categories if item.logging.categories is defined and item.logging.categories %}
category {{ category.name }} { category {{ category.name }} {
{{ functions.simple_item_list(category.channels) }}}; {{ functions.simple_item_list(category.channels) }}};
{% endfor %} {% endfor %}
{% for channel in logging.channels if logging.channels is defined and logging.channels %} {% for channel in item.logging.channels if item.logging.channels is defined and item.logging.channels %}
channel {{ channel.name }} { channel {{ channel.name }} {
{% filter indent(bind9_config_indent, true) %} {% filter indent(bind9_config_indent, true) %}
{% if channel.file is defined and channel.file %} {% if channel.file is defined and channel.file %}
@@ -26,4 +26,3 @@ file "{{ channel.file.name }}"
}; };
{% endfor %} {% endfor %}
{% endfilter %}}; {% endfilter %}};
{% endmacro %}

View File

@@ -1,3 +1,6 @@
options {
{% filter indent(bind9_config_indent,true)%}
{# Unicorn Options#} {# Unicorn Options#}
{% if item.options.rrset_order is defined and item.options.rrset_order %} {% if item.options.rrset_order is defined and item.options.rrset_order %}
rrset-order { rrset-order {
@@ -98,7 +101,7 @@ listen-on
{{ functions.simple_item_list(item.options.listen_on.addresses) }}}; {{ functions.simple_item_list(item.options.listen_on.addresses) }}};
{% endfor %} {% endfor %}
{% endif %} {% endif %}
{{ functions.parent_address_port_dscp("forwarders", item.options.forwarders) if item.options.forwarders is defined and item.options.forwarders -}} {{ functions.parent_address_port_tls('forwarders', item.options.forwarders) if item.options.forwarders is defined and item.options.forwarders -}}
{% if item.options.dual_stack_servers is defined and item.options.dual_stack_servers %} {% if item.options.dual_stack_servers is defined and item.options.dual_stack_servers %}
dual-stack-servers dual-stack-servers
{{ (' port ' + item.options.dual_stack_servers.port | string) if item.options.dual_stack_servers.port is defined and item.options.dual_stack_servers }} { {{ (' port ' + item.options.dual_stack_servers.port | string) if item.options.dual_stack_servers.port is defined and item.options.dual_stack_servers }} {
@@ -460,3 +463,6 @@ tkey-dhkey "{{ item.options.tkey_dhkey.key_name }}" {{ item.options.tkey_dhkey.k
{{ (functions.boolean_option('use-alt-transfer-source', item.options.use_alt_transfer_source) + '\n') if item.options.use_alt_transfer_source is defined -}} {{ (functions.boolean_option('use-alt-transfer-source', item.options.use_alt_transfer_source) + '\n') if item.options.use_alt_transfer_source is defined -}}
{{ (functions.boolean_option('zero-no-soa-ttl', item.options.zero_no_soa_ttl) + '\n') if item.options.zero_no_soa_ttl is defined -}} {{ (functions.boolean_option('zero-no-soa-ttl', item.options.zero_no_soa_ttl) + '\n') if item.options.zero_no_soa_ttl is defined -}}
{{ (functions.boolean_option('zero-no-soa-ttl-cache', item.options.zero_no_soa_ttl_cache) + '\n') if item.options.zero_no_soa_ttl_cache is defined -}} {{ (functions.boolean_option('zero-no-soa-ttl-cache', item.options.zero_no_soa_ttl_cache) + '\n') if item.options.zero_no_soa_ttl_cache is defined -}}
{% endfilter %}
};

View File

@@ -1,9 +1,8 @@
{% macro parental_agents(parental_agents) %} {% for agent in item.parental_agents if item.parental_agents is iterable %}
{% for agent in parental_agents if parental_agents is iterable %}
parental-agents {{ agent.name -}} parental-agents {{ agent.name -}}
{{ (' port ' + agent.port | string) if agent.port is defined and agent.port -}} {{ (' port ' + agent.port | string) if agent.port is defined and agent.port -}}
{{ (' dscp ' + agent.dscp | string) if agent.dscp is defined and agent.dscp }} { {{ (' dscp ' + agent.dscp | string) if agent.dscp is defined and agent.dscp }} {
{{ functions.list_address_port_key_tls(agent.addresses) -}}}; {{ functions.list_address_port_key_tls(agent.addresses) -}}};
{% endfor %} {% endfor %}
{% endmacro %}

View File

@@ -1,4 +1,5 @@
{% for primary in item.primaries if primaries is iterable %} {% for primary in item.primaries if item.primaries is iterable %}
primaries {{ primary.name -}} primaries {{ primary.name -}}
{{ (' port ' + primary.port | string) if primary.port is defined and primary.port -}} {{ (' port ' + primary.port | string) if primary.port is defined and primary.port -}}
{{ (' dscp ' + primary.dscp | string) if primary.dscp is defined and primary.dscp }} { {{ (' dscp ' + primary.dscp | string) if primary.dscp is defined and primary.dscp }} {

View File

@@ -1,5 +1,5 @@
{% macro server(servers) %} {% for server in item.server if item.server is iterable %}
{% for server in servers if servers is iterable %}
server {{ server.prefix }} { server {{ server.prefix }} {
{% filter indent(bind9_config_indent, true) %} {% filter indent(bind9_config_indent, true) %}
{% if server.transfer_source is defined and server.transfer_source is mapping %} {% if server.transfer_source is defined and server.transfer_source is mapping %}
@@ -54,4 +54,3 @@ query-source
{{ (functions.boolean_option('send-cookie', server.send_cookie) + '\n') if server.send_cookie is defined -}} {{ (functions.boolean_option('send-cookie', server.send_cookie) + '\n') if server.send_cookie is defined -}}
{% endfilter %}}; {% endfilter %}};
{% endfor %} {% endfor %}
{% endmacro %}

View File

@@ -1,10 +1,9 @@
{% macro statistics_channels(statistics_channels) %}
statistics-channels { statistics-channels {
{% filter indent(bind9_config_indent, true) %} {% filter indent(bind9_config_indent, true) %}
{% for channel in statistics_channels if statistics_channels is iterable %} {% for channel in item.statistics_channels if item.statistics_channels is iterable %}
inet {{ channel.address | string }} inet {{ channel.address | string }}
{{- (' port ' + channel.port | string) if channel.port is defined and channel.port -}} {{- (' port ' + channel.port | string) if channel.port is defined and channel.port -}}
{{- (' allow {\n' + functions.simple_item_list(channel.allow) + '};\n') if channel.allow is defined and channel.allow -}} {{- (' allow {\n' + functions.simple_item_list(channel.allow) + '};\n') if channel.allow is defined and channel.allow -}}
{% endfor %} {% endfor %}
{% endfilter %}}; {% endfilter %}};
{% endmacro %}

View File

@@ -1,5 +1,5 @@
{% macro tls(tlss) %} {% for tls in item.tls if item.tls is iterable %}
{% for tls in tlss if tlss is iterable %}
tls {{ tls.name }} { tls {{ tls.name }} {
{% filter indent(bind9_config_indent, true) %} {% filter indent(bind9_config_indent, true) %}
{{ ('cert-file "' + tls.cert_file + '";\n') if tls.cert_file is defined and tls.cert_file -}} {{ ('cert-file "' + tls.cert_file + '";\n') if tls.cert_file is defined and tls.cert_file -}}
@@ -13,4 +13,3 @@ tls {{ tls.name }} {
{{ (functions.boolean_option('session-tickets', tls.session_tickets) + '\n') if tls.session_tickets is defined -}} {{ (functions.boolean_option('session-tickets', tls.session_tickets) + '\n') if tls.session_tickets is defined -}}
{% endfilter %}}; {% endfilter %}};
{% endfor %} {% endfor %}
{% endmacro %}

View File

@@ -1,7 +1,7 @@
{% macro trust_anchors(trust_anchors) %}
trust-anchors { trust-anchors {
{% filter indent(bind9_config_indent, true) %} {% filter indent(bind9_config_indent, true) %}
{% for anchor in trust_anchors if trust_anchors is iterable %} {% for anchor in item.trust_anchors if item.trust_anchors is iterable %}
{{ (anchor.name | string) -}} {{ (anchor.name | string) -}}
{{ (' ' + anchor.type) -}} {{ (' ' + anchor.type) -}}
{{ (' ' + anchor.flags | string) -}} {{ (' ' + anchor.flags | string) -}}
@@ -10,4 +10,3 @@ trust-anchors {
{{ (' "' + anchor.key + '"') -}}; {{ (' "' + anchor.key + '"') -}};
{% endfor %} {% endfor %}
{% endfilter %}}; {% endfilter %}};
{% endmacro %}

View File

@@ -1,5 +1,5 @@
{% macro view(views) %} {% for view in item.view if item.view is iterable %}
{% for view in views if views is iterable %}
view {{ view.name }} { view {{ view.name }} {
{% filter indent(bind9_config_indent, true) %} {% filter indent(bind9_config_indent, true) %}
{{ ('match-recursive-only ' + functions.named_boolean(view.match_recursive_only) + ';\n') if view.match_recursive_only is defined -}} {{ ('match-recursive-only ' + functions.named_boolean(view.match_recursive_only) + ';\n') if view.match_recursive_only is defined -}}
@@ -75,4 +75,4 @@ view {{ view.name }} {
{{ trust_anchors(view.trust_anchors) -}} {{ trust_anchors(view.trust_anchors) -}}
{% endif %} {% endif %}
{% endfilter %} {% endfilter %}
};{% endfor %}{% endmacro %} };{% endfor %}

View File

@@ -1,6 +1,5 @@
# Zones Macro {% for zone in item.zones %}
{% macro zones(zones) -%}
{% for zone in zones %}
zone "{{ zone.name }}" { zone "{{ zone.name }}" {
{% filter indent(bind9_config_indent, true) %} {% filter indent(bind9_config_indent, true) %}
# Zone {{ zone.name }} type {{ zone.type }} # Zone {{ zone.name }} type {{ zone.type }}
@@ -48,7 +47,7 @@ server-names {
server-addresses { server-addresses {
{{ functions.simple_item_list(zone.server_addresses) }}}; {{ functions.simple_item_list(zone.server_addresses) }}};
{% endif %} {% endif %}
{{ functions.parent_address_port_dscp('forwarders', zone.forwarders) if zone.forwarders is defined and zone.forwarders -}} {{ functions.parent_address_port_tls('forwarders', zone.forwarders) if zone.forwarders is defined and zone.forwarders -}}
{% if zone.allow_transfer is defined and zone.allow_transfer is not string %} {% if zone.allow_transfer is defined and zone.allow_transfer is not string %}
allow-transfer allow-transfer
{{- (' port ' + zone.allow_transfer.port | string) if zone.allow_transfer.port is defined and zone.allow_transfer.port -}} {{- (' port ' + zone.allow_transfer.port | string) if zone.allow_transfer.port is defined and zone.allow_transfer.port -}}
@@ -157,6 +156,4 @@ parental-source-v6 {{ zone.parental_source_v6.address -}}
{{ ('in-view ' + zone.in_view | string+';\n') if zone.in_view is defined and zone.in_view -}} {{ ('in-view ' + zone.in_view | string+';\n') if zone.in_view is defined and zone.in_view -}}
{% endfilter %} {% endfilter %}
}; };
{% endfor %} {% endfor %}
{% endmacro %}