Le wiki datait du 3 aout. Verifie avant d'y toucher : toutes les cibles make citees existent, aucune commande morte. La-preuve.md annoncait P01-P21 ; le harnais est a P33. Les trois nouvelles ajoutees, et surtout la page dit maintenant ce que ces preuves NE FONT PAS : elles sont statiques, elles lisent le depot, et c'est dans cet angle mort qu'une AC est restee expiree huit heures sous un harnais vert. Infra-as-Code-et-idempotence.md enseignait l'idempotence comme acquise. Vrai role par role, faux a l'echelle de la flotte. La page enseigne desormais depuis les chiffres (924 -> 17 -> 0), raconte ce que les 17 cachaient, et explique pourquoi il faut verifier le zero lui-meme. Nouvelle unite « Verifier le deploye » : la difference entre valider du code et verifier un systeme, avec les trois regles qui separent un devis utile d'un devis decoratif. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
4.4 KiB
Infra as Code & idempotence
Unité d'apprentissage. Moule : ① concept → ② Set-OPS → ③ transférable → ④ à toi de jouer.
① Le concept (générique)
Infra as Code (IaC) : décrire l'infrastructure dans du code (versionné, revu, reproductible) plutôt qu'à la main. Le serveur devient le résultat d'un fichier, pas d'une suite de clics oubliés.
Déclaratif vs impératif :
- impératif = « fais ceci, puis cela » (une recette d'étapes) ;
- déclaratif = « voici l'état voulu » (le moteur trouve comment y arriver).
Idempotence : appliquer la même description N fois donne le même résultat. La 1ʳᵉ
exécution change des choses ; les suivantes ne changent rien (changed=0). C'est ce qui rend
l'IaC sûre à rejouer.
Modèle plan → apply : on décrit (plan), on prévisualise (dry-run), on applique. Tout est en contrôle de version (git), donc auditable et réversible.
② Comment Set-OPS le fait
- Ansible = le moteur déclaratif (des rôles décrivant l'état voulu, idempotents).
- Le plan (
serveurs.yml,applications.yml,bases-donnees.yml) décrit quoi déployer. make instanciergénère l'inventaire statique depuis le plan.make deployerapplique les rôles ; leVérifier(dry-run) prévisualise d'abord.- Tout vit dans git (ce dépôt) — reproductible, revu, réversible.
L'idempotence ne se décrète pas : elle se mesure
Cette page a longtemps affirmé que redéployer un rôle donnait changed=0. C'était vrai rôle
par rôle — et faux à l'échelle de la flotte, ce que personne n'avait vérifié. Le 2026-08-09,
après une reconstruction complète, on a compté :
924 taches « changed » rejeu depuis zero (tout est neuf : normal)
17 taches « changed » second passage (la flotte devrait etre convergente)
0 taches « changed » apres correction
Les 17 n'étaient pas du bruit. Elles cachaient deux pannes qui ne se signalaient d'aucune autre façon :
| Ce qu'on voyait | Ce que c'était |
|---|---|
| 13× « démarrer node_exporter » | le service était mort — tué par SIGHUP à chaque renouvellement de certificat, donc toutes les 24 h, sur les quatorze hôtes |
| 2× « déployer app.ini » | le dépôt faisait tourner le secret JWT de la forge à chaque déploiement, invalidant ses jetons |
La leçon dépasse Ansible : un compteur de changements est un instrument de diagnostic. Tant
qu'il indiquait 17, aucun de ces deux défauts n'était visible — ils se noyaient dans un fond
qu'on avait pris l'habitude d'ignorer. Ramené à zéro, le moindre changed sur une flotte non
modifiée devient un signal.
Vérifier le zéro, aussi. Un zéro peut vouloir dire « rien à faire » ou « plus rien ne travaille ». On a compté les tâches exécutées : 2266 au passage à vide contre 2152 au rejeu. Plus de tâches, aucune modification — donc convergence, pas silence.
③ Pourquoi c'est transférable
| Set-OPS | Équivalents ailleurs |
|---|---|
| Ansible | Terraform · Puppet · Chef · SaltStack · OpenTofu |
| plan → dry-run → apply | terraform plan/apply, tout workflow IaC |
| idempotence | propriété fondamentale de toute IaC sérieuse |
Tu as appris le déclaratif, l'idempotence, plan→apply, l'infra versionnée — pas « Ansible ».
④ À toi de jouer
- Sens l'idempotence. Redéploie un rôle déjà en place (ex. via la GUI ou
make deployer HOTE=…) : la 2ᵉ fois,changed=0. Rien à faire = rien n'est touché. - Le flux déclaratif. Édite le plan (un serveur dans la GUI),
⚙ Appliquer le plan(instancier), puisVérifier(dry-run) : tu prévisualises avant d'appliquer. - La réversibilité.
git diff/git checkoutsur le plan : l'état est du code, donc annulable. - Casse & répare. Modifie à la main un fichier géré par un rôle (ex. un
.conf), puis redéploie : Ansible rétablit l'état voulu (le code gagne sur la dérive manuelle). Tu sens que la source de vérité, c'est le code.
Pour aller plus loin (dépôt)
- Le flux :
make instancier→make instancier-appliquer→make deployer(ou la GUI). - Le plan :
instance/plan/; les rôles :roles/; l'autorité :AGENTS.md. - Relations déclaratives entre entités : unité Liaisons (bindings).