web-dev-qa-db-ja.com

Ansibleで出力を表示する

PGBouncerに組み込まれている統計モジュールからの出力を表示する PGBouncerのAnsible play があります。

私の問題は、Ansibleが出力をターミナルに出力するときに改行を壊すことです。見る代わりに

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

そうですか

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

誰かがAnsibleに出力を「きれいに印刷」する方法を知っていますか?

44
mjallday

Ansibleでネイティブにやりたいことを行う方法はありません。これを回避策として行うことができます。

ansible-playbook ... | sed 's/\\n/\n/g'
15
jarv

より人間に優しい出力が必要な場合は、次のように定義します。

ANSIBLE_STDOUT_CALLBACK=debug

これにより、デバッグ出力モジュール(以前の名前はhuman_log)が使用できなくなります不幸な名前にもかかわらずは冗長ではなく、人間が読むのがはるかに簡単です。

このモジュールが利用できないというエラーが発生した場合、Ansibleをアップグレードするか、このモジュールをローカルに追加して、ansibleをアップグレードできない場合、2.0などのバージョンのansibleまたはおそらく1.9でも動作します。

これを設定する別のオプションは、stdout_callback = debugをansible.cfgに追加することです

73
sorin

コールバックプラグインを使用できます 。これにより出力が再解析され、簡単にオンとオフを切り替えることができます。

13
xddsg

Ansible Projectグループフォーラムで this が見つかりました:

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

これを基本的にリストに変換するには、改行で分割し、そのリストを印刷します。

12
jhutar

並列ホストで実行していない場合は、 pause モジュールを使用できます。

- pause:
    Prompt: "{{ variable_blob.stdout }}"

minutesまたはsecondsを定義して、入力なしで次に進みますが、ユーザー入力はキャプチャされていません。

クレジット: https://github.com/ansible/ansible/issues/17446#issuecomment-245391682

注:並列ホストでは、最初のホストからの出力のみが表示されます

1
wolfman-rack

実際に標準出力を模倣する形式で表示したい場合は、次のようにdebugコールバックプラグインをdebugモジュールとともにAnsible 2.7以降で使用できます。

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