2017-08-30 1 views
1

J'ai rejoint un projet qui a un grand nombre de playbooks et de rôles, et qui utilise beaucoup include (souvent de manière imbriquée) afin d'inclure les playbooks/rôles dans les playbooks/rôles existants. (Que ce soit une bonne ou une mauvaise pratique devrait être considérée hors de portée de cette question, parce que ce n'est pas quelque chose que je peux immédiatement changer.) Notez aussi que include_role n'est pas utilisé parce que ces playbooks ont été écrits bien avant que 2.2 ne soit sorti. processus de mise à jour.)Comment déboguer les inclusions et dépendances Ansible?

Normalement, lorsque runningansible-playbook, la sortie affiche simplement chaque tâche en cours d'exécution, mais elle ne montre pas les inclusions qui tirent des tâches supplémentaires. Cela rend difficile la façon dont le flux global saute entre les playbooks. En revanche, include_vars tâches sont inclus dans la sortie. Je suppose que c'est parce que c'est un module Ansible, alors que include isn't really a module.

Donc, sans avoir à modifier les playbooks, est-il possible d'exécuter des playbooks qui montre ce qui suit?

  • lorsque include directives déclenchent et
  • (idéalement) également les fichiers exacts qui sont inclus, car il est pas toujours évident de savoir comment les chemins relatifs sont convertis en chemins absolus

J'ai trouvé beaucoup de conseils sur les différentes façons de déboguer des playbooks, mais rien qui réalise cela. Points bonus si cela indique également quand les rôles sont inclus via meta role dependencies! Je suis conscient qu'il existe des outils tels que ansigenome qui font l'analyse statique des playbooks, mais j'espère quelque chose qui peut produire les informations à l'exécution du playbook, pour tout playbook que je choisis d'invoquer.

Si ce n'est pas possible actuellement, serait-ce une demande de fonctionnalité raisonnable?

Répondre

4

Essayez d'exécuter ansible-playbook -vv, il montre « chemin de tâches » pour chaque tâche exécutée, comme ceci:

TASK [debug] ********************************************* 
task path: /path/to/task/file.yml:5 
ok: [localhost] => { 
    "msg": "aaa" 
} 

Ainsi, vous pouvez facilement suivre le chemin du fichier réel (inclus ou non) et le numéro de ligne.

Comme pour includes, il existe différents types d'inclusions dans les versions Ansible actuelles (2.2, 2.3): statiques et dynamiques.
Les événements statiques se produisent pendant l'analyse et les informations les concernant sont imprimées (avec la verbosité -vv) au tout début de l'exécution du playbook.
La dynamique inclut l'exécution en cours d'exécution et vous pouvez voir les lignes "incluses" cyan dans la sortie.

+0

Est-ce que ce 'chemin de la tâche:' a été introduit depuis 1.9? Je suis actuellement obligé d'utiliser cette ancienne version 1.9, et je ne la vois pas en utilisant '-vv'. –

+0

Répondre à ma propre question: Je le vois avec 2.2.1.0, il doit donc avoir été. Même si cette réponse ne m'aide pas vraiment puisque je suis toujours obligé d'utiliser 1.9, je vais l'accepter car il est assez bon pour quelqu'un d'autre ne pas fonctionner follement une ancienne version. Cela dit, je ne suis pas sûr que cela réponde à la partie sur les dépendances de la question. –