✨: add nsd role
This commit is contained in:
56
roles/nsd/tasks/main.yml
Normal file
56
roles/nsd/tasks/main.yml
Normal file
@@ -0,0 +1,56 @@
|
||||
---
|
||||
|
||||
- name: Install & check prerequisites
|
||||
ansible.builtin.include_tasks: prerequisites.yml
|
||||
|
||||
- name: Create slave group
|
||||
ansible.builtin.group_by:
|
||||
key: slave_nsdservers
|
||||
when: not nsd_master
|
||||
|
||||
- name: Create master group
|
||||
ansible.builtin.group_by:
|
||||
key: master_nsdservers
|
||||
when: nsd_master
|
||||
|
||||
- name: Create zone dir
|
||||
ansible.builtin.file:
|
||||
path: "{{ nsd_default_etc_path }}zones"
|
||||
owner: root
|
||||
group: root
|
||||
mode: "0755"
|
||||
state: directory
|
||||
|
||||
- name: Create nsd.conf
|
||||
ansible.builtin.template:
|
||||
src: nsd.conf.j2
|
||||
dest: "{{ nsd_default_etc_path }}nsd.conf"
|
||||
owner: root
|
||||
group: root
|
||||
mode: "0640"
|
||||
notify:
|
||||
- Restart nsd
|
||||
|
||||
- name: Create each zone in NSD
|
||||
ansible.builtin.template:
|
||||
src: zone.j2
|
||||
dest: "{{ nsd_default_etc_path }}nsd.conf.d/{{ item }}.conf"
|
||||
owner: root
|
||||
group: root
|
||||
mode: "0644"
|
||||
loop: "{{ zones }}"
|
||||
notify:
|
||||
- Restart nsd
|
||||
|
||||
- name: Force zone reload
|
||||
ansible.builtin.meta: flush_handlers
|
||||
|
||||
- name: Create zone and reload
|
||||
ansible.builtin.include_tasks: zones.yml
|
||||
loop: "{{ zones }}"
|
||||
when: nsd_master
|
||||
|
||||
- name: Ensure nsd is started
|
||||
ansible.builtin.service:
|
||||
name: nsd
|
||||
state: started
|
28
roles/nsd/tasks/prerequisites.yml
Normal file
28
roles/nsd/tasks/prerequisites.yml
Normal file
@@ -0,0 +1,28 @@
|
||||
---
|
||||
|
||||
- name: Gather facts on listening ports
|
||||
community.general.listen_ports_facts:
|
||||
|
||||
- name: Detect systemd-resolve
|
||||
ansible.builtin.set_fact:
|
||||
_systemd_resolve_enable: "{{ ansible_facts.udp_listen | selectattr('port', 'eq', 53) | selectattr('name', 'eq', 'systemd-resolve') | count > 0 }}"
|
||||
|
||||
- name: Deactivate DNS stublistener
|
||||
ansible.builtin.lineinfile:
|
||||
path: /etc/systemd/resolved.conf
|
||||
regex: '^#DNSStubListener=yes'
|
||||
line: DNSStubListener=no
|
||||
when: _systemd_resolve_enable
|
||||
notify:
|
||||
- Restart systemd-resolved
|
||||
|
||||
- name: Force restart for stub resolver
|
||||
ansible.builtin.meta: flush_handlers
|
||||
|
||||
- name: Install nsd & utilities
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- nsd
|
||||
- dnsutils
|
||||
- ldnsutils
|
||||
state: present
|
28
roles/nsd/tasks/zones.yml
Normal file
28
roles/nsd/tasks/zones.yml
Normal file
@@ -0,0 +1,28 @@
|
||||
---
|
||||
|
||||
- name: Create zone file
|
||||
ansible.builtin.template:
|
||||
src: "{{ 'zones/parking.zone.j2' if item.parking | default(false) else 'zones/' ~ item.name ~ '.zone.j2' }}"
|
||||
dest: "{{ nsd_default_etc_path }}zones/{{ item.name }}.zone"
|
||||
owner: root
|
||||
group: root
|
||||
mode: "0644"
|
||||
vars:
|
||||
# This generates 99 different serial per day
|
||||
dns_serial: "{{ ansible_date_time.year }}{{ ansible_date_time.month }}{{ ansible_date_time.day }}{{ ((ansible_date_time.hour | int * 3600 + ansible_date_time.minute | int * 60 + ansible_date_time.second | int) * 99 / 86400) | int }}"
|
||||
|
||||
- name: Force zone file modification time
|
||||
ansible.builtin.file:
|
||||
path: "{{ nsd_default_etc_path }}zones/{{ item.name }}.zone"
|
||||
state: touch
|
||||
mode: "0644"
|
||||
|
||||
- name: Check zone file
|
||||
ansible.builtin.command:
|
||||
cmd: "nsd-checkzone {{ item.name }} {{ nsd_default_etc_path }}zones/{{ item.name }}.zone"
|
||||
changed_when: false
|
||||
|
||||
- name: Reload zone
|
||||
ansible.builtin.command:
|
||||
cmd: "nsd-control reload {{ item.name }}"
|
||||
changed_when: false
|
Reference in New Issue
Block a user