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:
|
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:
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue