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