L edge expose les interfaces web aux personnes ; les VM du site vont directement au service. Declare par domaine (service | edge, defaut edge) ; plancher, zone et certificat du service suivent. Pose au site : 35 planchers sur 35 conformes ; locataires inchanges. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
55 lines
2.7 KiB
Python
55 lines
2.7 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
|
|
vues = {e["fqdn"]: e["resout_vers"] for e in expositions_des_applications(APPS, DOMS)}
|
|
if vues != {"forge.ex.internal": "edge", "sauvegarde.ex.internal": "service",
|
|
"pki.ex.internal": "service"}:
|
|
print(f"ECHEC resolution par defaut : attendu l'edge pour ce qu'il sert, obtenu {vues}")
|
|
return 1
|
|
service = {"domaines_publics": {"ex.internal": {"edge": "serveur_nginx",
|
|
"resolution_interne": "service"}}}
|
|
vues = {e["fqdn"]: e["resout_vers"] for e in expositions_des_applications(APPS, service)}
|
|
if set(vues.values()) != {"service"}:
|
|
print(f"ECHEC `resolution_interne: service` : tout nom doit mener au service ({vues})")
|
|
return 1
|
|
print("OK — avec port : l'edge du domaine ; sans port : le service lui-meme ; "
|
|
"`resolution_interne: service` : chaque nom mene a son service.")
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(main())
|