Set-OPS-Public/roles/client_dns/tasks/main.yml
Daniel Allaire a9a1493440 Plancher de résolution /etc/hosts (indépendant du DNS)
Nouveau rôle de socle hosts_statiques (dans serveur_debian) : génère
/etc/hosts sur chaque VM depuis l'inventaire. L'écosystème se résout par
nom même DNS éteint, et le bootstrap ne dépend plus du DNS. client_dns
rendu tolérant (inerte sans DNS interne) ; dépendance client_dns→powerdns
passée molle. PowerDNS devient une commodité (zone/externe).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 18:05:42 -04:00

70 lines
2.4 KiB
YAML

---
- name: Déterminer les serveurs DNS internes depuis l'inventaire
ansible.builtin.set_fact:
client_dns_effective_nameservers: >-
{{
client_dns_nameservers
if (client_dns_nameservers | length > 0)
else (
groups.get('serveur_powerdns', [])
| map('extract', hostvars, 'ansible_host')
| select('defined')
| list
)
}}
- name: Sans DNS interne, s'appuyer sur le plancher /etc/hosts (résolution garantie)
ansible.builtin.debug:
msg: >-
Aucun serveur DNS interne déclaré : la résolution interne repose sur le
plancher /etc/hosts (rôle hosts_statiques). Configuration du resolver ignorée.
when: client_dns_effective_nameservers | length == 0
- name: Installer les outils de diagnostic DNS
ansible.builtin.apt:
name: dnsutils
state: present
update_cache: true
cache_valid_time: 3600
# Les tâches ci-dessous ne s'exécutent que si un DNS interne existe.
# Sinon /etc/hosts (socle) assure déjà la résolution interne : dépendance molle.
- name: Valider la zone DNS interne sur le serveur primaire
ansible.builtin.command:
cmd: "dig @{{ client_dns_effective_nameservers[0] }} {{ client_dns_zone }} SOA +short"
register: client_dns_soa_check
changed_when: false
failed_when: client_dns_soa_check.stdout | trim == ""
when: client_dns_effective_nameservers | length > 0
- name: Refuser la modification DNS sans confirmation explicite
ansible.builtin.assert:
that:
- client_dns_confirm | bool
fail_msg: "Modification DNS refusee: definir client_dns_confirm=true pour modifier le resolver."
when:
- client_dns_apply | bool
- client_dns_effective_nameservers | length > 0
- name: Configurer le resolver client
ansible.builtin.template:
src: resolv.conf.j2
dest: "{{ client_dns_resolv_conf_path }}"
owner: root
group: root
mode: "0644"
backup: true
when:
- client_dns_apply | bool
- client_dns_confirm | bool
- client_dns_effective_nameservers | length > 0
- name: Valider la résolution du nom local dans la zone interne
ansible.builtin.command:
cmd: "dig @{{ client_dns_effective_nameservers[0] }} {{ inventory_hostname }}.{{ client_dns_zone }} A +short"
register: client_dns_host_check
changed_when: false
failed_when: client_dns_host_check.stdout | trim == ""
when:
- ansible_host is defined
- client_dns_effective_nameservers | length > 0