Frage Wie kann man die Anzahl der möglichen Befehle sehen?


Wie erkenne ich stdout für Ansible-Playbook-Befehle? -v zeigt nur eine mögliche Ausgabe, nicht die einzelnen Befehle. Es wäre großartig, wenn ich sofort herausfinden könnte, wie das geht, wenn also etwas fehlschlägt oder hängt, kann ich sehen, warum.

z.B.

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

würde drucken

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

hello

123
2017-09-06 21:01


Ursprung


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


Antworten:


Ich denke, Sie können das Ergebnis zu einer Variablen registrieren und dann mit debug drucken.

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

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

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

126
2017-09-14 13:01



Darüber hinaus können Sie eine Variable direkt mit debuggen - debug: var=hello. Manchmal ist dies hilfreich für mehrzeilige Ausgabe oder Ansible-Modul-Ausgabe (anstatt command/shell Ausgabe). - geerlingguy
Ich hatte Probleme damit Java-Ausgabe zu bekommen. Die Lösung besteht darin, alle Ausgaben von Java an stdout umzuleiten: shell: java -version 2>&1 - Matthias Braun
das ist viel besser nichts, aber du bekommst nur die stdout Nachricht nach dem Der Befehl wurde erfolgreich abgeschlossen. Ich hatte ein Problem, bei dem es so aussah, als würde sich jemand aufhängen. Der Grund war, dass ich den falschen Benutzernamen für einen rsync-Befehl verwendet habe, der die interaktive Passwortabfrage gespoolt hat, die einfach erreichbar war. Es war sehr schwierig zu debuggen - aber wenn ich in Echtzeit stdout sehen könnte, hätte ich sofort erkannt, was ich falsch gemacht hatte. Ich würde diese Funktionalität, wenn möglich, lieben. - Michael B
Während dies funktioniert, bedeutet es, dass ansible das Debugging wirklich schwierig macht. Stellen wir uns vor, die erste Aufgabe wird niemals beendet (vielleicht wartet sie törichterweise auf Benutzereingaben) ... der Benutzer würde es nie erfahren! Darüber hinaus register Modul oder was auch immer es ist, erzeugt keine Objekte, die das haben stdout oder stderr variable set .... so ist es wirklich schlecht, dass wir nicht nur die Ausgabe standardmäßig erhalten: | - vlad-ardelean


Anstatt stdout Ich würde vorschlagen, zu verwenden stdout_lines. Für eine mehrzeilige Ausgabe ist dies viel schöner, z.B.

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

    - debug: var=out.stdout_lines

gibt

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

Bezüglich der Echtzeitausgabe für Debugging-Zwecke gibt es einen geschlossenen Fehlerbericht https://github.com/ansible/ansible/issues/3887#issuecomment-54672569 Erörterung der Gründe, warum dies nicht möglich ist und nicht umgesetzt wird.


75
2017-09-08 18:12



+1 für die Verknüpfung des Fehlers "Echtzeitausgabe". - ntc2
Wenn ich out.stdout_lines (als Body der Ansible-Mail-Aufgabe) aussenden möchte, wie kann ich es so senden, dass es NICHT so aussieht, wenn E-Mails empfangen werden? [u'total 61 ', u'lrwxrwxrwx 1 Wurzelwurzel 7 Feb 15 2015 bin -> usr / bin', u'drwxr-xr-x 6 Wurzelwurzel 1024 Aug 24 22:08 boot ', u' .... Ich möchte, dass es so aussieht wie am Terminal - Chris F


Ich habe das gefunden minimal  stdout_callback mit ansible-playbook ergab eine ähnliche Ausgabe wie Ad-hoc-Ansible.

In Ihrer ansible.cfg (Beachten Sie, dass ich auf OS X bin, also ändern Sie die callback_plugins Pfad für Ihre Installation)

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

So eine Aufgabe wie diese

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

Gibt die Ausgabe so aus, wie es ein Ad-hoc-Befehl tun würde

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

Ich benutze ansible-playbook 2.2.1.0


13
2018-04-06 08:12



Nettes Callback-Plugin, einfache Nachbearbeitung kann nur die Standardausgabe extrahieren. - RichVel