--- - name: Render knot master config ansible.builtin.template: src: etc/knot/knot.conf.j2 dest: /etc/knot/knot.conf owner: knot group: knot mode: "0640" vars: zones: "{{ hostvars[inventory_hostname] | dict2items | selectattr('key', 'match', '^knot_zone_.+$') | map(attribute='value') | list }}" notify: restart knot - name: Create knot zone directories ansible.builtin.file: path: "{{ item }}" state: directory owner: knot group: knot mode: "0750" loop: - "{{ knot_zone_master_storage_path }}" - "{{ knot_zone_replica_storage_path }}" - name: Make sure all zones have a name ansible.builtin.assert: that: - "'name' in item.value" - "item.value.name | type_debug == 'str'" fail_msg: "{{ item.key }} does not have a name" loop: "{{ hostvars[inventory_hostname] | dict2items | selectattr('key', 'match', '^knot_zone_.+$') | list }}" - name: Make sure all zones have at least one master defined ansible.builtin.assert: that: - "'masters' in item.value" - "item.value.masters | type_debug == 'list'" - "item.value.masters | length > 0" fail_msg: "{{ item.key }} does not have a zone master" loop: "{{ hostvars[inventory_hostname] | dict2items | selectattr('key', 'match', '^knot_zone_.+$') | list }}" - name: Render knot zone files ansible.builtin.template: src: var/lib/knot/master/zone.j2 dest: "{{ knot_zone_master_storage_path }}/{{ item.name }}zone" owner: knot group: knot mode: "0640" validate: "/usr/bin/kzonecheck -o {{ item.name }} -v %s" vars: zone: "{{ item }}" when: "inventory_hostname in item['masters']" loop: "{{ hostvars[inventory_hostname] | dict2items | selectattr('key', 'match', '^knot_zone_.+$') | map(attribute='value') | list }}" notify: reload knot - name: Start and enable knot ansible.builtin.service: name: knot state: started enabled: true