This repository has been archived on 2026-06-26. You can view files and clone it, but cannot push or open issues or pull requests.
Set-OPS/scripts/domaines.py
Daniel Allaire 27bb51d007 Refonte application-hub Phase 1 : liens explicites
L'application porte tous ses liens (groupe=capacite, hote=VM, port,
requiert, expose). L'exposition DNS quitte docs/domaines.yml et vit sur
l'application via 'expose' ; domaines.yml ne decrit plus que les zones.

- inventory_rules : expositions_des_applications + domaine_parent ;
  valider_applications valide requiert / expose / port.
- serveurs_nginx derive ses vhosts des applications (expose + edge),
  resolvant application -> hote -> IP (role + template reecrits).
- filter plugin : expose la nouvelle regle a Ansible.
- CLI : applications.py --port/--requiert/--expose ; domaines.py affiche
  les expositions derivees des applications.
- GUI : champs Port/Requiert/Expose sur la fiche Application (persistes ;
  corrige la perte de champs a la sauvegarde) ; l'API expose les domaines.

Le groupe n'est plus une cible de liaison, seulement une capacite.
Renommage nomenclature.domaines -> fonctions : Phase 1b. Generation de
l'inventaire depuis le plan : Phase 3.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 20:10:15 -04:00

58 lines
2.1 KiB
Python

#!/usr/bin/env python3
"""Lit et valide le registre des domaines publics Set-OPS (docs/domaines.yml)."""
from __future__ import annotations
import argparse
import sys
from pathlib import Path
from inventory_rules import (
charger_applications,
charger_domaines,
expositions_des_applications,
valider_domaines,
)
RACINE = Path(__file__).resolve().parents[1]
FICHIER = RACINE / "docs/domaines.yml"
FICHIER_APPLICATIONS = RACINE / "docs/applications.yml"
def lister(registre: dict, applications: dict) -> None:
domaines = registre.get("domaines_publics", {})
if not domaines:
print("Aucun domaine public declare.")
return
expos = expositions_des_applications(applications, registre)
for nom_domaine, conf in domaines.items():
secondaires = conf.get("secondaires") or []
dnssec = "oui" if conf.get("dnssec") else "non"
print(f"{nom_domaine} [autorite {conf.get('autorite', '?')}, edge {conf.get('edge', '-')}, dnssec {dnssec}]")
print(f" secondaires: {', '.join(secondaires) if secondaires else '(aucun)'}")
for e in [x for x in expos if x["domaine"] == nom_domaine]:
print(f" exposition: {e['fqdn']} -> application {e['application']} (sur {e['hote']})")
def main() -> int:
parser = argparse.ArgumentParser(description="Registre des domaines publics Set-OPS.")
sub = parser.add_subparsers(dest="commande", required=True)
sub.add_parser("lister", help="Affiche domaines, autorite et expositions (depuis les applications).")
sub.add_parser("verifier", help="Valide la coherence du registre.")
args = parser.parse_args()
try:
registre = charger_domaines(FICHIER)
if args.commande == "lister":
lister(registre, charger_applications(FICHIER_APPLICATIONS))
elif args.commande == "verifier":
valider_domaines(registre)
print("Registre des domaines valide.")
except Exception as exc:
print(f"erreur: {exc}", file=sys.stderr)
return 2
return 0
if __name__ == "__main__":
raise SystemExit(main())