てくなべ (tekunabe)

ansible / network automation / 学習メモ

[Ansible] Playbookの実行結果(エラー含む)を改行付きで表示する(デフォルトのコールバックプラグイン編)

はじめに

先日、community.general.yaml コールバックプラグイン を使って、Playbook の実行結果を改行付きで表示させる方法を投稿しました。

tekunabe.hatenablog.jp

ふと、デフォルトの ansible.builtin.default コールバックプラグイン でも似たようなことができる事に気が付きました。

ansible-core 2.13 からの機能で、 pretty_results や、result_format というオプションを利用します。

前回と同じ Playbook で試してみます。

  • 環境
    • ansible-core 2.14.4

おためし1: JSON のまま改行付きで表示

設定

ansible.cfg で以下の設定をします。

[defaults]
callback_format_pretty = true

環境変数で指定する場合は ANSIBLE_CALLBACK_FORMAT_PRETTY です。

実行

Playbook の実行結果は以下の通りです。-vvv を付けなくても、JSON のまま改行付きで表示されました。

$ ansible-playbook -i inventory.ini test.yml 

PLAY [Request] **********************************************************************************************************

TASK [Invalid request] **************************************************************************************************
fatal: [rock01]: FAILED! => {
    "changed": false,
    "elapsed": 10,
    "msg": "Status code was -1 and not [200]: Request failed: <urlopen error [Errno -3] Temporary failure in name resolution>",
    "redirected": false,
    "status": -1,
    "url": "https://ugui.local/dummy.json"
}

PLAY RECAP **************************************************************************************************************
localhost                  : ok=0    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0  

おためし2: YAMLで改行付きで表示

設定

ansible.cfg で以下の設定をします。

[defaults]
callback_format_pretty = false
callback_result_format = yaml

フォーマットの指定を環境変数で指定する場合は ANSIBLE_CALLBACK_RESULT_FORMAT です。

なお、フォーマットをYAMLに指定した場合は、callback_format_pretty のデフォルトが true になるとのことです。この場合、読みやすさ優先になって、正確性に欠けることがあるようなので false にします。(詳細はドキュメントを参照

実行

...(略)...
TASK [Invalid request] ********************************************************************************************************************
fatal: [rock01]: FAILED! => 
    changed: false
    elapsed: 10
    msg: 'Status code was -1 and not [200]: Request failed: <urlopen error [Errno -3]
        Temporary failure in name resolution>'
    redirected: false
    status: -1
    url: https://ugui.local/dummy.json
...(略)...

今回の場合に限れば、callback_format_prettyfalse でも true でも変わりませんでした。

おわりに

community.general コレクションを利用できない環境でも改行付きで表示したい場合は、有力な設定方法な気がします。

別のコールバックプラグインを使わなくてもいいなら、改行付き JSON 表示くらいがちょうどいいかなと思い始めました。

ansible.cfg 再掲:

[defaults]
callback_format_pretty = true

Playbook 実行時に -v の付け方によっては改行付き JSON で表示されますが、v を増やすとどうしても情報量が増えてしまいます。デバッグほどの情報は不要だけど、JSON は改行されててほしい、というときには便利そうです。