From d9a8905fc7e9f253f6a78668d534315561ab3b36 Mon Sep 17 00:00:00 2001 From: Daniel Allaire Date: Wed, 30 Sep 2026 03:56:42 -0400 Subject: [PATCH] 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 --- roles/serveur_openldap/tasks/main.yml | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/roles/serveur_openldap/tasks/main.yml b/roles/serveur_openldap/tasks/main.yml index f339a0c..8f26759 100644 --- a/roles/serveur_openldap/tasks/main.yml +++ b/roles/serveur_openldap/tasks/main.yml @@ -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