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:
parent
63437b5726
commit
b7884217ce
1 changed files with 22 additions and 19 deletions
|
|
@ -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:
|
||||
|
|
|
|||
Loading…
Reference in a new issue