2026-06-24 20:17:46 -04:00
|
|
|
---
|
|
|
|
|
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
|
2026-07-04 18:31:30 -04:00
|
|
|
|
|
|
|
|
# --- 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"
|
2026-07-04 20:46:53 -04:00
|
|
|
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
|
2026-09-14 11:35:14 -04:00
|
|
|
|
|
|
|
|
# --- 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 : la reconstruction remet l'etat de l'incarnation precedente
Chaque role proprietaire (AC, bases, annuaire, Nextcloud, rspamd/DKIM,
courriel, forge, web) remet son etat au moment ou il le creerait neuf,
depuis le dernier instantane anterieur a la naissance de la machine.
La sauvegarde refuse de deposer tant qu'un etat d'avant attend.
Outil de noeud setops-restaurer ; cibles sauvegarder-maintenant,
restauration-etat, restauration-renoncer ; test_restauration.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 02:39:22 -04:00
|
|
|
|
|
|
|
|
# --- 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 ;
|
2026-10-07 15:18:40 -04:00
|
|
|
#
|
|
|
|
|
# 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.
|
restauration : la reconstruction remet l'etat de l'incarnation precedente
Chaque role proprietaire (AC, bases, annuaire, Nextcloud, rspamd/DKIM,
courriel, forge, web) remet son etat au moment ou il le creerait neuf,
depuis le dernier instantane anterieur a la naissance de la machine.
La sauvegarde refuse de deposer tant qu'un etat d'avant attend.
Outil de noeud setops-restaurer ; cibles sauvegarder-maintenant,
restauration-etat, restauration-renoncer ; test_restauration.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 02:39:22 -04:00
|
|
|
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) }}
|