#!/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())