voutes : une cle absente n est pas une faute — elle est souvent la bonne reponse

Sur le runner d un tenant, la cle du SITE DOIT manquer : il porte la carte de la
fabric et ne doit jamais pouvoir l ouvrir. Ma premiere version sortait en erreur
des qu une cle manquait — elle presentait une SEPARATION REUSSIE comme un defaut,
et a fait echouer une chaine parfaitement saine.

Seule l absence de la cle de l INSTANCE MONTEE empeche la machine de travailler.
C est elle, et elle seule, qui decide du code de sortie ; le reste s affiche.

Constate sur ops-01 le jour de son armement :

    instance    OPS-Chezlepro     cle presente
    hebergeur   SITE-Chezlepro    sans cle

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019f91zs9SDdwSzL2CVei6on
This commit is contained in:
Daniel Allaire 2026-08-28 18:41:21 -04:00
parent 732aff9c70
commit 5c59f19530

View file

@ -112,19 +112,33 @@ def identites() -> str:
def etat() -> int:
"""Rapport lisible. Le CODE DE SORTIE ne juge que ce que CETTE machine doit pouvoir.
UNE CLE ABSENTE N'EST PAS UNE FAUTE — c'est souvent la bonne reponse (2026-08-28).
Sur le runner d'un tenant, la cle du SITE doit manquer : il porte la carte de la
fabric et ne doit jamais pouvoir l'ouvrir. Ma premiere version sortait en erreur des
qu'une cle manquait, ce qui faisait echouer une chaine parfaitement saine et
presentait une SEPARATION REUSSIE comme un defaut.
Seule l'absence de la cle de l'INSTANCE MONTEE empeche la machine de travailler :
c'est elle, et elle seule, qui decide du code de sortie. Le reste s'affiche.
"""
v = voutes()
if not v:
print("Aucune voute a nommer : ni instance montee, ni underlay.")
return 0
manquantes = 0
bloquant = False
for role, nom, chemin in v:
present = chemin.is_file()
manquantes += 0 if present else 1
print(f"{role:<11} {nom:<20} {'cle presente' if present else 'CLE ABSENTE '} {chemin}")
if manquantes:
print(f"\n{manquantes} cle(s) absente(s). En creer une :",
"umask 077; openssl rand -base64 48 | tr -d '\\n' > <chemin>", sep="\n ")
return 1 if manquantes else 0
if role == "instance" and not present:
bloquant = True
etiquette = "cle presente" if present else (
"CLE ABSENTE " if role == "instance" else "sans cle ")
print(f"{role:<11} {nom:<20} {etiquette} {chemin}")
if bloquant:
print("\nLa cle de l'instance montee manque — cette machine ne peut rien "
"configurer.\n umask 077; openssl rand -base64 48 | tr -d '\\n' > <chemin>")
return 1 if bloquant else 0
def main(argv: list[str] | None = None) -> int: