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: