Ansible联合收割机';设置';将任务输出为JSON的输出

Ansible联合收割机';设置';将任务输出为JSON的输出,ansible,Ansible,我当前使用以下命令收集有关所有主机的信息: ansible all -m setup --tree out 这将为目录out中的每个主机创建一个文件,其中包含JSON格式的所有ansible变量。非常有用 但是,我的主机由许多KVM主机组成,因此我想将virt/list\u vms的输出添加到每个输出中 我创建了一个小剧本: hosts: myhost tasks: - name: VM list checker virt: name: list the VMs

我当前使用以下命令收集有关所有主机的信息:

 ansible all -m setup --tree out
这将为目录
out
中的每个主机创建一个文件,其中包含JSON格式的所有ansible变量。非常有用

但是,我的主机由许多KVM主机组成,因此我想将
virt
/
list\u vms
的输出添加到每个输出中

我创建了一个小剧本:

hosts: myhost

tasks:
  - name: VM list checker
    virt:
        name: list the VMs
        command: list_vms
我的剧本是这样写的:

ansible-playbook -v status.playbook.yml -s
---
- 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
我希望输出为
JSON
格式,最好结合
事实
列表的输出


如何使用组合信息创建类似的布局(每个主机在
out
目录中有一个
JSON
)?

您可以这样做:

ansible-playbook -v status.playbook.yml -s
---
- 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

使用@KonstantinSuvorov的输入将
命令
调用替换为
virt
,我得出了以下结论:

---
- 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

这是一个伟大的开始!谢谢,我将阅读更多关于
注册
选项的信息。