Une VM ne peut pas s'installer sans resoudre des noms. PowerDNS repond UNIQUEMENT pour la zone souveraine et ne recurse pour personne : il manquait un resolveur recursif. `client_unbound` est l'outil ecrit pour ca — il rejoint `client_journal` et `client_metrique` parmi les integrations universelles. `infra-dns-01` est exempte (PowerDNS occupe son port 53), et `serveur_powerdns_listen_addresses` passe de 0.0.0.0 a l'adresse de l'hote pour laisser 127.0.0.1:53 libre. Mais l'appartenance au groupe est AUSSI ce qui ouvre le port 53 a la frontiere : en exemptant la machine, je lui retirais le droit de resoudre. `serveur_powerdns` declare donc son propre flux sortant — il ne recurse pour personne, mais doit resoudre pour lui-meme. Nouvel intrant `dns_amorcage`, derive jusqu'a `make creer-vm`. Cloud-init l'ecrit bien mais sans effet : `dns-nameservers` exige `resolvconf`, absent du gabarit, et installer resolvconf demande apt, qui demande la resolution. `serveur_debian` pose donc le resolveur en pre_tasks, avant le premier apt, avec une garde qui respecte la bascule ulterieure de client_unbound. Defaut corrige en chemin : `_intrants_communs()` lisait `instance/` en dur ; le chemin derive maintenant de l'inventaire recu, et un test le prouve. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
56 lines
2.1 KiB
YAML
56 lines
2.1 KiB
YAML
---
|
|
- name: Appliquer le groupe serveur_debian
|
|
hosts: serveur_debian
|
|
become: true
|
|
gather_facts: true
|
|
|
|
pre_tasks:
|
|
- name: Vérifier que la cible est Debian
|
|
ansible.builtin.assert:
|
|
that:
|
|
- ansible_facts.distribution == "Debian"
|
|
fail_msg: "Ce playbook est prévu pour Debian."
|
|
|
|
# Résolveur d'AMORÇAGE, posé avant `common_packages` — donc avant le premier `apt`.
|
|
# Sans lui, le déploiement échoue avant d'avoir commencé : le gabarit doré transporte
|
|
# un `/etc/resolv.conf` figé, et le `dns-nameservers` écrit par cloud-init reste sans
|
|
# effet faute de `resolvconf` (qu'on ne peut pas installer sans résolution — la boucle
|
|
# se referme). Mesuré le 2026-08-06 sur deux VM neuves.
|
|
#
|
|
# PASSAGE DE RELAIS : `client_unbound` reprend ce fichier plus tard pour le basculer
|
|
# vers `127.0.0.1`. La garde ci-dessous le respecte — sans elle, chaque déploiement
|
|
# défairait la bascule, et deux rôles se disputeraient le même fichier sans fin.
|
|
- name: Lire le résolveur en place
|
|
ansible.builtin.slurp:
|
|
src: /etc/resolv.conf
|
|
register: serveur_debian_resolv_actuel
|
|
failed_when: false
|
|
changed_when: false
|
|
|
|
- name: Poser le résolveur d'amorçage (avant tout apt)
|
|
ansible.builtin.copy:
|
|
dest: /etc/resolv.conf
|
|
owner: root
|
|
group: root
|
|
mode: "0644"
|
|
content: |
|
|
# Géré par Set-OPS — résolveur d'amorçage (intrant `dns_amorcage`).
|
|
# Remplacé par `client_unbound` lorsqu'il bascule vers le résolveur local.
|
|
{% for serveur in dns_amorcage.split(',') if serveur | trim %}
|
|
nameserver {{ serveur | trim }}
|
|
{% endfor %}
|
|
when:
|
|
- dns_amorcage is defined
|
|
- dns_amorcage | string | length > 0
|
|
- "'127.0.0.1' not in (serveur_debian_resolv_actuel.content | default('') | b64decode | string)"
|
|
|
|
roles:
|
|
- common_packages
|
|
- hosts_statiques
|
|
- qemu_guest_agent
|
|
- cloud_init
|
|
- sudo_ansible
|
|
- chrony
|
|
- ssh_baseline
|
|
- systemd_ssh_auto
|
|
- motd
|