
80 % des problèmes Ansible se diagnostiquent avec 4 outils : -vvv pour SSH, debugger: on_failed pour les variables au runtime, profile_tasks pour les performances, et le test d’idempotence (run 2× et vérifier changed=0). Cette section approfondit le niveau intermédiaire/avancé : verbosité progressive pour identifier où ça plante, débogueur interactif pour fix au runtime sans relancer, idempotence + tuning pour des playbooks fiables et rapides en production. Incontournable pour un candidat RHCE EX294 et un opérateur AAP en environnement multi-host.
Aller droit au but
Section intitulée « Aller droit au but »Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Choisir le bon niveau
-vselon le symptôme (Jinja2, SSH, internals). - Activer le débogueur Ansible interactif et fixer une variable au runtime.
- Mesurer les performances avec
ansible.posix.profile_taskscallback. - Diagnostiquer une idempotence cassée et la fixer avec
creates:/changed_when:. - Tuner SSH avec
pipelining + forks + ControlPersist(-50 % de temps typique).
Prérequis
Section intitulée « Prérequis »- Avoir validé Debug premières erreurs.
- Avoir écrit plusieurs playbooks (sections Premiers pas et Écrire du code).
- Un lab homelab avec plusieurs hosts (idéalement 3+) pour mesurer parallélisme et performances.
Mon retour d’expérience — pour ceux qui veulent comprendre
Section intitulée « Mon retour d’expérience — pour ceux qui veulent comprendre »Si l’une des cartes en haut de page vous a déjà orienté, vous êtes parti sur le bon pied. La suite de cette page s’adresse à ceux qui veulent comprendre la philosophie de cette section : pourquoi le débogueur interactif Ansible est un trésor sous-utilisé, pourquoi no_log est non négociable, et pourquoi le tuning performances vient APRÈS l’idempotence — jamais avant.
J’ai passé des nuits à débugger des playbooks Ansible qui plantent en prod sur 1 host sur 50, et qui marchent en pré-prod. Ce sont les heures qui forment le troubleshooter, pas les tutoriels. Cette section condense les réflexes que j’aurais aimé avoir 5 ans plus tôt — verbosité ciblée au lieu de -vvvv aveugle, débogueur interactif au lieu de relancer 30 fois, mesure avant tuning. Sans ces réflexes, on perd 80 % de son temps à chercher au mauvais endroit.
La boîte à outils du troubleshooter
Section intitulée « La boîte à outils du troubleshooter »| Outil | Quand l’utiliser | Page dédiée |
|---|---|---|
-vvv | Bug SSH, connexion, interpréteur Python | Verbosité |
debugger: on_failed | Variable undefined, échec à fix au runtime | Débogueur |
profile_tasks callback | Identifier les tâches lentes | Verbosité |
| Test idempotence (run 2x) | Vérifier qu’un playbook ne refait rien | Idempotence |
ANSIBLE_KEEP_REMOTE_FILES=1 | Inspecter les modules transférés sur cible | Verbosité |
ansible-navigator replay | Rejouer un échec sans relancer | Modes interactifs |
Quand utiliser quoi — arbre de décision rapide
Section intitulée « Quand utiliser quoi — arbre de décision rapide »- Erreur SSH /
Connection refused/Permission denied→ansible all -m ping -vvv, puisssh -vvv user@hostpour bypass Ansible. - Variable
undefined/ template Jinja2 →-vv(montre les args templatés). Si récurrent →debugger: on_failed. MODULE FAILURE→-vvv+ANSIBLE_KEEP_REMOTE_FILES=1, exécuter le module Python à la main sur la cible.- Lent (>30s par run) → callback
profile_tasks, identifier les tâches > 5s, optimiser ou paralléliser. changed=Nà chaque run → audit des modulescommand/shell/lineinfile, ajoutercreates:/regexp:/changed_when:.- Erreur AAP / EE →
ansible-navigator replay <artifact.json>(voir EE).
Le parcours en 3 phases
Section intitulée « Le parcours en 3 phases »Phase 1 — Voir ce qui se passe
Section intitulée « Phase 1 — Voir ce qui se passe »Phase 2 — Fix au runtime
Section intitulée « Phase 2 — Fix au runtime »Phase 3 — Fiabiliser et accélérer
Section intitulée « Phase 3 — Fiabiliser et accélérer »Ce que je défends pour le troubleshooting Ansible
Section intitulée « Ce que je défends pour le troubleshooting Ansible »Cinq positions tranchées que cette section assume :
- Verbosité ciblée, pas aveugle.
-vpour les args,-vvpour les vars templatés,-vvvpour SSH,-vvvvpour les internals plugin. Empiler lesvsans réflexion produit 50 000 lignes de log inutile et noie le vrai message. - Débogueur interactif au moindre échec récurrent.
debugger: on_failedouvre un REPL avec les variables à l’instant T. Vous fixez en 30 secondes au lieu de relancer 10 fois en modifiant desdebug:. C’est l’outil le plus sous-utilisé d’Ansible. - Idempotence d’abord, performance ensuite. Tuner un playbook qui n’est pas idempotent, c’est tuner une mauvaise solution. Vérifier
changed=0au second run avant de toucherforksoupipelining. Sinon vous accélérez du faux travail. - Mesure systématique avec
profile_tasksavant tout tuning. Pas de tuning à l’instinct. Si une tâche prend 80 % du temps, c’est elle qu’on optimise — pas les 5 autres qui sont rapides. no_log: truesur toute tâche manipulant un secret. Sans ça,-vleak la valeur claire dans la sortie. Indexable par défaut par les agents CI ou les stacks ELK. Non négociable.
Ce que je vous interdis
Section intitulée « Ce que je vous interdis »Cinq erreurs typiques de troubleshooting — chacune source de bugs additionnels :
-vvvvpar défaut sur tout playbook qui plante. Le vrai message se noie dans 50 000 lignes. Commencer par-vet monter selon le symptôme.debugger: alwayssur un play long. Le REPL s’ouvre après chaque tâche, paralyse l’exécution. Usage TDD ou debug ciblé, jamais en production ou play long.changed_when: falseposé par paresse pour faire tairechanged=N. Masque les vraies modifications, casse l’audit, rend l’idempotence non vérifiable. Toujours diagnostiquer la vraie cause, pas masquer.forks=200sur un poste dev. Sature le file descriptor limit, plante la RAM. Les forks doivent matcher la capacité du control node ET la tolérance des managed nodes (load avg, IOPS).pipelining=Truesans vérifierrequirettydans/etc/sudoers. Pipelining incompatible avecrequiretty. Sur RHEL par défaut, ça plante. Désactiverrequirettydans/etc/sudoers.d/ou laisser pipelining off.
À retenir
Section intitulée « À retenir »-vvv= niveau de référence pour tout bug SSH ou MODULE FAILURE.debugger: on_failed= inspection + fix au runtime, jamais en production.profile_tasks= mesure systématique avant tout tuning.- Test idempotence = run 2× et vérifier
changed=0au 2e — à automatiser en CI. - Pipelining + forks + ControlPersist = 3 leviers cumulés, gain typique -50 % à -60 %.
no_log: truesystématique sur toute tâche manipulant un secret.