--- - name: create knot zone directories 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 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 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 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 -v %s when: "inventory_hostname in item['masters']" loop: "{{ hostvars[inventory_hostname] | dict2items | selectattr('key', 'match', '^knot_zone_.+$') | map(attribute='value') | list }}" notify: reload knot - name: render knot master config 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: reload knot