Set-OPS-Public/playbooks/maintenance/devis-postgresql.yml
Daniel Allaire 4bfcf4944f devis PostgreSQL et courriel : la serie des devis de service est complete
PostgreSQL — rend visibles deux defauts deja vecus ici : un reseau ECRIT dans
pg_hba au lieu d'etre derive, et une ligne host en clair la ou il faut hostssl
(verrou qui saute sans bruit, les clients verify-full continuant de marcher).
Interroge pg_settings, jamais le fichier : un grep de postgresql.conf annonce
ssl_cert_file=snakeoil alors que le serveur sert le certificat de l'AC — la
valeur vient d'un conf.d que le grep ne voyait pas. L'instrument etait
incomplet, pas la configuration.

Courriel — chaque maillon interroge la ou il dit la verite : postmap -q pour
la resolution LDAP de Postfix, doveadm user pour celle de Dovecot (le maillon
exact ou la livraison avait bloque), vraies conversations SMTP/IMAP. Verifie
aussi qu'une adresse INEXISTANTE ne resout pas — sinon la boite est un
fourre-tout et le devis ne mesure plus rien.

Trouve immediatement une divergence reelle : Dovecot connait la boite de
sysadmin@chezlepro.internal, Postfix ne sait pas y router (query_filter
(mail=%s), et l'attribut mail porte sysadmin@chezlepro.ca). Collision de
roles : une identite ne porte qu'une adresse mail et on lui en demande deux —
notification joignable hors du systeme, et cle de routage local. Arbitrage a
rendre avant correction.

Tests negatifs : PostgreSQL 3 ecarts nommes, code 1. Une variable morte
trouvee dans une branche que le cas nominal n'emprunte jamais.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-08 08:53:49 -04:00

62 lines
2 KiB
YAML

---
# Devis PostgreSQL — RELEVE seul. Ne modifie rien (D-23).
#
# On interroge l'ETAT EFFECTIF (`pg_settings`), jamais les fichiers. Un `grep` de
# `postgresql.conf` annonce `ssl_cert_file = snakeoil` sur cet hote, alors que le
# serveur sert bien le certificat de l'AC interne : la valeur vient d'un
# `conf.d/99-setops.conf` que le grep ne voyait pas. C'est l'instrument qui etait
# incomplet, pas la configuration. Constate le 2026-08-08.
#
# make postgresql-plan
- name: Devis PostgreSQL — chiffrement et portee des accès
hosts: serveur_postgresql
become: true
gather_facts: false
tasks:
- name: Relever les réglages TLS effectifs
ansible.builtin.command:
argv:
- sudo
- -u
- postgres
- psql
- -tAF|
- -c
- >-
select name, setting from pg_settings
where name in ('ssl','ssl_cert_file','ssl_key_file','ssl_ca_file')
register: devis_pg_tls
changed_when: false
- name: Relever les règles d'accès effectives
ansible.builtin.command:
argv:
- sudo
- -u
- postgres
- psql
- -tAF|
- -c
# `address` et `netmask` sont du TEXTE dans cette vue, pas des inet : on les
# rend tels quels et Python les recompose.
- >-
select type, coalesce(address,''), coalesce(netmask,''), auth_method
from pg_hba_file_rules where error is null order by rule_number
register: devis_pg_hba
changed_when: false
- name: Déposer le relevé sur le contrôleur
ansible.builtin.copy:
dest: "{{ playbook_dir }}/../../instance/devis-postgresql.json.{{ inventory_hostname }}"
mode: "0600"
content: >-
{{ {
'hote': inventory_hostname,
'supernet': setops_supernet | default(''),
'tls': devis_pg_tls.stdout_lines | default([]),
'hba': devis_pg_hba.stdout_lines | default([]),
} | to_nice_json }}
delegate_to: localhost
become: false