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>
70 lines
2.4 KiB
YAML
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
|