Set-OPS-Public/roles/serveur_postgresql/templates/setops-postgresql-cert-sync.sh.j2

26 lines
1.3 KiB
Text
Raw Normal View History

#!/bin/sh
# Géré par Set-OPS (rôle serveur_postgresql). Ne pas éditer à la main.
# Synchronise le certificat step_ca (déposé par client_pki, root:root) vers un
# emplacement lisible par postgres, puis recharge. PostgreSQL lit en tant que
# 'postgres' et REFUSE une clé accessible au groupe/monde → owner postgres, 0600.
# Idempotent ; appelé au déploiement ET au renouvellement (unité .path).
set -eu
SRC_CERT="{{ serveur_postgresql_tls_source_cert }}"
SRC_KEY="{{ serveur_postgresql_tls_source_cle }}"
SRC_CA="{{ serveur_postgresql_tls_source_ca }}"
DST="{{ serveur_postgresql_tls_dir }}"
[ -f "$SRC_CERT" ] && [ -f "$SRC_KEY" ] || exit 0
install -o postgres -g postgres -m 0644 "$SRC_CERT" "$DST/server.crt"
install -o postgres -g postgres -m 0600 "$SRC_KEY" "$DST/server.key"
[ -f "$SRC_CA" ] && install -o postgres -g postgres -m 0644 "$SRC_CA" "$DST/root.crt"
# Reload (SIGHUP) : PostgreSQL recharge ses fichiers TLS sans coupure.
# ATTENTION : 'postgresql' est un wrapper Debian (reload = no-op) ; il faut recharger
# la ou les INSTANCES de cluster (postgresql@NN-main), sinon le nouveau cert n'est pas pris.
for u in $(systemctl list-units --plain --no-legend 'postgresql@*' 2>/dev/null | awk '{print $1}'); do
systemctl reload "$u" 2>/dev/null || true
done