Set-OPS-Public/scripts/tests/test_expositions_sans_port.py
Daniel Allaire eee6851c3b sonde plancher ; une exposition sans port n est plus attribuee a l edge
La zone publie l empreinte de ce que le plancher doit porter ; chaque machine la compare
a son /etc/hosts. Au site, elle a revele que sauvegarde, pki et dns.genese.internal
pointaient vers l edge (regression de mon deploiement du matin) : la derivation ne donne
plus a l edge ce qui n a pas de port. Zone du site corrigee, SFTP des locataires verifie.

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

43 lines
1.9 KiB
Python

#!/usr/bin/env python3
"""Une exposition SANS PORT n'est jamais attribuee a l'edge du domaine.
POURQUOI (2026-09-29). Un edge ne publie que ce qui a un port : nginx n'ecrit un vhost que
pour une exposition qui en porte un. Le site expose aussi `sauvegarde` (SFTP), `pki` et
`dns` sans port web. Quand `genese.internal` a recu un edge, la derivation lui a attribue
ces trois noms ; la zone et le plancher les ont fait pointer vers `site-edge-01`, et les
sauvegardes des deux locataires y seraient allees frapper un sshd qui n'est pas le leur.
"""
from __future__ import annotations
import sys
from pathlib import Path
sys.path.insert(0, str(Path(__file__).resolve().parents[1]))
from inventory_rules import expositions_des_applications # noqa: E402
APPS = {"applications": {
"forge": {"groupe": "serveur_forgejo", "hote": "forge-01", "port": 443, "expose": ["forge.ex.internal"]},
"backup": {"groupe": "serveur_backup_site", "hote": "backup-01", "expose": ["sauvegarde.ex.internal"]},
"pki": {"groupe": "serveur_step_ca", "hote": "pki-01", "port": None, "expose": ["pki.ex.internal"]},
}}
DOMS = {"domaines_publics": {"ex.internal": {"edge": "serveur_nginx"}}}
def main() -> int:
edges = {e["fqdn"]: e["edge"] for e in expositions_des_applications(APPS, DOMS)}
attendu = {"forge.ex.internal": "serveur_nginx",
"sauvegarde.ex.internal": "serveur_backup_site",
"pki.ex.internal": "serveur_step_ca"}
if edges != attendu:
print(f"ECHEC attendu {attendu}, obtenu {edges}")
return 1
sans_edge = {e["fqdn"]: e["edge"] for e in expositions_des_applications(APPS, {"domaines_publics": {}})}
if sans_edge["forge.ex.internal"] != "serveur_forgejo":
print(f"ECHEC sans edge declare, le service doit se servir lui-meme : {sans_edge}")
return 1
print("OK — avec port : l'edge du domaine ; sans port : le service lui-meme.")
return 0
if __name__ == "__main__":
sys.exit(main())