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>
43 lines
1.9 KiB
Python
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())
|