Set-OPS-Public/scripts/tests/test_pool_ips_publiques.py
Daniel Allaire e84b155a5f pool d adresses publiques : le site attribue a chaque locataire la sienne
Declare dans opnsense.yml du site, rendu par le contrat (ip_publique), valide (une par
locataire, jamais celle du site), compare aux alias du WAN par frontiere-plan.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-29 15:24:09 -04:00

49 lines
1.9 KiB
Python

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