Une VM peut porter plusieurs applications ; c'est l'application, pas l'hote, a laquelle une base se lie via son DSN. - docs/applications.yml : nouveau registre application -> groupe, hote. - docs/bases-donnees.yml : champ 'portee' (application|groupe|hote, defaut groupe). Une application A (groupe G, hote H) recoit les bases ou (portee=application ET consommateur=A) OU (portee=groupe ET consommateur=G) OU (portee=hote ET consommateur=H). Plusieurs DSN par application. - inventory_rules.py : charger/valider_applications, applications_de_hote, bases_de_application, PORTEES_BD ; valider_bases croise portee=application avec le registre des applications. - CLI : scripts/applications.py + bases_donnees.py --portee ; cibles make applications / applications-verifier ; integre a inventaire-verifier. - GUI : vue Applications (CRUD), portee + consommateur dynamique dans Bases, vue Chaine par application (DSN resolus par hote). - filter_plugins/registres.py : meme regle de resolution exposee a Ansible (source unique). Playbooks web_dorsaux/web_frontaux iterent sur les applications de l'hote (scaffold ; deploiement applicatif s'y insere). Services en grappe (keycloak/icingadb/forgejo) restent en portee groupe. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
32 lines
947 B
Python
32 lines
947 B
Python
"""Filtres Ansible exposant les regles de resolution des registres Set-OPS.
|
|
|
|
Reutilise scripts/inventory_rules.py : la regle de liaison application <-> base
|
|
(et la derivation du DSN) vit une SEULE fois, en Python. Le CLI, le GUI (qui en
|
|
est le miroir) et Ansible passent tous par la meme logique.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
sys.path.insert(0, str(Path(__file__).resolve().parents[1] / "scripts"))
|
|
|
|
from inventory_rules import ( # noqa: E402
|
|
applications_de_hote,
|
|
bases_de_application,
|
|
bases_du_groupe,
|
|
chaine_connexion,
|
|
)
|
|
|
|
|
|
class FilterModule:
|
|
"""Filtres Set-OPS pour les playbooks par application."""
|
|
|
|
def filters(self) -> dict:
|
|
return {
|
|
"bases_de_application": bases_de_application,
|
|
"applications_de_hote": applications_de_hote,
|
|
"bases_du_groupe": bases_du_groupe,
|
|
"chaine_connexion": chaine_connexion,
|
|
}
|