Il peut être difficile de débuguer son code avec Ansible. Etant donné que tout est YAML, comment fait-on pour y voir plus clair ? C’est ce que nous verrons dans cet article.
Contexte
J’ai écrit un playbook, son exécution dure 10 minutes (oui oui, 10 min), mais j’ai une erreur en plein milieu.
Ce genre de situation peut vous arriver, et corriger un problème peut être un vrai clavaire. Ansible fournit quelques outils, et avec un peu de malice, on arrive toujours à ses fins.
Les erreurs
Ansible affichera une erreur, mais elle n’est jamais complètement claire :
- Une erreur de syntaxe : la ligne incriminée n’est pas la bonne, car il désigne le bloc Yaml en cause (pas très précis)
- Une erreur de templating : la structure entière du template est affichée, parfois clé en cause est donnée, mais encore faut-il la retrouver (notamment dans des structures conséquentes de plusieurs dizaines d’items).
- etc
Les outils fournis par Ansible
Ansible fournit quelques outils qui permettent d’aider au débug :
- Le mode verbose (-v) : augmente la verbosité dans l’affichage
- -v : mode warning
- -vv : mode info
- -vvv : mode debug
- -vvvv : mode trace
- Les tag (-t) : exécuter les tâches ayant le (ou les) tag
- -t install : exécute les tâches ayant le tag install
- -t »!scripts’ : exécute toutes les taches exceptées celles avec les tags « scripts »
- -t ‘install,!config’ : exécute les tâches « linux » exceptées celles avec le tag « config »
- Démarrage précis (–start-at-task) : exécuter le playbook à partir de la tache spécifiée
Ces paramètres du CLI permettre de mieux cibler les taches qu’on souhaite investiguer.
Les outils construits avec Ansible
Ansible affiche les erreurs, mais elles ne sont pas toujours parlantes. Il est parfois préférable de simuler la situation plutôt que de relancer le playbook entier.
Pour reproduire la situation, il faut l’isoler et l’écrire dans un playbook dédiée, nettement plus petit qui ne contient que les taches dont nous avons besoin. Tant que vous respectez les paramètres de votre play (hosts, groupes, vars), vous ne devriez pas avoir de surprises.
Playbook de debug
Ce petit playbook me suis partout, il me permet d’afficher des valeurs sans délai et sans dépendances.
--- - hosts: all vars: mystring: "Hello World!" tasks: - debug: msg: - "{{ mystring }}"
Grâce à ce petit bout de code, vous pouvez afficher n’importe quelle valeur. Ajouter ce fichier à votre repo Ansible, même (surtout) quand vous travaillez en équipes pour aider l’équipe à débuguer « like a boses ».
Avec ce playbook de debug, vous pouvez afficher toutes les valeurs possibles : string, scalar, list, dict. Vous pouvez également faire du templating en ajoutant une simple tache.
Tous les exemples que vous verrez sur ce site peuvent utiliser ce trick.
Autour d’Ansible
Les autres articles autour d’Ansible :