#!/usr/bin/env python3 """Le deploiement du site refuse une machine sans regles nftables generees. POURQUOI (2026-10-13). Sans `flux-genere/.nft`, `nftables_baseline` pose en silence son gabarit generique. Le premier site construit depuis zero n'avait jamais eu `make flux`. Sur un inventaire SYNTHETIQUE (aucun site requis) : - toutes les machines ont leur fichier : accepte ; - une machine sans fichier : refuse, et la nomme (temoin) ; - une machine qui n'arme pas son pare-feu n'est pas exigee. """ from __future__ import annotations import sys import tempfile from pathlib import Path sys.path.insert(0, str(Path(__file__).resolve().parents[1])) import verifier_flux_site as V # noqa: E402 def main() -> int: with tempfile.TemporaryDirectory() as d: a = Path(d) / "a.nft" a.write_text("table inet filter {}\n") inv = {"hotes_actifs": {"hosts": ["a", "b", "c"]}, "_meta": {"hostvars": { "a": {"nftables_baseline_enabled": True, "nftables_baseline_ruleset_genere": str(a)}, "b": {"nftables_baseline_enabled": True, "nftables_baseline_ruleset_genere": str(Path(d) / "b.nft")}, "c": {"nftables_baseline_enabled": False}}}} cas = [("une machine sans fichier", inv, ["b"]), ("toutes ont leur fichier", {**inv, "hotes_actifs": {"hosts": ["a", "c"]}}, [])] echecs = 0 for nom, i, attendu in cas: vu = [x.split(" :")[0] for x in V.manquants(i)] ok = vu == attendu echecs += not ok print(f"{'OK ' if ok else 'ECHEC '} {nom} : {vu or 'rien a signaler'}") return 1 if echecs else 0 if __name__ == "__main__": sys.exit(main())