Aller au contenu
Infrastructure as Code medium

Troubleshooting Ansible : verbosité, débogueur, idempotence et performance

8 min de lecture

Logo Ansible

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.

  • Choisir le bon niveau -v selon 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_tasks callback.
  • Diagnostiquer une idempotence cassée et la fixer avec creates: / changed_when:.
  • Tuner SSH avec pipelining + forks + ControlPersist (-50 % de temps typique).

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.

OutilQuand l’utiliserPage dédiée
-vvvBug SSH, connexion, interpréteur PythonVerbosité
debugger: on_failedVariable undefined, échec à fix au runtimeDébogueur
profile_tasks callbackIdentifier les tâches lentesVerbosité
Test idempotence (run 2x)Vérifier qu’un playbook ne refait rienIdempotence
ANSIBLE_KEEP_REMOTE_FILES=1Inspecter les modules transférés sur cibleVerbosité
ansible-navigator replayRejouer un échec sans relancerModes interactifs
  • Erreur SSH / Connection refused / Permission deniedansible all -m ping -vvv, puis ssh -vvv user@host pour 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 modules command/shell/lineinfile, ajouter creates: / regexp: / changed_when:.
  • Erreur AAP / EEansible-navigator replay <artifact.json> (voir EE).

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. -v pour les args, -vv pour les vars templatés, -vvv pour SSH, -vvvv pour les internals plugin. Empiler les v sans réflexion produit 50 000 lignes de log inutile et noie le vrai message.
  • Débogueur interactif au moindre échec récurrent. debugger: on_failed ouvre un REPL avec les variables à l’instant T. Vous fixez en 30 secondes au lieu de relancer 10 fois en modifiant des debug:. 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=0 au second run avant de toucher forks ou pipelining. Sinon vous accélérez du faux travail.
  • Mesure systématique avec profile_tasks avant 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: true sur toute tâche manipulant un secret. Sans ça, -v leak la valeur claire dans la sortie. Indexable par défaut par les agents CI ou les stacks ELK. Non négociable.

Cinq erreurs typiques de troubleshooting — chacune source de bugs additionnels :

  • -vvvv par défaut sur tout playbook qui plante. Le vrai message se noie dans 50 000 lignes. Commencer par -v et monter selon le symptôme.
  • debugger: always sur 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: false posé par paresse pour faire taire changed=N. Masque les vraies modifications, casse l’audit, rend l’idempotence non vérifiable. Toujours diagnostiquer la vraie cause, pas masquer.
  • forks=200 sur 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=True sans vérifier requiretty dans /etc/sudoers. Pipelining incompatible avec requiretty. Sur RHEL par défaut, ça plante. Désactiver requiretty dans /etc/sudoers.d/ ou laisser pipelining off.
  • -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=0 au 2e — à automatiser en CI.
  • Pipelining + forks + ControlPersist = 3 leviers cumulés, gain typique -50 % à -60 %.
  • no_log: true systématique sur toute tâche manipulant un secret.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn