Applicateur de frontiere : ecrire n est pas charger, le chemin rien a faire charge desormais. site-verifier compare enfin playbooks/site.yml, regenere avec le groupe. Base TSIG dans un repertoire a pdns et pdnsutil en pdns (journal SQLite). Flux UDP 5300 : le secondaire demande le SOA avant de transferer, garde dans P82. socket-dir de pdns@public, et le failed_when qui taisait la notification est retire. Eprouve sur les machines : 2 zones sur 2 tirees automatiquement, NOTIFY compte, zone interne refusee. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
67 lines
2.9 KiB
YAML
67 lines
2.9 KiB
YAML
---
|
|
- name: Validate PowerDNS zone
|
|
ansible.builtin.command:
|
|
cmd: "named-checkzone {{ serveur_powerdns_zone }} {{ serveur_powerdns_zone_directory }}/{{ serveur_powerdns_zone }}.zone"
|
|
changed_when: false
|
|
when: not ansible_check_mode # en dry-run le fichier de zone n'existe pas encore
|
|
listen: Validate and reload PowerDNS
|
|
|
|
# UNE ZONE NON VALIDEE EST UNE ZONE QUI PEUT NE PAS ETRE SERVIE. La zone directe etait
|
|
# verifiee, les inverses non : PowerDNS refuse silencieusement un fichier mal forme et
|
|
# continue de servir le reste, si bien qu'un PTR casse ne se voit qu'a l'usage — et
|
|
# l'usage, ici, c'est un journal ou un courriel qui reproche un nom sans le dire.
|
|
- name: Validate PowerDNS reverse zones
|
|
ansible.builtin.command:
|
|
cmd: >-
|
|
named-checkzone {{ zone_inverse }}
|
|
{{ serveur_powerdns_zone_directory }}/{{ zone_inverse }}.zone
|
|
changed_when: false
|
|
loop: "{{ serveur_powerdns_zones_inverses | default([]) }}"
|
|
loop_control:
|
|
loop_var: zone_inverse
|
|
when: not ansible_check_mode # en dry-run le fichier de zone n'existe pas encore
|
|
listen: Validate and reload PowerDNS
|
|
|
|
- name: Restart PowerDNS
|
|
ansible.builtin.systemd:
|
|
name: "{{ serveur_powerdns_service_name }}"
|
|
state: restarted
|
|
when: not ansible_check_mode # en dry-run le service n'existe pas encore
|
|
listen: Validate and reload PowerDNS
|
|
|
|
# L'INSTANCE PUBLIQUE : on valide chaque zone AVANT de redemarrer — une zone refusee est
|
|
# une zone que le secondaire du site cesserait de recevoir, sans erreur visible dehors.
|
|
- name: Valider les zones publiques
|
|
ansible.builtin.command:
|
|
cmd: >-
|
|
named-checkzone {{ zone_publique }}
|
|
{{ serveur_powerdns_public_zones_dir }}/{{ zone_publique }}.zone
|
|
changed_when: false
|
|
loop: "{{ serveur_powerdns_zones_publiques | default([]) }}"
|
|
loop_control:
|
|
loop_var: zone_publique
|
|
when: not ansible_check_mode
|
|
listen: Valider et redemarrer le DNS public du locataire
|
|
|
|
- name: Redemarrer l'instance publique
|
|
ansible.builtin.systemd:
|
|
name: pdns@public
|
|
state: restarted
|
|
when: not ansible_check_mode
|
|
listen: Valider et redemarrer le DNS public du locataire
|
|
|
|
# PREVENIR LE SITE TOUT DE SUITE : sans notification, le secondaire attendrait le
|
|
# rafraichissement du SOA — une heure de retard sur chaque changement.
|
|
- name: Notifier le serveur public du site
|
|
ansible.builtin.command:
|
|
argv: [pdns_control, --config-name=public, notify, "{{ zone_publique }}"]
|
|
changed_when: false
|
|
# PAS DE `failed_when: false` (retire le 2026-09-16). Il cachait un socket de controle
|
|
# introuvable : la notification echouait a chaque deploiement, sans un mot, et un
|
|
# changement de zone aurait mis jusqu'a l'expiration du SOA a se propager. Un canal de
|
|
# controle casse est un defaut, pas un bruit.
|
|
loop: "{{ serveur_powerdns_zones_publiques | default([]) }}"
|
|
loop_control:
|
|
loop_var: zone_publique
|
|
when: not ansible_check_mode
|
|
listen: Valider et redemarrer le DNS public du locataire
|