我目前使用此命令收集有关所有主机的事实:
ansible all -m setup --tree out
这将为目录out
中的每个主机创建一个文件,其中包含所有JSON格式的ansible变量。很有用。
但是,我的主机包含很多KVM主机,因此我想将virt
/ list_vms
的输出添加到每个输出中。
我创建了一个小剧本:
hosts: myhost
tasks:
- name: VM list checker
virt:
name: list the VMs
command: list_vms
我像这样运行这个剧本:
ansible-playbook -v status.playbook.yml -s
我希望输出采用JSON
格式,最好是facts
和list_vms
的输出结合。
如何使用组合信息创建类似的布局(JSON
目录中每个主机一个out
?)?
答案 0 :(得分:2)
使用@KonstantinSuvorov的输入我想出了这个:
---
- hosts: kvm_hosts
gather_facts: no
tasks:
- setup:
register: setup_res
- virt: "command=list_vms"
register: cmd_res
- copy:
content: "{{ setup_res | combine(cmd_res) | to_nice_json }}"
dest: /tmp/out/{{ inventory_hostname }}.json
delegate_to: localhost
答案 1 :(得分:1)
您可以这样做:
---
- hosts: all
gather_facts: no
tasks:
- setup:
register: setup_res
- command: echo ok
register: cmd_res
- file:
path: /tmp/out/{{ inventory_hostname }}
state: directory
delegate_to: localhost
- copy:
content: "{{ setup_res | to_nice_json }}"
dest: /tmp/out/{{ inventory_hostname }}/facts.json
delegate_to: localhost
- copy:
content: "{{ cmd_res | to_nice_json }}"
dest: /tmp/out/{{ inventory_hostname }}/cmd.json
delegate_to: localhost
用command
替换virt
来电。