From b7884217cef33ca3524a2612de5afbf678417930 Mon Sep 17 00:00:00 2001 From: Daniel Allaire Date: Mon, 14 Sep 2026 10:15:55 -0400 Subject: [PATCH] le rebond se decide par le NOM, pas par l adresse MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Troisieme formulation, et les deux premieres etaient fausses. Suis-je dans un RESEAU du site : le poste porte 10.37.0.17, donc il y est, et il aurait perdu son rebond alors qu il en a besoin. Etre dans un reseau ne dit rien de ce qu on atteint. Mon adresse est-elle dans underlay.hotes : hotes ne contient que les EQUIPEMENTS. Les machines du site vivent dans son PLAN, et le module le dit lui-meme. La comparaison portait sur une liste vide et rendait toujours False, sans rien signaler — une garde muette qui ne gardait rien. Le runner s appelle site-ops-01, et c est une cle du plan du site. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01Crgis8CxCWkAGFA1ecBz3q --- scripts/site_inventaire.py | 41 ++++++++++++++++++++------------------ 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/scripts/site_inventaire.py b/scripts/site_inventaire.py index 79c830a..6363fef 100755 --- a/scripts/site_inventaire.py +++ b/scripts/site_inventaire.py @@ -73,35 +73,38 @@ GROUPE_FLOTTE = "hotes_actifs" def _controleur_est_une_machine_du_site() -> bool: - """Le controleur EST-IL l'une des machines que l'underlay declare ? + """Le controleur EST-IL l'une des machines que le PLAN du site declare ? - C'EST LA BONNE QUESTION, ET LA PREMIERE VERSION POSAIT LA MAUVAISE. Elle demandait - « suis-je dans un reseau du site ? » — or le poste de l'exploitant porte `10.37.0.17`, - donc il est dans le reseau `management` du site, et il aurait perdu son rebond alors - qu'il en a besoin : ses paquets arrivent sur une autre patte de la frontiere, avec - d'autres regles. + C'EST LA TROISIEME FORMULATION, ET LES DEUX PREMIERES ETAIENT FAUSSES : - Etre DANS un reseau du site ne dit rien de ce qu'on peut atteindre. Etre une MACHINE - du site, si : la frontiere les laisse se parler entre elles. + 1. « suis-je dans un RESEAU du site ? » — le poste de l'exploitant porte + `10.37.0.17`, donc il est dans le reseau `management`, et il aurait perdu son + rebond alors qu'il en a besoin : ses paquets arrivent sur une autre patte de la + frontiere, avec d'autres regles. Etre DANS un reseau ne dit rien de ce qu'on + atteint. - En cas de doute — adresses illisibles, underlay muet — on rend False : poser le rebond - est le comportement d'avant, donc le seul qu'on sache sur. Degrader, jamais deviner. + 2. « mon adresse est-elle dans `underlay.hotes` ? » — `hotes` ne contient que les + EQUIPEMENTS (switches, hyperviseurs, frontiere). Les MACHINES du site vivent dans + son PLAN, et le module le dit lui-meme a `machines()`. La comparaison portait donc + toujours sur une liste vide, et rendait toujours False, sans rien signaler. + + LA BONNE QUESTION SE POSE PAR LE NOM. Le runner s'appelle `site-ops-01`, et c'est une + cle du plan du site. Aucune derivation d'adresse, aucune liste a tenir a jour. + + En cas de doute — nom illisible, plan muet — on rend False : poser le rebond est le + comportement d'avant, donc le seul qu'on sache sur. Degrader, jamais deviner. """ - import subprocess + import socket try: - sortie = subprocess.run(["ip", "-4", "-o", "addr", "show"], - capture_output=True, text=True, timeout=5).stdout + court = socket.gethostname().split(".")[0] except Exception: return False - locales = {m.split("/")[0] for ligne in sortie.splitlines() for m in ligne.split() - if "/" in m and m[0].isdigit()} - if not locales: - return False try: - declarees = {str(h.get("ip")) for h in underlay_mod.hotes(None) if h.get("ip")} + serveurs = (underlay_mod.lire_plan_site("serveurs.yml") or {}).get("serveurs") or {} except Exception: return False - return bool(locales & declarees) + return court in serveurs + def plan_dir() -> Path | None: