195 lines
6.6 KiB
YAML
195 lines
6.6 KiB
YAML
---
|
|
- name: Set list of all host IP addresses
|
|
ansible.builtin.set_fact:
|
|
named_host_all_addresses: "{{ ansible_all_ipv4_addresses | union(ansible_all_ipv6_addresses) }}"
|
|
tags: bind
|
|
|
|
- name: Read forward zone hashes
|
|
ansible.builtin.shell: grep -s "^; Hash:" {{ named_zone_dir }}/{{ item.name }} || true
|
|
changed_when: false
|
|
check_mode: false
|
|
register: named_forward_hashes_temp
|
|
with_items:
|
|
- "{{ named_zones }}"
|
|
run_once: true
|
|
loop_control:
|
|
label: "{{ item.name }}"
|
|
tags: bind
|
|
|
|
- name: Create dict of forward hashes
|
|
ansible.builtin.set_fact:
|
|
named_forward_hashes: "{{ named_forward_hashes | default([]) + [{'hash': item.stdout | default(), 'name': item.item.name}] }}"
|
|
with_items:
|
|
- "{{ named_forward_hashes_temp.results }}"
|
|
run_once: true
|
|
loop_control:
|
|
label: "{{ item.item.name }}"
|
|
tags: bind
|
|
|
|
- name: Read reverse ipv4 zone hashes
|
|
ansible.builtin.shell: grep -s "^; Hash:" {{ named_zone_dir }}/{{ ('.'.join(item.1.replace(item.1+'.','').split('.')[::-1])) }}.in-addr.arpa || true
|
|
changed_when: false
|
|
check_mode: false
|
|
register: named_reverse_hashes_temp
|
|
with_subelements:
|
|
- "{{ named_zones }}"
|
|
- networks
|
|
- flags:
|
|
skip_missing: true
|
|
run_once: true
|
|
loop_control:
|
|
label: "{{ item.1 }}"
|
|
tags: bind
|
|
|
|
- name: Create dict of reverse hashes
|
|
ansible.builtin.set_fact:
|
|
named_reverse_hashes: "{{ named_reverse_hashes | default([]) + [{'hash': item.0.stdout | default(), 'network': item.1}] }}"
|
|
with_subelements:
|
|
- "{{ named_reverse_hashes_temp.results }}"
|
|
- item
|
|
run_once: true
|
|
loop_control:
|
|
label: "{{ item.1.name | default(item.0.cmd.split(' ')[4]) }}"
|
|
tags: bind
|
|
|
|
- name: Read reverse ipv6 zone hashes
|
|
ansible.builtin.shell: grep -s "^; Hash:" {{ named_zone_dir }}/{{ (item.1 | ipaddr('revdns'))[-(9+(item.1|regex_replace('^.*/','')|int)//2):-1] }} || true
|
|
changed_when: false
|
|
check_mode: false
|
|
register: named_reverse_hashes_ipv6_temp
|
|
with_subelements:
|
|
- "{{ named_zones }}"
|
|
- ipv6_networks
|
|
- flags:
|
|
skip_missing: true
|
|
run_once: true
|
|
loop_control:
|
|
label: "{{ item.1 }}"
|
|
tags: bind
|
|
|
|
- name: Create dict of reverse ipv6 hashes
|
|
ansible.builtin.set_fact:
|
|
named_reverse_hashes_ipv6: "{{ named_reverse_hashes_ipv6 | default([]) + [{'hash': item.0.stdout | default(), 'network': item.1}] }}"
|
|
with_subelements:
|
|
- "{{ named_reverse_hashes_ipv6_temp.results }}"
|
|
- item
|
|
run_once: true
|
|
loop_control:
|
|
label: "{{ item.1.name | default(item.0.cmd.split(' ')[4]) }}"
|
|
tags: bind
|
|
|
|
- name: Read standalone reverse zone hashes
|
|
ansible.builtin.shell: grep -s "^; Hash:" {{ named_zone_dir }}/{{ item.name }} || true
|
|
changed_when: false
|
|
check_mode: false
|
|
register: named_reverse_standalone_hashes_temp
|
|
with_items: "{{ named_zones | selectattr('reverse_zone', 'defined') | selectattr('reverse_zone') | list }}"
|
|
run_once: true
|
|
loop_control:
|
|
label: "{{ item.name }}"
|
|
tags: bind
|
|
|
|
- name: Create dict of standalone reverse hashes
|
|
ansible.builtin.set_fact:
|
|
named_reverse_standalone_hashes: >-
|
|
{{ named_reverse_standalone_hashes | default([]) +
|
|
[{'hash': item.stdout | default(), 'name': item.item.name}] }}
|
|
with_items: "{{ named_reverse_standalone_hashes_temp.results | default([]) }}"
|
|
run_once: true
|
|
loop_control:
|
|
label: "{{ item.item.name }}"
|
|
tags: bind
|
|
|
|
- name: Create forward lookup zone file
|
|
ansible.builtin.template:
|
|
src: bind_zone.j2
|
|
dest: "{{ named_zone_dir }}/{{ item.name }}"
|
|
owner: "{{ named_owner }}"
|
|
group: "{{ named_group }}"
|
|
mode: "{{ named_zone_file_mode }}"
|
|
setype: named_zone_t
|
|
validate: named-checkzone -d {{ item.name }} %s
|
|
become: true
|
|
with_items:
|
|
- "{{ named_zones }}"
|
|
loop_control:
|
|
label: "{{ item.name }}"
|
|
when: >
|
|
(item.reverse_zone is not defined or not item.reverse_zone) and
|
|
(item.create_forward_zones is not defined or item.create_forward_zones) and
|
|
((item.type is defined and item.type == 'primary') or
|
|
(item.type is not defined and item.primaries is defined and
|
|
(named_host_all_addresses | intersect(item.primaries) | length > 0)))
|
|
notify: Reload bind
|
|
tags: bind
|
|
|
|
- name: Create reverse lookup zone file
|
|
ansible.builtin.template:
|
|
src: reverse_zone.j2
|
|
dest: "{{ named_zone_dir }}/{{ ('.'.join(item.1.replace(item.1+'.','').split('.')[::-1])) }}.in-addr.arpa"
|
|
owner: "{{ named_owner }}"
|
|
group: "{{ named_group }}"
|
|
mode: "{{ named_zone_file_mode }}"
|
|
setype: named_zone_t
|
|
validate: named-checkzone {{ ('.'.join(item.1.replace(item.1+'.','').split('.')[::-1])) }}.in-addr.arpa %s
|
|
become: true
|
|
with_subelements:
|
|
- "{{ named_zones }}"
|
|
- networks
|
|
- flags:
|
|
skip_missing: true
|
|
loop_control:
|
|
label: "{{ item.1 }}"
|
|
when: >
|
|
(item.create_reverse_zones is not defined or item.create_reverse_zones) and
|
|
((item[0].type is defined and item[0].type == 'primary') or
|
|
(item[0].type is not defined and item[0].primaries is defined and
|
|
(named_host_all_addresses | intersect(item[0].primaries) | length > 0)))
|
|
notify: Reload bind
|
|
tags: bind
|
|
|
|
- name: Create reverse IPv6 lookup zone file
|
|
ansible.builtin.template:
|
|
src: reverse_zone_ipv6.j2
|
|
dest: "{{ named_zone_dir }}/{{ (item.1 | ipaddr('revdns'))[-(9+(item.1|regex_replace('^.*/','')|int)//2):-1] }}"
|
|
owner: "{{ named_owner }}"
|
|
group: "{{ named_group }}"
|
|
mode: "{{ named_zone_file_mode }}"
|
|
setype: named_zone_t
|
|
validate: named-checkzone {{ (item.1 | ipaddr('revdns'))[-(9+(item.1|regex_replace('^.*/','')|int)//2):] }} %s
|
|
become: true
|
|
with_subelements:
|
|
- "{{ named_zones }}"
|
|
- ipv6_networks
|
|
- flags:
|
|
skip_missing: true
|
|
loop_control:
|
|
label: "{{ item.1 }}"
|
|
when: >
|
|
(item.create_reverse_zones is not defined or item.create_reverse_zones) and
|
|
((item[0].type is defined and item[0].type == 'primary') or
|
|
(item[0].type is not defined and item[0].primaries is defined and
|
|
(named_host_all_addresses | intersect(item[0].primaries) | length > 0)))
|
|
notify: Reload bind
|
|
tags: bind
|
|
|
|
- name: Create standalone reverse lookup zone file
|
|
ansible.builtin.template:
|
|
src: reverse_zone_standalone.j2
|
|
dest: "{{ named_zone_dir }}/{{ item.name }}"
|
|
owner: "{{ named_owner }}"
|
|
group: "{{ named_group }}"
|
|
mode: "{{ named_zone_file_mode }}"
|
|
setype: named_zone_t
|
|
validate: named-checkzone {{ item.name }} %s
|
|
become: true
|
|
with_items: "{{ named_zones | selectattr('reverse_zone', 'defined') | selectattr('reverse_zone') | list }}"
|
|
loop_control:
|
|
label: "{{ item.name }}"
|
|
when: >
|
|
(item.type is defined and item.type == 'primary') or
|
|
(item.type is not defined and item.primaries is defined and
|
|
(named_host_all_addresses | intersect(item.primaries) | length > 0))
|
|
notify: Reload bind
|
|
tags: bind
|