Vraag Hoe stdout van ansible-opdrachten te zien?


Hoe zie ik stdout voor opdrachten voor onmogelijke-playbooks? -v toont alleen de uitvoer van de mogelijkheid, niet de individuele commando's. Het zou geweldig zijn als ik kon bedenken hoe ik dit onmiddellijk moest doen, dus als iets faalt of vastzit, kan ik zien waarom.

bijv.

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

zou afdrukken

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

hello

123
2017-09-06 21:01


oorsprong


verwant: serverfault.com/questions/667252/... - Capi Etheriel
stackoverflow.com/questions/20563639/... - JonnyJD


antwoorden:


Ik denk dat je het resultaat kunt registreren bij een variabele en vervolgens kunt afdrukken met debug.

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

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

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

126
2017-09-14 13:01



Bovendien kunt u een variabele direct debuggen met - debug: var=hello. Soms is dit meer nuttig voor uitvoer met meerdere regels of output van de module Ansible (in plaats van command/shell output). - geerlingguy
Ik had problemen met het verkrijgen van Java-uitvoer met dit. De oplossing is om alle uitvoer van Java om te leiden naar stdout: shell: java -version 2>&1 - Matthias Braun
dat is veel beter niets, maar je krijgt alleen de stdout-boodschap na de opdracht is voltooid. Ik had een probleem waarbij het lijkt alsof het onzichtbaarheid blijft hangen. De reden was dat ik de verkeerde gebruikersnaam gebruikte voor een rsync-opdracht, die de interactieve wachtwoordaanvraag in spoolde, die net anicijn ophing. Het was heel moeilijk om te debuggen - maar als ik realtime stdout kon zien, had ik me meteen gerealiseerd wat ik verkeerd had gedaan. Ik zou LOVE deze functionaliteit LOBBEN, indien mogelijk. - Michael B
terwijl dit werkt, betekent dit dat ansible echt debuggen maakt. Laten we ons voorstellen dat de eerste taak nooit eindigt (misschien wacht het dwaas op invoer van de gebruiker) ... de gebruiker zou het nooit weten! Bovendien is de register module, of wat dan ook, produceert geen objecten met de stdout of stderr variabele set .... dus het is echt erg dat we niet alleen de uitvoer standaard krijgen: | - vlad-ardelean


In plaats van stdout Ik zou voorstellen om te gebruiken stdout_lines. Voor meerregelige uitvoer is dit veel leuker, b.v.

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

    - debug: var=out.stdout_lines

geeft

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"
        ]
    }
}

Wat betreft real-time uitvoer voor foutopsporingsdoeleinden is er een gesloten bugrapport https://github.com/ansible/ansible/issues/3887#issuecomment-54672569 bespreken van de redenen waarom dit niet mogelijk is en niet zal worden uitgevoerd.


75
2017-09-08 18:12



+1 voor het koppelen van de "real time output" -bug. - ntc2
Als ik out.stdout_lines (als deel van de mailtaak van Ansible) wil verzenden, hoe kan ik het dan verzenden zodat het er NIET zo uitziet wanneer e-mail wordt ontvangen? [u'total 61 ', u'lrwxrwxrwx 1 root root 7 feb 15 2015 bin -> usr / bin', u'drwxr-xr-x 6 root root 1024 24 aug 22:08 boot ', u' .... . '] Ik wil dat het er zo uitziet, zoals te zien op de terminal - Chris F


Ik vond het gebruik van de minimaal  stdout_callback met ansible-playbook gaf vergelijkbare output aan het gebruik van ad-hoc ansible.

In je ansible.cfg (merk op dat ik OS X gebruik dus wijzig de callback_plugins pad dat past bij uw installatie)

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

Dus dat is een taak als deze

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

Geeft uitvoer zoals deze, zoals een ad-hoc commando dat zou doen

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

Ik gebruik ansible-playbook 2.2.1.0


13
2018-04-06 08:12



Mooie callback-plug-in, eenvoudige nabewerking kan alleen standaarduitvoer extraheren. - RichVel