1 — Bonnes pratiques IaC & structure du dépôt
Note : 4,2 / 5
Organisation IaC mature : séparation claire des préoccupations (bootstrap/
Ansible, storage/ceph/, platform/, apps/, bench/, docs/), rôles
structurés tasks/handlers/templates, modules FQCN systématiques, garde-fous
d’idempotence (changed_when: false, failed_when, creates, assertions de
pré-requis), handlers câblés via notify, tags opt-in côté sécurité. Gestion
des dépendances rigoureuse (lockfile pnpm versionné, requirements.yml
épinglé). Aucun artefact généré n’est versionné (dist/, node_modules/,
.vagrant/, inventory.yaml correctement ignorés — vérifié via
git ls-files). Les points d’amélioration sont cosmétiques ou liés au
sous-arbre git subtree bootstrap/security/.
Points forts
Section intitulée « Points forts »- Arborescence cohérente par préoccupation, fidèle à la table du
README. - Rôles Ansible idiomatiques : FQCN, assertions de pré-requis, idempotence
(
changed_when: false,creates,replaceidempotent pourfstab). - Handlers isolés et câblés via
notify. - Séparation config/secrets : aucun secret en clair, injection par variables d’environnement, fichier d’exemple fourni ; gitleaks confirme 0 secret.
- Dépendances épinglées :
pnpm-lock.yamlversionné, collections Ansible figées (ansible.posix 2.2.0,community.general 12.6.1). .ansible-lintdocumente ses dérogations ; profilproductionvalidé.- Pipeline qualité cohérent (lefthook pre-commit/pre-push/commit-msg aligné CI).
- Sous-arbre sécurité importé proprement via
git subtree, documenté.
Constats
Section intitulée « Constats »Mineur — Répertoire vide orphelin bootstrap/bootstrap/
Section intitulée « Mineur — Répertoire vide orphelin bootstrap/bootstrap/ »- Fichier :
bootstrap/bootstrap/roles/{audit-log,k8s-rollback}/tasks/ - Constat : arborescence vide locale, non suivie par git, référencée par aucune config — cruft probablement issu d’une commande lancée du mauvais répertoire.
- Recommandation :
rm -rf bootstrap/bootstrap.
Mineur — Décalage de nommage .env-example ↔ .gitignore ↔ doc
Section intitulée « Mineur — Décalage de nommage .env-example ↔ .gitignore ↔ doc »- Fichier :
.gitignore:19,bootstrap/security/.env-example,bootstrap/security/README.md:128 - Constat : le fichier réel est
.env-example(tiret) ;.gitignorewhiteliste!.env.example(point) — allowlist inopérante ;README.md:128demande de renommer.env.examplealors que le fichier livré est.env-example. Incohérence triple. - Recommandation : harmoniser sur
.env.example(point), corriger le README.
Mineur — .ansible-lint kinds ne couvre pas bootstrap/security/
Section intitulée « Mineur — .ansible-lint kinds ne couvre pas bootstrap/security/ »- Fichier :
.ansible-lint:29-33 - Constat : les patterns ciblent
.yamlalors que tout le sous-arbre sécurité est en.yml;secure.yml/upgrade.ymlreposent sur l’auto-détection (46/63 fichiers couverts, 17 à confirmer). - Recommandation : étendre
kindsau sous-arbre (bootstrap/security/*.yml,bootstrap/security/roles/*/tasks/*.yml,…/handlers/*.yml).
Suggestion — Double convention .yaml/anglais vs .yml/français
Section intitulée « Suggestion — Double convention .yaml/anglais vs .yml/français »- Fichier :
bootstrap/roles/vsbootstrap/security/roles/ - Constat : divergence assumée (subtree) mais qui oblige tout l’outillage à gérer deux extensions.
- Recommandation : documenter la convention dans
CONTRIBUTING.mdou un ADR ; normaliser à terme lors d’une synchro du subtree.
Suggestion — Table de structure du README incomplète
Section intitulée « Suggestion — Table de structure du README incomplète »- Fichier :
README.md:16-21 - Constat :
bench/etdocs/(deux répertoires de premier niveau significatifs) sont absents de la table « Structure ». - Recommandation : ajouter les deux lignes manquantes.
Suggestion — Rôles sans defaults/ ni meta/
Section intitulée « Suggestion — Rôles sans defaults/ ni meta/ »- Fichier :
bootstrap/roles/* - Constat : aucun
defaults/main.yamlnimeta/main.yml; l’interface des rôles et leurs métadonnées (plateformes, version Ansible min.) ne sont pas déclarées. - Recommandation :
defaults/main.yamldocumentant l’interface pour les rôles paramétrables ;meta/main.ymloptionnel (non bloquant, profilproductiondéjà vert).