Question Comment voir la sortie standard des commandes ansible?


Comment voir stdout pour les commandes ansible-playbook? -v ne montre que la sortie ansible, pas les commandes individuelles. Ce serait formidable si je pouvais comprendre comment faire cela immédiatement. Par conséquent, si quelque chose échoue ou est suspendu, je peux voir pourquoi.

par exemple.

- name: print to stdout
  action: command echo "hello"

serait imprimer

TASK: [print variable] ******************************************************** 

hello

123
2017-09-06 21:01


origine


en relation: serverfault.com/questions/667252/… - Capi Etheriel
stackoverflow.com/questions/20563639/… - JonnyJD


Réponses:


Je pense que vous pouvez enregistrer le résultat dans une variable, puis imprimer avec le débogage.

- name: print to stdout
  command: echo "hello"
  register: hello

- debug: msg="{{ hello.stdout }}"

- debug: msg="{{ hello.stderr }}"

126
2017-09-14 13:01



De plus, vous pouvez déboguer une variable directement avec - debug: var=hello. Cela est parfois plus utile pour les sorties multilignes ou les sorties de modules Ansible (plutôt que command/shell sortie). - geerlingguy
J'ai eu du mal à obtenir une sortie Java en utilisant cela. Le correctif consiste à rediriger toute la sortie de Java vers stdout: shell: java -version 2>&1 - Matthias Braun
c'est beaucoup mieux rien, mais vous ne recevez que le message stdout après la commande s'est terminée avec succès. J'avais un problème où ansible semblerait pendre. La raison était que j’utilisais le mauvais nom d’utilisateur pour une commande rsync, qui spoulait la demande de mot de passe interactive, qui venait juste d’être suspendue. Le débogage était très difficile - mais si je pouvais voir stdout en temps réel, j'aurais immédiatement réalisé ce que j'avais mal fait. J'adorerais cette fonctionnalité, si possible. - Michael B
Bien que cela fonctionne, cela signifie que ansible rend le débogage très difficile. Imaginons que la première tâche ne se termine jamais (peut-être attende-t-elle bêtement les entrées de l'utilisateur) ... l'utilisateur ne le saura jamais! De plus, le register module, ou quoi que ce soit ne produit pas d'objets qui ont le stdout ou stderr ensemble de variables .... donc c'est vraiment dommage que nous n'obtenions pas simplement la sortie par défaut: | - vlad-ardelean


Au lieu de stdout Je suggère d'utiliser stdout_lines. Pour une sortie multiligne, c'est beaucoup mieux, par exemple.

- hosts: all
  tasks:
    - name: Run ls.sh and output "ls /"
      script: ls.sh
      register: out

    - debug: var=out.stdout_lines

donne

TASK: [debug var=out.stdout_lines] ******************************************** 
ok: [local] => {
    "var": {
        "out.stdout_lines": [
            "total 61", 
            "lrwxrwxrwx   1 root root     7 Feb 15  2015 bin -> usr/bin", 
            "drwxr-xr-x   6 root root  1024 Aug 24 22:08 boot", 
            "drwxr-xr-x  22 root root  3580 Sep  8 18:41 dev",  
            [...] 
            "drwxr-xr-x   9 root root  4096 Aug 25 19:14 usr", 
            "drwxr-xr-x  13 root root  4096 Feb 25  2015 var"
        ]
    }
}

En ce qui concerne la sortie en temps réel à des fins de débogage, il existe un rapport de bogue fermé https://github.com/ansible/ansible/issues/3887#issuecomment-54672569 discuter des raisons pour lesquelles cela n'est pas possible et ne sera pas mis en œuvre.


75
2017-09-08 18:12



+1 pour lier le bug "sortie en temps réel". - ntc2
Si je veux envoyer out.stdout_lines (en tant que corps de la tâche de courrier Ansible), comment puis-je l'envoyer afin qu'il ne ressemble PAS à ceci lorsque le courrier électronique est reçu? [total 61 ', u'lrwxrwxrwx 1 racine 7 févr. 2015 2015 bin -> usr / bin', u'drwxr-xr-x 6 racine racine 1024 août 24 22:08 démarrage ', u' .... .]] Je veux que ça ressemble à ça, comme on le voit sur le terminal - Chris F


J'ai trouvé en utilisant le minimal  stdout_callback avec ansible-playbook a produit un résultat similaire à celui utilisé avec ad-hoc ansible.

Dans votre ansible.cfg (notez que je suis sous OS X alors modifiez le callback_plugins chemin en fonction de votre installation)

stdout_callback     = minimal
callback_plugins    = /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/ansible/plugins/callback

Pour qu'une tâche comme celle-ci

---
- hosts: example
  tasks:
   - name: Say hi
     command: echo "hi ..."

Donne une sortie comme celle-ci, comme le ferait une commande ad-hoc

example | SUCCESS | rc=0 >>
hi ...

J'utilise ansible-playbook 2.2.1.0


13
2018-04-06 08:12



Nice callback plugin, un post-traitement simple ne peut extraire que la sortie standard. - RichVel