■ はじめに
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 コマンド
[defaults]
stdout_callback = json
export ANSIBLE_STDOUT_CALLBACK=json
ansible コマンド
[defaults]
stdout_callback = json
bin_ansible_callbacks = True
export ANSIBLE_STDOUT_CALLBACK=json
export ANSIBLE_LOAD_CALLBACK_PLUGINS=True