Ausgabe mit Ansible anzeigen

38

Ich habe ein Ansible-Spiel für PGBouncer , das einige Ausgaben eines in PGBouncer integrierten Statistikmoduls anzeigt.

Mein Problem ist, dass wenn Ansible die Ausgabe an das Terminal druckt, es die Zeilenumbrüche verstümmelt. Anstatt zu sehen

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

Aha

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

Weiß jemand, wie man Ansible dazu bringt, die Ausgabe "schön zu drucken"?

mjallday
quelle

Antworten:

14

In Ansible gibt es keine Möglichkeit, das zu tun, was Sie möchten. Sie können dies als Problemumgehung tun:

ansible-playbook ... | sed 's/\\n/\n/g'
Jarv
quelle
1
Unter OSX musste ich verwenden sed -e 's/\\n/'$'\\\n/g'. Ebenfalls relevant: comicjk.com/20
Navin
4
siehe sorins antwort serverfault.com/a/846232/240508 das ist die richtige in 2017 und ansible> 2.3
Vadimo
\nWird meistens im Ergebnis angezeigt, sodass Sie diesen regulären Ausdruck in Ihrer Debug-Meldung verwenden können:msg: "{{ result.stdout | regex_replace('\\n', '\n') }}"
klml
62

Wenn Sie eine menschlichere Ausgabe wünschen, definieren Sie:

ANSIBLE_STDOUT_CALLBACK=debug

Dadurch kann das Debug-Ausgabemodul (zuvor benannt human_log) problemlos verwendet werden, obwohl sein unglücklicher Name weniger ausführlich und für den Menschen viel einfacher zu lesen ist.

Wenn Sie eine Fehlermeldung erhalten, dass dieses Modul nicht verfügbar ist, aktualisieren Sie Ansible oder fügen Sie dieses Modul lokal hinzu, wenn Sie Ansible nicht aktualisieren können. Es funktioniert mit Versionen von Ansible wie 2.0 oder wahrscheinlich sogar 1.9.

Eine andere Möglichkeit, dies zu konfigurieren, ist das Hinzufügen stdout_callback = debugzu Ihrer ansible.cfg

Sorin
quelle
13
Dies sollte die AKZEPTIERTE Antwort im Jahr 2017 sein. Die benutzerfreundliche Protokollausgabe wird sofort geliefert.
Vadimo
1
Hier noch ein paar Tipps, um dies dauerhafter zu machen: github.com/ansible/ansible/issues/27078#issuecomment-364560173
kramer65
1
Oder ANSIBLE_STDOUT_CALLBACK=yaml. Ich bevorzuge es, weil es schön formatiert, fail msgwenn ich ein Objekt zur Verfügung stelle.
Marinos An
13

Sie können ein Callback-Plugin verwenden . Dadurch wird Ihre Ausgabe neu analysiert und kann problemlos ein- und ausgeschaltet werden.

xddsg
quelle
2
Hinweis: Mit ansible 2.0.x müssen Sie von import CallbackBasewith erben , from ansible.plugins.callback import CallbackBasedamit die Callback-Klasse funktioniert.
Allo
12

Gefunden diese Art und Weise in ansible Projektgruppe Forum:

- 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') }}"

Wir wandeln dies im Grunde genommen in eine Liste um, indem wir sie nach Zeilenumbrüchen aufteilen und diese Liste dann ausdrucken.

jhutar
quelle
Das macht die Shell-Ausgabe viel lesbarer! Nett!
Asfand Qazi
Diese Lösung scheint einen großen Nachteil zu haben: Wenn die Ausführung des Moduls "Beispieltest" fehlschlägt, schlägt in der Regel der gesamte Playbook-Build fehl und Sie werden nie die formatierte Ausgabe sehen, insbesondere die für stderr, die wahrscheinlich am interessantesten ist.
René
@ René du hast recht. Dazu können Sie ignore_errors: yesden ursprünglichen Befehl und später so etwas wie "- assert: that:" test.rc == 0 "hinzufügen.
JHUTAR
0

Wenn Sie es in einem Format anzeigen möchten, das die Standardausgabe praktisch imitiert, können Sie das debugCallback-Plugin mit dem debugModul in Ansible 2.7+ wie folgt verwenden:

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