Set-OPS-Public/wiki/Infra-as-Code-et-idempotence.md
Daniel Allaire 85fed974a4 wiki : rattraper la reconstruction, et une unite sur la verification du deploye
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>
2026-08-09 15:11:43 -04:00

4.4 KiB
Raw Blame History

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 instancier génère l'inventaire statique depuis le plan.
  • make deployer applique les rôles ; le Vé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

  1. 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é.
  2. Le flux déclaratif. Édite le plan (un serveur dans la GUI), ⚙ Appliquer le plan (instancier), puis Vérifier (dry-run) : tu prévisualises avant d'appliquer.
  3. La réversibilité. git diff / git checkout sur le plan : l'état est du code, donc annulable.
  4. 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 instanciermake instancier-appliquermake 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).