Ansible结合'设置'输出任务输出到JSON

时间:2017-07-19 14:45:04

标签: ansible

我目前使用此命令收集有关所有主机的事实:

 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格式,最好是factslist_vms的输出结合。

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

2 个答案:

答案 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来电。