#!/usr/bin/env python3 """Le pool d'adresses publiques du site : une par locataire, jamais celle du site. POURQUOI (2026-09-29). C'est le SITE qui attribue a chaque locataire son adresse publique, tiree d'un pool declare dans `opnsense.yml` ; le locataire la recoit par le contrat du site. Avant, une seule adresse (`ip_publique_site`) etait recopiee a la main chez les deux locataires. Une attribution fautive ne se verrait qu'au jour de l'exposition : deux locataires sur la meme adresse, ou un web frontal sur l'adresse de la frontiere. """ from __future__ import annotations import sys from pathlib import Path sys.path.insert(0, str(Path(__file__).resolve().parents[1])) from site_intrants import ip_publique_de, valider_pool # noqa: E402 WAN = "69.70.26.10" LOCATAIRES = ["OPS-A", "OPS-B"] def main() -> int: echecs = 0 sain = {"69.70.26.11": "OPS-A", "69.70.26.12": "OPS-B", "69.70.26.13": "libre"} if valider_pool(sain, WAN, LOCATAIRES): print(f"ECHEC pool sain refuse : {valider_pool(sain, WAN, LOCATAIRES)}") echecs += 1 if ip_publique_de("OPS-B", sain) != "69.70.26.12" or ip_publique_de("OPS-C", sain) != "": print("ECHEC ip_publique_de ne rend pas l'attribution du pool") echecs += 1 cas = { "deux adresses pour un locataire": {"69.70.26.11": "OPS-A", "69.70.26.12": "OPS-A"}, "adresse du site attribuee": {WAN: "OPS-A"}, "locataire inconnu du site": {"69.70.26.11": "OPS-Z"}, "adresse privee": {"10.0.0.5": "OPS-A"}, "adresse invalide": {"pas-une-ip": "OPS-A"}, } for nom, pool in cas.items(): if not valider_pool(pool, WAN, LOCATAIRES): print(f"ECHEC « {nom} » accepte") echecs += 1 if echecs: return 1 print(f"OK — pool sain accepte ; {len(cas)} fautes refusees ; attribution lue par locataire.") return 0 if __name__ == "__main__": sys.exit(main())