openldap : la mesure d'un annuaire vierge ne meurt plus sur lui

Sur un annuaire vraiment vierge, grep -v ne gardait aucune ligne et
sortait en 1 : pipefail faisait echouer la mesure dans le seul cas
qu'elle doit reconnaitre. Comptage par awk. Trouve par la
reconstruction de Chezlepro.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Daniel Allaire 2026-09-30 03:56:42 -04:00
parent 515aac415a
commit d9a8905fc7

View file

@ -57,12 +57,17 @@
# L'ANNUAIRE EST-IL VIERGE ? Mesure AVANT que ce role n'y cree quoi que ce soit (unites,
# comptes de service) : apres, il ne le serait plus jamais. Le paquet ne pose que la
# racine — `cn=admin` n'y figure que sur les installations anciennes.
#
# `awk`, PAS `grep -v | wc -l` : sur un annuaire VRAIMENT vierge, `grep -v` ne garde aucune
# ligne et sort en 1 — `pipefail` faisait alors echouer la mesure precisement dans le cas
# qu'elle doit reconnaitre (reconstruction de Chezlepro, 2026-09-30).
- name: Restauration — l'annuaire est-il vierge ?
ansible.builtin.shell: >-
set -o pipefail;
slapcat -b '{{ serveur_openldap_base_dn }}' 2>/dev/null | grep '^dn:'
| grep -v -i -x -e 'dn: {{ serveur_openldap_base_dn }}' -e 'dn: cn=admin,{{ serveur_openldap_base_dn }}'
| wc -l
slapcat -b '{{ serveur_openldap_base_dn }}' 2>/dev/null
| awk -v base='dn: {{ serveur_openldap_base_dn | lower }}'
'tolower($0) ~ /^dn: / && tolower($0) != base && tolower($0) != "dn: cn=admin," substr(base, 5) {n++}
END {print n + 0}'
args:
executable: /bin/bash
register: serveur_openldap_entrees_initiales