--- - 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