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?

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'

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


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é.


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.


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') }}"
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.