La ligne de partage est celle des voutes. serveur_ops calcule et configure -- voute du tenant, SSH chez lui. serveur_ops_site materialise -- voute du SITE, API de l'hyperviseur, jamais de SSH chez un tenant. Un runner par tenant qui materialiserait mettrait la voute du SITE en N exemplaires. Un runner unique qui ferait tout traverserait le default-deny inter-tenant et rendrait l'emancipation impossible. Le role depose la voute CHIFFREE et relit l'en-tete apres avoir ecrit : sans `decrypt: false`, Ansible dechiffre la source quand il detient le mot de passe -- constate le jour meme, 776 octets en clair au lieu de 3465. Controle negatif fait, la garde mord. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
137 lines
6.4 KiB
YAML
137 lines
6.4 KiB
YAML
---
|
|
groupes:
|
|
client_pki:
|
|
requiert_groupes_actifs:
|
|
- serveur_step_ca
|
|
raison: "La confiance CA et ACME client dependent de l'autorite interne."
|
|
surveillance: "Verifier validite CA, emission ACME et expiration des certificats."
|
|
|
|
client_metrique:
|
|
requiert_groupes_actifs:
|
|
- serveur_prometheus
|
|
raison: "Les exporters clients doivent etre collectes par Prometheus."
|
|
surveillance: "Verifier targets Prometheus, scrape duration et erreurs de collecte."
|
|
|
|
client_journal:
|
|
requiert_groupes_actifs:
|
|
- serveur_loki
|
|
raison: "L'expedition des journaux depend du collecteur central Loki."
|
|
surveillance: "Verifier ingestion Loki, retard et volume de journaux."
|
|
|
|
client_smtp:
|
|
requiert_groupes_actifs:
|
|
- serveur_postfix
|
|
raison: "Les notifications locales doivent relayer vers un MTA actif (Postfix)."
|
|
surveillance: "Verifier file d'attente, relais SMTP et echecs de livraison."
|
|
|
|
serveur_postfix:
|
|
requiert_groupes_actifs:
|
|
- serveur_dovecot
|
|
raison: "Postfix remet le courrier local via LMTP a Dovecot (mailstore) ; la remise exige Dovecot actif."
|
|
surveillance: "Verifier file d'attente, remise LMTP (status=sent) et rejets."
|
|
|
|
serveur_keycloak:
|
|
requiert_groupes_actifs:
|
|
- serveur_postgresql
|
|
- serveur_openldap
|
|
raison: "Keycloak persiste dans PostgreSQL et federe l'annuaire OpenLDAP (resoudre_annuaire_uri)."
|
|
surveillance: "Verifier connexion base, federation LDAP, etat realm et disponibilite OIDC."
|
|
|
|
serveur_dovecot:
|
|
requiert_groupes_actifs:
|
|
- serveur_openldap
|
|
raison: "Dovecot resout ses utilisateurs (userdb/passdb) sur l'annuaire OpenLDAP (resoudre_annuaire_*)."
|
|
surveillance: "Verifier bind LDAP, authentification IMAP et remise LMTP."
|
|
|
|
serveur_grafana:
|
|
requiert_groupes_actifs:
|
|
- serveur_prometheus
|
|
- serveur_loki
|
|
raison: "Grafana est utile comme interface aux metriques et journaux centraux."
|
|
surveillance: "Verifier datasources Prometheus/Loki et authentification."
|
|
|
|
serveur_icinga:
|
|
requiert_groupes_actifs:
|
|
- serveur_postgresql
|
|
raison: "La plateforme Icinga Web/BPM depend d'une base relationnelle."
|
|
surveillance: "Verifier moteur Icinga, base, interface web et notifications."
|
|
|
|
serveur_icingaweb2:
|
|
requiert_groupes_actifs:
|
|
- serveur_icinga
|
|
- serveur_postgresql
|
|
- serveur_openldap
|
|
raison: "Frontal web d'Icinga : lit IcingaDB (base), affiche le moteur Icinga et authentifie sur l'annuaire OpenLDAP (resoudre_annuaire)."
|
|
surveillance: "Verifier acces IcingaDB, connexion Icinga et authentification LDAP."
|
|
|
|
serveur_forgejo:
|
|
requiert_groupes_actifs:
|
|
- serveur_postgresql
|
|
- serveur_nginx
|
|
# UNE EXIGENCE PEUT ETRE CONDITIONNELLE (2026-08-22). Depuis que le role sait tenir sa
|
|
# base dans un fichier, exiger un serveur PostgreSQL est faux pour qui a choisi SQLite
|
|
# — et bloquait le deploiement d'un ecosysteme parfaitement coherent.
|
|
sauf_si:
|
|
serveur_postgresql: { variable: serveur_forgejo_bd, vaut: sqlite }
|
|
# UTILISE SI PRESENT : Forgejo envoie des notifications quand un MTA existe, et s'en
|
|
# passe sinon. Ce n'etait pas une EXIGENCE — le confondre avec une exigence obligeait
|
|
# une forge a deployer une pile courriel pour exister.
|
|
utilise_si_present:
|
|
- serveur_postfix
|
|
raison: "Forgejo depend d'une base (serveur ou fichier) et d'une publication HTTP(S) ; le courriel est un agrement."
|
|
surveillance: "Verifier HTTP(S), base, files Git et envoi courriel."
|
|
|
|
serveur_ops:
|
|
requiert_groupes_actifs:
|
|
- serveur_forgejo
|
|
# LE POSTE LIT LE GENOME SUR LA FORGE DE SON PROPRE ECOSYSTEME — c'est ce qui le rend
|
|
# autonome : il ne redemande rien a son parent. Sans forge, il n'a aucune source.
|
|
#
|
|
# Une forge EXTERNE reste possible (un ecosysteme peut lire le genome ailleurs) : il
|
|
# suffit de surcharger `serveur_ops_forge_url`. L'exigence tombe alors, comme pour
|
|
# toute exigence conditionnelle du registre.
|
|
sauf_si:
|
|
serveur_forgejo: { variable: serveur_ops_forge_externe, vaut: true }
|
|
# UTILISE SI PRESENT : sans confiance PKI, `git clone` refuse le certificat de la
|
|
# forge — et il a raison de refuser. Ce n'est pas une exigence du groupe : une forge
|
|
# a certificat public se cloner sans client_pki.
|
|
utilise_si_present:
|
|
- serveur_step_ca
|
|
raison: "Le poste d'exploitation clone le genome depuis la forge de l'ecosysteme ; sans elle, il n'a pas de source."
|
|
surveillance: "Verifier que les depots clones suivent leur amont et qu'ansible repond dans le venv."
|
|
|
|
client_artefacts:
|
|
requiert_groupes_actifs:
|
|
- serveur_artefacts
|
|
# L'INTEGRATION SUIT L'EXISTENCE DU SERVICE. Un ecosysteme sans source d'artefacts
|
|
# prend ses paquets a l'amont : c'est un choix valide, pas une panne. Le role se
|
|
# desactive alors seul (`client_artefacts_actif` derive de l'inventaire) et RETIRE la
|
|
# direction posee auparavant -- sans quoi les hotes resteraient braques sur une
|
|
# machine disparue.
|
|
sauf_si:
|
|
serveur_artefacts: { variable: client_artefacts_actif, vaut: false }
|
|
raison: "Un hote ne peut prendre ses paquets chez lui que si l'ecosysteme heberge une source."
|
|
surveillance: "Verifier que le cache repond sur 3142 et que les hotes le designent bien."
|
|
|
|
serveur_artefacts:
|
|
requiert_groupes_actifs: []
|
|
raison: "Un cache apt ne depend d'aucun service de l'ecosysteme : il ne fait que relayer et retenir."
|
|
surveillance: "Verifier l'ecoute sur 3142, le taux de service depuis le journal, et l'espace du cache."
|
|
|
|
serveur_ops_site:
|
|
requiert_groupes_actifs:
|
|
- serveur_ops
|
|
# LE RUNNER DE SITE EST ADDITIF : il suppose le poste d'exploitation en place, dont il
|
|
# reutilise la racine, l'utilisateur et les depots clones. Seul, il n'aurait ni carte
|
|
# de la fabric ni moteur pour agir.
|
|
raison: "Le runner de site n'ajoute qu'un pouvoir a un poste d'exploitation existant : sans lui, rien a quoi l'attacher."
|
|
surveillance: "Verifier que la voute du site est presente ET CHIFFREE, et que la carte de la fabric est lisible."
|
|
|
|
serveur_nextcloud:
|
|
requiert_groupes_actifs:
|
|
- serveur_postgresql
|
|
- serveur_keycloak
|
|
- serveur_collabora
|
|
raison: "Nextcloud persiste dans PostgreSQL (verify-full), federe l'identite par OIDC (Keycloak) et valide WOPI contre Collabora (edition en ligne)."
|
|
surveillance: "Verifier base, decouverte OIDC, autodetection WOPI et acces web."
|
|
|