le rebond se decide par le NOM, pas par l adresse

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 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Crgis8CxCWkAGFA1ecBz3q
This commit is contained in:
Daniel Allaire 2026-09-14 10:15:55 -04:00
parent 63437b5726
commit b7884217ce

View file

@ -73,35 +73,38 @@ GROUPE_FLOTTE = "hotes_actifs"
def _controleur_est_une_machine_du_site() -> bool: 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 C'EST LA TROISIEME FORMULATION, ET LES DEUX PREMIERES ETAIENT FAUSSES :
« 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.
Etre DANS un reseau du site ne dit rien de ce qu'on peut atteindre. Etre une MACHINE 1. « suis-je dans un RESEAU du site ? » — le poste de l'exploitant porte
du site, si : la frontiere les laisse se parler entre elles. `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 2. « mon adresse est-elle dans `underlay.hotes` ? » — `hotes` ne contient que les
est le comportement d'avant, donc le seul qu'on sache sur. Degrader, jamais deviner. 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: try:
sortie = subprocess.run(["ip", "-4", "-o", "addr", "show"], court = socket.gethostname().split(".")[0]
capture_output=True, text=True, timeout=5).stdout
except Exception: except Exception:
return False 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: 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: except Exception:
return False return False
return bool(locales & declarees) return court in serveurs
def plan_dir() -> Path | None: def plan_dir() -> Path | None: