Set-OPS-Public/roles/client_resolveur/tasks/main.yml

76 lines
2.9 KiB
YAML
Raw Normal View History

---
- name: Exiger un résolveur joignable quand l'intégration est active
ansible.builtin.assert:
that:
- client_resolveur_adresse | length > 0
fail_msg: >-
client_resolveur est actif mais aucun hôte ne porte `serveur_resolveur`, ou son
adresse est introuvable. Déclarer le service au plan, ou forcer
client_resolveur_actif=false.
when: client_resolveur_actif | bool
- name: Refuser la bascule du résolveur sans confirmation explicite
ansible.builtin.assert:
that:
- client_resolveur_confirm | bool
fail_msg: "Bascule refusée : définir client_resolveur_confirm=true (avec client_resolveur_apply=true)."
when: client_resolveur_apply | bool
# ON VÉRIFIE AVANT DE BASCULER, PAS APRÈS. Un resolv.conf qui pointe vers un service muet
# coupe l'hôte de tout — et le diagnostic, lui, exige de résoudre des noms.
- name: Valider que le résolveur répond AVANT de basculer (interne + Internet)
ansible.builtin.command: "dig @{{ client_resolveur_adresse }} {{ item.nom }} {{ item.type }} +short"
register: client_resolveur_validation
changed_when: false
failed_when: client_resolveur_validation.stdout | trim == ''
loop:
- { nom: "{{ client_resolveur_zone_interne }}", type: "SOA" }
- { nom: "deb.debian.org", type: "A" }
loop_control:
label: "{{ item.nom }} {{ item.type }}"
when:
- client_resolveur_actif | bool
- client_resolveur_apply | bool
- client_resolveur_confirm | bool
- not ansible_check_mode
- name: Désigner le résolveur de l'écosystème
ansible.builtin.copy:
dest: "{{ client_resolveur_resolv_conf }}"
content: |
# Généré par Set-OPS (rôle client_resolveur). Résolveur de l'écosystème.
search {{ client_resolveur_zone_interne }}
nameserver {{ client_resolveur_adresse }}
owner: root
group: root
mode: "0644"
when:
- client_resolveur_actif | bool
- client_resolveur_apply | bool
- client_resolveur_confirm | bool
- not ansible_check_mode
# RETIRER L'ANCIEN DÉMON LOCAL — APRÈS la bascule, jamais avant.
#
# Sans cette tâche, les N Unbound qu'on voulait supprimer resteraient installés et actifs :
# le rôle aurait changé le `resolv.conf` sans rien économiser, et la raison même du
# changement serait perdue. Une intégration qui ne sait pas se retirer est un piège
# différé.
#
# L'ORDRE COMPTE. Retirer le paquet avant d'avoir écrit le nouveau `resolv.conf` couperait
# l'hôte de toute résolution au milieu du play — et le diagnostic, lui, a besoin de
# résoudre des noms.
#
# L'HÔTE QUI PORTE LE RÉSOLVEUR EST ÉPARGNÉ, évidemment : c'est le même paquet.
- name: Retirer le résolveur local devenu inutile
ansible.builtin.apt:
name: unbound
state: absent
purge: false
when:
- client_resolveur_actif | bool
- client_resolveur_apply | bool
- client_resolveur_confirm | bool
- inventory_hostname not in (groups['serveur_resolveur'] | default([]))
- not ansible_check_mode