47 lines
1.7 KiB
Python
47 lines
1.7 KiB
Python
|
|
#!/usr/bin/env python3
|
||
|
|
"""Sans voir son site, un ecosysteme qui en depend ne regenere pas ses pare-feux.
|
||
|
|
|
||
|
|
POURQUOI (2026-09-30). Le runner d'un locataire ne porte ni `underlay.yml` ni le plan du
|
||
|
|
site : `make flux` y resolvait a rien les paires venues du site (`fabric`, `frontiere`,
|
||
|
|
`runner_site`, `dns_public_site`, `voisins_site`) et reecrivait des regles AMPUTEES — sans le
|
||
|
|
transfert de zone depuis le DNS public du site, sans la collecte de la fabric, sans
|
||
|
|
l'insemination. Le generateur doit s'abstenir : les fichiers committes font foi.
|
||
|
|
"""
|
||
|
|
from __future__ import annotations
|
||
|
|
|
||
|
|
import sys
|
||
|
|
from pathlib import Path
|
||
|
|
|
||
|
|
RACINE = Path(__file__).resolve().parents[2]
|
||
|
|
sys.path.insert(0, str(RACINE / "scripts"))
|
||
|
|
|
||
|
|
import resoudre_flux as rf # noqa: E402
|
||
|
|
import underlay # noqa: E402
|
||
|
|
|
||
|
|
|
||
|
|
def main() -> int:
|
||
|
|
try:
|
||
|
|
import yaml
|
||
|
|
data = yaml.safe_load(rf._inventaire().read_text(encoding="utf-8")) or {}
|
||
|
|
except Exception as e: # pas d'instance montee ici
|
||
|
|
print(f"SAUTE aucune instance lisible ({type(e).__name__})")
|
||
|
|
return 0
|
||
|
|
if not rf._depend_du_site(data):
|
||
|
|
print("SAUTE l'instance montee ne depend pas de son site : rien a garder")
|
||
|
|
return 0
|
||
|
|
vrai = underlay.chemin
|
||
|
|
underlay.chemin = lambda: None # un runner de locataire : le site est invisible
|
||
|
|
try:
|
||
|
|
ecrits = rf.generer_nftables(rf.charger_flux())
|
||
|
|
finally:
|
||
|
|
underlay.chemin = vrai
|
||
|
|
if ecrits:
|
||
|
|
print(f"ECHEC site invisible, et pourtant {len(ecrits)} pare-feu(x) regeneres (amputes)")
|
||
|
|
return 1
|
||
|
|
print("OK — site invisible : aucun pare-feu regenere, les regles committees font foi.")
|
||
|
|
return 0
|
||
|
|
|
||
|
|
|
||
|
|
if __name__ == "__main__":
|
||
|
|
sys.exit(main())
|