■ はじめに
Ansible には callback plugin という仕組みがあり、結果出力の形式を変更したりすることができます。
ansible-playbook
コマンドでは、ansible.cfg
で stdout_callback
の指定を、ansible
コマンドではこれに加え bin_ansible_callbacks = True
という指定が必要です。
この記事では、それぞれの例をご紹介します。
■ ansible-playbook コマンドの場合
例えば、 json
という callback plugin を指定して ansible-playbook
コマンド実行する例を見てみます。
設定ファイル(ansible.cfg)
stdout_callback
で json
を指定します。
stdout_callback = json
なお、環境変数として設定する場合は export ANSIBLE_STDOUT_CALLBACK=json
を実行します。
設定の確認
念のため ansible-config
コマンドで設定を確認します。
[vagrant@centos7 vagrant]$ ansible-config dump | grep CALLBACK DEFAULT_CALLBACK_PLUGIN_PATH(default) = [u'/home/vagrant/.ansible/plugins/callback', u'/usr/share/ansible/plugins/callback'] DEFAULT_CALLBACK_WHITELIST(default) = [] DEFAULT_LOAD_CALLBACK_PLUGINS(default) = False DEFAULT_STDOUT_CALLBACK(/etc/ansible/ansible.cfg) = json ← json になった
実行結果
ここでは junos_command
モジュールで show version
を実行する Playbook を実行します。
[vagrant@centos7 vagrant]$ ansible-playbook -i inventory junos_test.yml { "plays": [ { "play": { "id": "525400da-a710-c40b-4624-000000000008", "name": "junos" }, "tasks": [ { "hosts": { "172.16.0.1": { "_ansible_no_log": false, "_ansible_parsed": true, "changed": false, "invocation": { (~略~) }, "stdout": [ "Hostname: vsrx1\nModel: firefly-perimeter\nJUNOS Software Release [12.1X47-D15.4]" ], "stdout_lines": [ [ "Hostname: vsrx1", "Model: firefly-perimeter", "JUNOS Software Release [12.1X47-D15.4]" ] ] } }, "task": { "id": "525400da-a710-c40b-4624-00000000000a", "name": "show version" } } ] } ], "stats": { "172.16.0.1": { "changed": 0, "failures": 0, "ok": 1, "skipped": 0, "unreachable": 0 } } }
このように、JSON 形式で結果が出力されます。
■ ansible コマンドの場合
ansible コマンド(ad-hocコマンドとも呼ばれる) でも、callback plugin を指定する場合は、stdout_callback
以外にも bin_ansible_callbacks
という設定も必要です。
- 公式ドキュメント上の説明
設定ファイル(ansible.cfg)
stdout_callback
で json
を指定するのに加え、 bin_ansible_callbacks
を True
に指定します。
stdout_callback = json bin_ansible_callbacks = True
なお、環境変数として設定する場合は export ANSIBLE_LOAD_CALLBACK_PLUGINS=True
を実行します。
設定の確認
念のため ansible-config
コマンドで設定を確認します。
[vagrant@centos7 vagrant]$ ansible-config dump | grep CALLBACK DEFAULT_CALLBACK_PLUGIN_PATH(default) = [u'/home/vagrant/.ansible/plugins/callback', u'/usr/share/ansible/plugins/callback'] DEFAULT_CALLBACK_WHITELIST(default) = [] DEFAULT_LOAD_CALLBACK_PLUGINS(/etc/ansible/ansible.cfg) = True ← True になった DEFAULT_STDOUT_CALLBACK(/etc/ansible/ansible.cfg) = json
実行結果
ここでは junos_command
モジュールで show version
を実行する ansible
コマンド を実行します。
[vagrant@centos7 vagrant]$ ansible -i 172.16.0.1, all -m junos_command -a "commands='show version'" -c netconf -u root -k SSH password: (パスワードを入力) { "plays": [ { "play": { "id": "525400da-a710-ece8-5deb-000000000007", "name": "Ansible Ad-Hoc" }, "tasks": [ { "hosts": { "172.16.0.1": { "_ansible_no_log": false, "_ansible_parsed": true, "changed": false, "invocation": { (~略~) }, "stdout": [ "Hostname: vsrx1\nModel: firefly-perimeter\nJUNOS Software Release [12.1X47-D15.4]" ], "stdout_lines": [ [ "Hostname: vsrx1", "Model: firefly-perimeter", "JUNOS Software Release [12.1X47-D15.4]" ] ] } }, "task": { "id": "525400da-a710-ece8-5deb-000000000009", "name": "" } } ] } ], "stats": { "172.16.0.1": { "changed": 0, "failures": 0, "ok": 1, "skipped": 0, "unreachable": 0 } } } [vagrant@centos7 vagrant]$
無事に ansible コマンドでも json 形式で出力できました。
■ まとめ
json callback plugin を利用する場合を例にまとめます。
ansible-playbook コマンド
- ansible.cfg で設定する場合
[defaults] stdout_callback = json
- 環境変数で設定する場合
export ANSIBLE_STDOUT_CALLBACK=json
ansible コマンド
- ansible.cfg で設定する場合
[defaults] stdout_callback = json bin_ansible_callbacks = True
- 環境変数で設定する場合
export ANSIBLE_STDOUT_CALLBACK=json export ANSIBLE_LOAD_CALLBACK_PLUGINS=True