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>
62 lines
2 KiB
YAML
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
|