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:
"""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: