Set-OPS-Public/scripts
Mathieu Benoit 1d07a6cf80 runbooks : la recette tranche, le registre ne se compare plus a lui-meme
Un outil tiers veut n'offrir de ce moteur que ce qui n'agit pas. Le seul champ
qui le lui dise est `nature`. Il fallait donc qu'il ne mente pas, et il mentait
dans les deux sens.

`filiation` → `emancipation-prouver` se declarait « mesure » en portant
`fixes: {CONFIRMER: "true"}`. La cible tranche elle-meme — son refus dit
« cette preuve COUPE l'amont quelques secondes pour mesurer ». Un constat
rapporte ne rend pas inerte le geste qui l'obtient : l'etape passe a
`ecriture`.

Dans l'autre sens, trois cibles — flotte-creer, deployer-tout, reconstruire —
refusent sans confirmation sans que le registre le declare : un assistant les
lancait telles quelles, et sortait en 2. Comparer `nature` a `fixes` ne les
voyait pas, car c'est comparer deux champs ecrits par la meme main. `verifier`
lit desormais la RECETTE, qui ne ment pas.

Effet de bord traite : une etape qui agit barre celles qui la suivent dans la
console, alors qu'une « mesure » se debloque d'office. `depots-perimes` est
marque `facultative` — il nettoie ce que la filiation a laisse, il n'en est pas
le prealable.

`lister --json` rend le registre assemble d'un bloc, et le drapeau est refuse
hors de son action : rendre la prose humaine a qui demande du JSON est pire
qu'un refus. L'affichage humain ne bouge pas, et la preuve mesure ce qu'il
PORTE — un identifiant, un libelle, les marques de nature — et non seulement
qu'il n'est pas du JSON.

