Set-OPS-Public/scripts/tests/test_verifier_flux_site.py

43 lines
1.7 KiB
Python
Raw Normal View History

#!/usr/bin/env python3
"""Le deploiement du site refuse une machine sans regles nftables generees.
POURQUOI (2026-10-13). Sans `flux-genere/<machine>.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())