Set-OPS-Public/roles/serveur_postgresql/defaults/main.yml
Daniel Allaire f04e790d2c icinga : l'AC et l'historique survivent a la reconstruction ; temoins par cle
L'historique d'Icinga DB etait exclu de la restauration (2026-09-30) : son
environnement derive de l'AC d'Icinga, recreee a chaque reconstruction. L'AC est
desormais un jeu de sauvegarde, remis avant api setup ; la base d'Icinga est
restauree, et son schema n'est importe que sur une base vierge.

Les temoins comparaient PostgreSQL par nombre de lignes et n'ont pas vu 412
lignes d'historique remplacees par 380 neuves. Ils comparent desormais par cle.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 15:18:40 -04:00

98 lines
4.9 KiB
YAML

---
serveur_postgresql_packages:
- postgresql
- postgresql-contrib
- python3-psycopg2 # requis par community.postgresql sur la cible
serveur_postgresql_service_name: "postgresql"
# Version majeure du cluster. Vide => detection automatique du cluster installe
# par Debian (repertoire sous /etc/postgresql/<version>/main).
serveur_postgresql_version: ""
# Reseau et acces.
serveur_postgresql_port: 5432
serveur_postgresql_ecoute:
- "127.0.0.1"
- "{{ ansible_host | default(ansible_default_ipv4.address, true) }}"
serveur_postgresql_reseaux_autorises:
- "10.0.0.0/16"
serveur_postgresql_methode_auth: "scram-sha-256"
# Reglages additionnels (vide => valeurs par defaut de Debian).
# Exemple : { shared_buffers: "256MB", work_mem: "16MB" }
serveur_postgresql_parametres: {}
# Nom du groupe serveur (pour filtrer le registre des bases applicatives).
# Le registre lui-meme (bases_donnees) est charge depuis instance/plan/bases-donnees.yml.
serveur_postgresql_groupe: "serveur_postgresql"
# Provisioning applicatif explicite. Vide par defaut : aucune base ni compte cree.
# Les mots de passe doivent venir d'Ansible Vault, jamais en clair.
serveur_postgresql_comptes: []
# - nom: keycloak
# mot_de_passe: "{{ vault_postgresql_keycloak }}"
# attributs: "LOGIN"
serveur_postgresql_bases: []
# - nom: keycloak
# proprietaire: keycloak
# --- TLS via le certificat d'hote step_ca (client_pki requis sur le noeud) ---
# Cote serveur : PostgreSQL sert le cert step_ca (verifiable contre root_ca), au lieu
# du snakeoil auto-signe. Non-bloquant : le TLS reste optionnel tant que pg_hba ne le force pas.
serveur_postgresql_tls_actif: false
serveur_postgresql_tls_source_cert: "/etc/step/certs/{{ ansible_fqdn | default(ansible_hostname) }}.crt"
serveur_postgresql_tls_source_cle: "/etc/step/certs/{{ ansible_fqdn | default(ansible_hostname) }}.key"
serveur_postgresql_tls_source_ca: "/etc/step/certs/root_ca.crt"
serveur_postgresql_tls_dir: "/var/lib/postgresql/tls"
# Verrou zero-confiance : hostssl dans pg_hba => refuse toute connexion NON-TLS.
# N'activer qu'apres avoir confirme que TOUS les clients sont en TLS (sinon coupure).
serveur_postgresql_tls_force: false
# --- Sonde de supervision -----------------------------------------------------------
serveur_postgresql_sonde_pct_avert: 70
serveur_postgresql_sonde_pct_crit: 90
# --- L'EXPORTATEUR DE METRIQUES -------------------------------------------------------
#
# Le pendant de la sonde : elle dit « est-ce casse ? », il dit « depuis quand, et vers
# ou ? ». Voir `meta/metriques.yml`, qui declare ce que le moteur en derive.
#
# UN COMPTE DEDIE, EN LECTURE SEULE, ET RIEN D'AUTRE. `pg_monitor` est un role fourni par
# PostgreSQL depuis la version 10 : il donne acces aux vues de statistiques et A ELLES
# SEULES — aucune donnee applicative. Faire tourner un exportateur en `postgres` serait
# donner les cles de la base pour lire des compteurs.
#
# LE MOT DE PASSE VIENT DE LA VOUTE, comme tous les autres. Vide, l'exportateur n'est pas
# pose du tout — degrader, jamais deviner, et surtout jamais un mot de passe par defaut.
serveur_postgresql_exportateur_actif: "{{ (vault_pg_exportateur | default('')) | length > 0 }}"
serveur_postgresql_exportateur_paquet: prometheus-postgres-exporter
serveur_postgresql_exportateur_service: prometheus-postgres-exporter
serveur_postgresql_exportateur_port: 9187
serveur_postgresql_exportateur_utilisateur: setops_metriques
serveur_postgresql_exportateur_mot_de_passe: "{{ vault_pg_exportateur | default('') }}"
# --- RESTAURATION (2026-09-30) — voir tasks/main.yml ---------------------------------
#
# Les bases que CE role ne rejoue pas, designees par leur `consommateur` au registre :
# - nextcloud : il se remet LUI-MEME, en fin de son role. Sa base, ses fichiers et sa
# configuration vont ensemble, et le code de ses applications (user_oidc,
# richdocuments) n'est pas sauvegarde : restauree avant son installation, la base
# les dirait installees sans qu'elles le soient, et `occ app:install` refuserait ;
#
# PLUS `icinga` (2026-10-07). On l'excluait : l'historique de supervision etait lie a
# l'environnement d'Icinga, que l'AC d'Icinga, recreee a chaque reconstruction, renouvelait
# — restauree, la base serait restee orpheline. L'AC est desormais sauvegardee et remise
# (jeu `icinga` de client_backup) : l'environnement survit, et l'historique avec lui.
serveur_postgresql_restauration_consommateurs_exclus:
- nextcloud
serveur_postgresql_bases_restaurables: >-
{{ ((serveur_postgresql_registre | default([]))
| rejectattr('value.consommateur', 'defined') | map(attribute='value.base') | list)
+ ((serveur_postgresql_registre | default([]))
| selectattr('value.consommateur', 'defined')
| rejectattr('value.consommateur', 'in', serveur_postgresql_restauration_consommateurs_exclus)
| map(attribute='value.base') | list)
+ (serveur_postgresql_bases | map(attribute='nom') | list) }}