From 5a6d0f28f68f152f8f4ecb606692b1952ccb488d Mon Sep 17 00:00:00 2001 From: Daniel Allaire Date: Wed, 30 Sep 2026 15:24:28 -0400 Subject: [PATCH] reconstruire-locataire : eprouve d'armer a bilan ; le suivi ne duplique plus le journal Co-Authored-By: Claude Opus 5.5 --- CHANGELOG.md | 20 ++++++++++++++++++++ scripts/reconstruire_locataire.py | 7 ++++--- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ee8e829..8a9ae84 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,25 @@ # CHANGELOG — Set-OPS +## 2026-09-30 (52) — `make reconstruire-locataire` : une commande, du site à la recette + +Les reconstructions du jour passaient par cinq endroits — poste, runner du site, poste, +runner du locataire, poste — avec des commandes SSH tapées à la main. La séquence vit +désormais dans `scripts/reconstruire_locataire.py`, lancé depuis le POSTE (seul à tenir à la +fois la voûte du locataire et l'accès au runner du site) : + +`sauvegarder` → `raser` → `creer` → `inseminer` (runner du site) → `armer` (poste ; pause, +sauf `ARMER=oui`) → `monter` (`make monter-flotte` sur le runner du locataire, suivi toutes +les 30 s) → `parefeu` (`--flotte`) → `bilan` (ce que chaque jeu d'état est devenu). + +Le nom de l'écosystème s'écrit en toutes lettres (`INSTANCE=`), comme pour `raser`, qui +n'a pas d'autre condition. Arrêt à la première étape en échec, avec la commande de reprise +(`DEPUIS=<étape>`) ; journal complet dans `/logs/`. + +**Éprouvé sur Technolibre de `armer` à `bilan`** (les étapes non destructives) : 26 min, +0 échec — armement, flotte montée et recettée, pare-feu 13/13 sans flux perdu, bilan. +Un défaut de forme corrigé : chaque relevé de suivi recopiait tout le journal distant ; seul +le nouveau y va désormais. Reste l'épreuve entière, destruction comprise. + ## 2026-09-30 (51) — Ce qui était fait à la main dans les reconstructions entre dans le code **Le bilan de l'exploitant** : aucune des deux reconstructions du jour n'est allée au bout diff --git a/scripts/reconstruire_locataire.py b/scripts/reconstruire_locataire.py index 91a2b93..f5a357e 100644 --- a/scripts/reconstruire_locataire.py +++ b/scripts/reconstruire_locataire.py @@ -83,11 +83,11 @@ def sur_site(args, commande: str, filtre: tuple[str, ...] = ()) -> int: "sudo -u setops bash -lc " + shlex.quote(distante)], filtre=filtre) -def sur_locataire(ip: str, commande: str, filtre: tuple[str, ...] = ()) -> tuple[int, str]: +def sur_locataire(ip: str, commande: str, journaliser: bool = True) -> tuple[int, str]: distante = "sudo -u setops bash -lc " + shlex.quote(commande) r = subprocess.run(SSH_NEUF + [f"ansible@{ip}", distante], capture_output=True, text=True, stdin=subprocess.DEVNULL) - if JOURNAL: + if JOURNAL and journaliser: with JOURNAL.open("a", encoding="utf-8") as f: f.write(r.stdout + r.stderr) return r.returncode, r.stdout @@ -194,7 +194,8 @@ def main() -> int: time.sleep(30) _, sortie = sur_locataire(runner_ip, f"pgrep -u setops -x make >/dev/null && echo EN_COURS; " f"grep -E '^=== |^make.*Error|failed=[1-9]' " - f"{args.racine_runner}/monter-flotte.log") + f"{args.racine_runner}/monter-flotte.log", + journaliser=False) # le releve se repete : seul le NOUVEAU va au journal for ligne in sortie.splitlines(): if ligne.startswith("===") or "Error" in ligne or "failed=" in ligne: if ligne not in vu: