2026-06-24 20:17:46 -04:00
|
|
|
---
|
|
|
|
|
- name: Appliquer le groupe serveur_debian
|
|
|
|
|
hosts: serveur_debian
|
|
|
|
|
become: true
|
empreintes muettes, courses de premier demarrage, collision de noms
Quatre meta/empreinte.yml declaraient leurs valeurs A LA RACINE, sans la cle
`setops_empreinte:` : collabora, nextcloud, web_dorsal, web_frontal. Le lecteur
les voyait vides et rendait {0,0,0} — en silence. collab-01 s'est retrouvee avec
1 coeur / 1 Go pour porter Nextcloud ET Collabora, et a cesse de repondre en SSH
faute de memoire. Corrigee : 4c/5632Mo. Une garde refuse desormais cette forme.
Un fichier qui existe mais ne dit rien est pire qu'un fichier absent : le repli
aurait donne des valeurs sensees.
Deux courses de premier demarrage :
- le clone rend la main avant que son .conf existe -> attente active sur l'API ;
- le verrou dpkg frappait hors de `common_packages` -> `lock_timeout` pose en
module_defaults sur les 30 playbooks de groupe, une declaration au lieu de 30.
Au passage, j'ai failli livrer pire que le defaut : une URL coupee avec `>-`
inserait une ESPACE en son milieu. Le lint passait, la requete non.
Enfin : `proxmox_kvm` identifie une VM par son NOM. Une VM heritee homonyme lui
a fait rapporter `ok` sans rien cloner — un deploiement peut donc PARAITRE
reussi alors qu'aucune VM n'existe. Touche D-37 directement.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-07 16:22:38 -04:00
|
|
|
# Le verrou dpkg est tenu par les maj automatiques de Debian, par vagues, plusieurs
|
|
|
|
|
# minutes apres le premier demarrage. Pose ICI plutot que dans chaque role : toute
|
|
|
|
|
# tache apt du play en herite, y compris celles des roles inclus.
|
|
|
|
|
module_defaults:
|
|
|
|
|
ansible.builtin.apt:
|
|
|
|
|
lock_timeout: 300
|
|
|
|
|
|
2026-06-24 20:17:46 -04:00
|
|
|
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."
|
|
|
|
|
|
dns : client_unbound universel, et un resolveur d'amorcage
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>
2026-08-06 21:41:58 -04:00
|
|
|
# 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)"
|
|
|
|
|
|
2026-06-24 20:17:46 -04:00
|
|
|
roles:
|
|
|
|
|
- common_packages
|
2026-06-30 18:05:42 -04:00
|
|
|
- hosts_statiques
|
2026-06-24 20:17:46 -04:00
|
|
|
- qemu_guest_agent
|
|
|
|
|
- cloud_init
|
|
|
|
|
- sudo_ansible
|
|
|
|
|
- chrony
|
|
|
|
|
- ssh_baseline
|
|
|
|
|
- systemd_ssh_auto
|
|
|
|
|
- motd
|