Valide : `verifier` a 0 ecart, test_runbooks.py 25/25, et sept des neuf
epreuves de `make test` ; test_raser et test_raser_resultat echouent sur
« Aucune instance montee », avant comme apres. Mesure : 127 etapes, dont 84 de
nature « mesure » — la surface qui n'agit pas.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RbXr5vv4Rat6PCPGG9GoG8
2026-09-25 17:54:03 -04:00
..
tests runbooks : la recette tranche, le registre ne se compare plus a lui-meme 2026-09-25 17:54:03 -04:00
applications.py plan : l ecriture des registres devient atomique — tout, ou rien 2026-09-08 14:57:57 -04:00
appliquer_opnsense.py frontiere : publier un service du site, port public et redirection 2026-09-16 22:38:39 -04:00
appliquer_proxmox_fw.py flux : l interne refuse a voix haute, la bordure se tait (P53) 2026-08-28 16:43:22 -04:00
appliquer_sdn.py frontiere : lire ses reglages a la racine du depot de site 2026-08-23 00:47:32 -04:00
attendre_materialisation.py creer-vm : prouver la materialisation sans entrer chez le tenant 2026-08-27 22:48:49 -04:00
bases_donnees.py plan : l ecriture des registres devient atomique — tout, ou rien 2026-09-08 14:57:57 -04:00
cacher_paquets.py paquets tiers : passer par le cache du controleur, plus par Internet 2026-09-05 08:22:14 -04:00
config_proxmox.py plan : l ecriture des registres devient atomique — tout, ou rien 2026-09-08 14:57:57 -04:00
couverture_gui.py GUI : le formulaire des bases est GENERE depuis le schema 2026-09-08 15:30:08 -04:00
devis_certificats.py resolution d'instance : une seule, partagee — au lieu de neuf copies 2026-08-22 14:19:55 -04:00
devis_courriel.py resolution d'instance : une seule, partagee — au lieu de neuf copies 2026-08-22 14:19:55 -04:00
devis_expositions.py resolution d'instance : une seule, partagee — au lieu de neuf copies 2026-08-22 14:19:55 -04:00
devis_frontiere.py resolution d'instance : une seule, partagee — au lieu de neuf copies 2026-08-22 14:19:55 -04:00
devis_identite.py resolution d'instance : une seule, partagee — au lieu de neuf copies 2026-08-22 14:19:55 -04:00
devis_mtu.py resolution d'instance : une seule, partagee — au lieu de neuf copies 2026-08-22 14:19:55 -04:00
devis_opnsense.py acces d'administration : un tunnel par locataire, declare par lui, borne a lui 2026-09-17 16:01:54 -04:00
devis_placement.py resolution d'instance : une seule, partagee — au lieu de neuf copies 2026-08-22 14:19:55 -04:00
devis_postgresql.py resolution d'instance : une seule, partagee — au lieu de neuf copies 2026-08-22 14:19:55 -04:00
devis_proxmox_fw.py flux : l interne refuse a voix haute, la bordure se tait (P53) 2026-08-28 16:43:22 -04:00
devis_proxmox_pools.py pools : le genome ne nait plus chez un locataire 2026-09-13 04:12:27 -04:00
devis_reseau.py devis reseau : un segment non etiquete n'appartient a aucune fabric de switch 2026-08-25 09:51:57 -04:00
devis_sdn.py sdn : le puits avalait le plan d administration — une route, et le chemin existe 2026-08-28 17:46:40 -04:00
devis_underlay.py underlay : la frontiere entre les deux mondes, et l'instrument qui la mesure 2026-08-22 16:31:35 -04:00
devis_versions.py devis : make versions-mesurer — l'ecart avec l'amont devient lisible 2026-08-10 23:02:16 -04:00
dns_bascule.py zones publiques : le courriel dans la zone, et un devis avant de basculer 2026-09-16 21:54:49 -04:00
dnssec.py DNSSEC : le locataire signe, avec la cle de sa voute 2026-09-16 22:09:21 -04:00
domaines.py resolution d'instance : une seule, partagee — au lieu de neuf copies 2026-08-22 14:19:55 -04:00
exporter_cles.py pools nommes comme les depots, et les cles sortent du poste 2026-09-12 21:37:28 -04:00
expositions_etat.py expositions-etat : le certificat SERVI, pas celui du disque 2026-09-11 10:21:19 -04:00
fiche_role.py fiche : les panneaux etaient caches derriere l exportateur 2026-09-14 16:34:51 -04:00
forge_amorcer.py trois reconstructions : trouver, verifier, prouver — 37 min 24 au tour 3 2026-09-12 20:55:59 -04:00
gabarit_etat.py D-86 mis a l epreuve : Chezlepro rasee et refaite depuis zero 2026-09-10 13:06:45 -04:00
genome.py plan : l ecriture des registres devient atomique — tout, ou rien 2026-09-08 14:57:57 -04:00
genome_colis.py genome : la forge du SITE fait autorite (D-81), et make genome-etat le verifie 2026-08-26 09:17:24 -04:00
instance_creer.py Créer une instance depuis un modèle (CLI + GUI) 2026-07-23 14:13:36 -04:00
instances.py un site prend son propre index, et la garde les compte enfin 2026-09-12 14:31:51 -04:00
instancier.py console chez les locataires, collision de noms, et un fichier ecrase 2026-09-15 11:47:50 -04:00
inventory_gui.py adressage : le site est une flotte, et P20 le regarde enfin 2026-09-20 22:46:43 -04:00
inventory_host.py clonage : le plancher se perdait au troisieme maillon 2026-09-13 20:10:24 -04:00
inventory_rules.py acces d'administration : un tunnel par locataire, declare par lui, borne a lui 2026-09-17 16:01:54 -04:00
ma_forge.py le wiki suit le genome : un locataire n en est pas depositaire 2026-09-14 14:41:23 -04:00
materiel.py materiel : un catalogue de capteurs, un tableau Grafana, un verdict Icinga 2026-09-17 10:13:43 -04:00
model_creer.py gabarit : modeleChezlepro -> modeleSetOPS, et une porte pour l'hebergeur 2026-08-12 14:36:44 -04:00
modeles.py modèles : l'underlay devient modélisable, et P17 le valide 2026-08-02 17:11:18 -04:00
orchestrer.py DNS public en production : cinq fautes que seule la production montrait 2026-09-16 18:35:36 -04:00
plan_recette.py documentation : la tournee des 74 documents, parce qu un balayage ne lit pas 2026-09-06 16:18:23 -04:00
prouver.py adressage : le site est une flotte, et P20 le regarde enfin 2026-09-20 22:46:43 -04:00
proxmox_api.py voutes : le monde physique a la sienne, les tenants n'en portent plus les cles 2026-08-22 17:13:48 -04:00
raser.py resolution d'instance : une seule, partagee — au lieu de neuf copies 2026-08-22 14:19:55 -04:00
remise.py remise au client : deux temps, un outil, une garde 2026-09-16 11:16:27 -04:00
resoudre_flux.py acces d'administration : un tunnel par locataire, declare par lui, borne a lui 2026-09-17 16:01:54 -04:00
restaurer_cles.py restauration : lire aussi l archive en clair, pas seulement la chiffree 2026-09-13 16:32:07 -04:00
routes_fabric_etat.py le site surveille enfin sa fabric 2026-09-10 18:50:43 -04:00
runbooks.py runbooks : la recette tranche, le registre ne se compare plus a lui-meme 2026-09-25 17:54:03 -04:00
schema_plan.py acces d'administration : un tunnel par locataire, declare par lui, borne a lui 2026-09-17 16:01:54 -04:00
serveurs.py plan : l ecriture des registres devient atomique — tout, ou rien 2026-09-08 14:57:57 -04:00
site_intrants.py acces d'administration : un tunnel WireGuard nominatif, pas le runner en rebond 2026-09-17 14:42:48 -04:00
site_inventaire.py materiel : la frontiere expose ses temperatures, seul le Prometheus du site les lit 2026-09-17 10:20:46 -04:00
site_machines.py memoire : ce que l hote a le droit de reprendre, et pourquoi il ne le pouvait pas 2026-09-13 19:57:11 -04:00
site_raser.py le site prend l index 37, et la capacite de le raser existe enfin 2026-09-12 16:32:06 -04:00
socle_amorcage.py resolution d'instance : une seule, partagee — au lieu de neuf copies 2026-08-22 14:19:55 -04:00
sonde_tcp.py frontiere : etanche — CONFORME sur 56 lignes, dans les deux sens 2026-08-09 21:33:04 -04:00
sonder.py sonder : rapporter ce qui distingue, au lieu d un echec 2026-08-28 17:02:20 -04:00
underlay.py adressage : le site est une flotte, et P20 le regarde enfin 2026-09-20 22:46:43 -04:00
verifier_cle_amorcage.py insemination : le runner verifie SA cle avant de partir 2026-09-13 22:04:41 -04:00
verifier_genome_a_jour.py deployer-tout : le genome est-il a jour avant de poser quoi que ce soit 2026-09-13 23:32:16 -04:00
verifier_gui.py GUI : les six registres ont un formulaire genere, et la sauvegarde aussi 2026-09-08 18:26:33 -04:00
verifier_intrants.py resolution d'instance : une seule, partagee — au lieu de neuf copies 2026-08-22 14:19:55 -04:00
verifier_ports.py resolution d'instance : une seule, partagee — au lieu de neuf copies 2026-08-22 14:19:55 -04:00
verifier_signature.py forgejo : epingle 16.0.2, et le verificateur accepte la cle PRIMAIRE 2026-08-11 01:04:16 -04:00
voute.py DNSSEC : le locataire signe, avec la cle de sa voute 2026-09-16 22:09:21 -04:00
voutes.py voutes : une cle absente n est pas une faute — elle est souvent la bonne reponse 2026-08-28 18:41:21 -04:00
vpn_admin.py tunnel d'administration : TechnoLibre servi, et l'oeuf et la poule du premier pair 2026-09-17 16:08:39 -04:00