76 lines
2.9 KiB
YAML
76 lines
2.9 KiB
YAML
|
|
---
|
||
|
|
- 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
|