client_pki : ré-émettre le cert sur dérive de SAN (fin du rm manuel)

Le garde 'creates:' sautait la ré-émission même quand les SAN voulus changeaient
(ex: nouvelle exposition -> client_pki_sans mis à jour). Contourné 3× à la main ce
soir. Corrigé : on lit les SAN du cert existant (openssl) et on ré-émet si le cert
est absent OU si un SAN voulu manque, puis on recharge les consommateurs
(client_pki_reload_services). Idempotent (SAN à jour -> sauté) + dérive détectée,
prouvés. ansible-lint production : 0.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Daniel Allaire 2026-07-05 18:43:23 -04:00
parent eee7dbd108
commit c8ccbb5e97
2 changed files with 30 additions and 2 deletions

View file

@ -3,3 +3,16 @@
ansible.builtin.systemd:
daemon_reload: true
listen: Recharger systemd
# Apres une re-emission du cert (ex: nouveau SAN), recharger les services qui le
# servent (nginx, postfix, slapd...) sinon ils continuent de servir l'ancien cert.
- name: Recharger les consommateurs du cert
ansible.builtin.systemd:
name: "{{ item }}"
state: reloaded
loop: "{{ client_pki_reload_services }}"
loop_control:
label: "{{ item }}"
when:
- not ansible_check_mode
- client_pki_reload_services | length > 0

View file

@ -71,7 +71,16 @@
path: "{{ client_pki_steppath }}/certs/root_ca.crt"
mode: "0644"
- name: Obtenir le certificat d'hote
- name: Lire les SAN du certificat d'hote existant (detection de derive)
ansible.builtin.command:
cmd: "openssl x509 -in {{ client_pki_cert }} -noout -ext subjectAltName"
register: client_pki_san_actuels
changed_when: false
failed_when: false
# Re-emet si le cert est absent OU si un SAN voulu manque (ex: nouvelle exposition
# ajoutee au plan -> client_pki_sans mis a jour). Plus de garde 'creates' aveugle.
- name: Obtenir / re-emettre le certificat d'hote (absent ou SAN derives)
ansible.builtin.command:
cmd: >-
step ca certificate {{ client_pki_nom_cert }}
@ -80,9 +89,15 @@
--provisioner-password-file {{ client_pki_steppath }}/provisioner.pass
{% for s in client_pki_sans | select | unique %}--san {{ s }} {% endfor %}
--force
creates: "{{ client_pki_cert }}"
environment:
STEPPATH: "{{ client_pki_steppath }}"
when: >-
client_pki_san_actuels.rc != 0
or (client_pki_sans | select | unique | reject('equalto', '')
| reject('in', client_pki_san_actuels.stdout | default(''))
| list | length > 0)
changed_when: true
notify: Recharger les consommateurs du cert
- name: Deployer l'unite systemd de renouvellement
ansible.builtin.template: