Set-OPS-Public/roles/serveur_postgresql/defaults/main.yml

99 lines
4.9 KiB
YAML
Raw Normal View History

---
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
sondes : les cinq qui manquaient le plus (autorite, base, annuaire, zones, edge) CORRECTION DE COMPTE D ABORD. J avais annonce cinq groupes sans sonde. La mesure en donne VINGT-SEPT : j avais compte ceux que j avais en tete, pas ceux que le depot contient. Il en reste vingt-deux. LES CINQ, PAR ORDRE DE DEGAT SILENCIEUX. autorite (step_ca) — la plus urgente : nos certificats vivent 24 h, une AC muette ne casse rien aujourd hui et casse TOUT demain, d un coup, sur les 21 machines. Elle surveille aussi l expiration de la RACINE, que personne ne regarde parce qu elle vit des annees (relevee a 3642 jours). base (postgresql) — une VRAIE requete, pas pg_isready : celui-ci dit que le port repond, pas que la base sert. Plus le compte des connexions : a saturation, chaque application tombe sans que la base ait l air morte. annuaire (openldap) — elle COMPTE les entrees. Un annuaire vide repond success a tout : le mensonge des sauvegardes vides, vert et sans contenu. zones (powerdns) — un autoritatif sans zone repond NXDOMAIN a tout, ce qui se lit comme « ce nom n existe pas ». edge (nginx) — elle valide la configuration SUR DISQUE : nginx sert la derniere valide, et une configuration cassee ne se voit qu au prochain demarrage, souvent des mois plus tard. Les cinq eprouvees vertes sur le sain puis rouges PAR PARAMETRE, sans toucher a un service. Etat : 20 sondes sur 19 roles, 23 services distincts, 70 instances, 67 au vert. Les trois autres sont connues : deux sauvegardes sans donnee a emporter, et Loki en delai de stabilisation apres redeploiement. make prouver : CONFORME, 64 OK, 0 echec, 0 saute. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Crgis8CxCWkAGFA1ecBz3q
2026-09-10 03:47:03 -04:00
# --- 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) }}