以json,csv或其他格式获取Ansible ad-hoc命令输出的方法是什么
答案 0 :(得分:2)
在ansible.cfg
添加:
[defaults]
stdout_callback = json
而不是:
ok: [localhost] => {
"msg": "test"
}
你将拥有:
{
"plays": [
{
"play": {
"id": "720000f8-9450-586c-9a68-000000000005",
"name": "Json Test"
},
"tasks": [
{
"hosts": {
"localhost": {
"_ansible_no_log": false,
"_ansible_verbose_always": true,
"changed": false,
"msg": "test"
}
},
"task": {
"id": "720000f8-9450-586c-9a68-000000000007",
"name": "Debug"
}
}
]
}
],
"stats": {
"localhost": {
"changed": 0,
"failures": 0,
"ok": 1,
"skipped": 0,
"unreachable": 0
}
}
}
对于以下剧本:
---
- name: Json Test
hosts: localhost
gather_facts: False
vars:
test: test
tasks:
- name: Debug
debug:
msg: "{{ test }}"
答案 1 :(得分:2)
如果您不想修改.cfg
文件,也可以通过环境变量来完成它,例如:
ANSIBLE_LOAD_CALLBACK_PLUGINS=true ANSIBLE_STDOUT_CALLBACK=json ansible all -a "df -h /tmp"
此处有关ansible环境变量的更多信息 https://docs.ansible.com/ansible/latest/reference_appendices/config.html#environment-variables
答案 2 :(得分:0)
您至少需要使用Ansible 2.5
,然后在您的ansible配置中进行设置:
stdout_callback = json
bin_ansible_callbacks = True
有关ansible config的快速注释(抱怨?)...配置文件不是可加的。 如果您有多个配置文件(例如/etc/ansible/ansible.cfg和〜/ .ansible.cfg),则只会使用〜/ .ansible中的值。
这是配置文件的顺序:
https://docs.ansible.com/ansible/latest/reference_appendices/config.html#the-configuration-file
这是错误:
https://github.com/ansible/ansible/issues/17914
这也是完整的回调插件列表:
https://docs.ansible.com/ansible/2.6/plugins/callback.html#plugin-list