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"?

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'

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


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.


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.


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') }}"
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.