Affichage de la sortie avec Ansible

39

J'ai un jeu Ansible pour PGBouncer qui affiche une sortie d'un module de statistiques intégré à PGBouncer.

Mon problème est que lorsque Ansible imprime la sortie sur le terminal, il modifie les nouvelles lignes. Au lieu de voir

----------
| OUTPUT |
----------

je vois

----------\n| OUTPUT |\n----------

Est-ce que quelqu'un sait comment obtenir Ansible pour "imprimer joliment" la sortie?

mjallday
la source

Réponses:

14

Il n'y a pas moyen de faire ce que vous voulez nativement dans Ansible. Vous pouvez le faire comme solution de contournement:

ansible-playbook ... | sed 's/\\n/\n/g'
jarv
la source
1
Sur OSX, je devais utiliser sed -e 's/\\n/'$'\\\n/g'. Également pertinent: comicjk.com/20
Navin le
4
voir sorins answer serverfault.com/a/846232/240508 qui est le bon en 2017 et ansible> 2.3
Vadimo
La plupart du temps \napparaissent dans le résultat, vous pouvez donc utiliser cette expression rationnelle dans votre message de débogage:msg: "{{ result.stdout | regex_replace('\\n', '\n') }}"
klml
malheureusement, cela supprime la couleur agréable et utile que vous obtenez sur une sortie ansible
Mehdi LAMRANI
63

Si vous voulez une sortie plus conviviale, définissez:

ANSIBLE_STDOUT_CALLBACK=debug

Cela rendra toujours utilisable le module de sortie de débogage (précédemment nommé human_log) en dépit de son nom malheureux qui est moins détaillé et beaucoup plus facile à lire par les humains.

Si vous obtenez une erreur indiquant que ce module n'est pas disponible, mettez à niveau Ansible ou ajoutez ce module localement si vous ne pouvez pas mettre à niveau ansible, il fonctionnera avec les versions supérieures de ansible telles que 2.0 ou probablement même 1.9.

Une autre option pour configurer ceci est d’ajouter stdout_callback = debugà votre ansible.cfg

sorin
la source
13
cela devrait être la réponse ACCEPTED en 2017: la sortie de journal conviviale est livrée prête à l'emploi.
Vadimo
1
Voici quelques conseils pour rendre plus permanent: github.com/ansible/ansible/issues/27078#issuecomment-364560173
kramer65
1
Ou ANSIBLE_STDOUT_CALLBACK=yaml. Je le préfère parce que le format est agréable fail msglorsque je fournis un objet.
Marinos Un
13

Vous pouvez utiliser un plugin de rappel . Cela va ré-analyser votre sortie et est facilement activé et désactivé.

xddsg
la source
2
Remarque: avec ansible 2.0.x, vous devez hériter des éléments CallbackBaseimportés avec from ansible.plugins.callback import CallbackBasepour que la classe de rappel fonctionne.
Allo
12

Trouvé de cette façon dans le forum du groupe Ansible Project:

- name: "Example test"
  command:
    ...
  register: test
- name: "Example test stdout"
  debug:
    msg: "{{ test.stdout.split('\n') }}"
- name: "Example test stderr"
  debug:
    msg: "{{ test.stderr.split('\n') }}"

Nous transformons cela en liste en le scindant par une nouvelle ligne, puis en l’imprimant.

jhutar
la source
Cela rend la sortie du shell beaucoup plus lisible! Agréable!
Asfand Qazi
Cette solution semble présenter un inconvénient majeur: si l'exécution du module "Exemple de test" échoue, toute la construction du livre de lecture échoue et vous ne verrez jamais la sortie formatée, en particulier celle de stderr, qui est probablement la plus intéressante.
René
@ René tu as raison. Pour cela, vous pouvez ajouter ignore_errors: yesà la commande originale et plus tard quelque chose comme `- assert: that:" test.rc == 0 ".
jhutar
0

Si vous voulez le voir dans un format qui imite pratiquement la sortie standard, vous pouvez utiliser le debugplug-in de rappel avec le debugmodule dans Ansible 2.7+ comme ceci:

- name: "Test Output"
  debug:
    msg: "{{ test_result.stdout_lines | join('\n') }}"
daveystones
la source