Ansible:将整个事实写入文件

时间:2018-05-28 08:19:04

标签: python ansible

我从主机收集一些特定于系统的数据(例如hostnam,os-release,磁盘使用情况......)并将此信息保存在fact变量中。

这非常有效,调试任务会返回所有收集的数据。

现在我想将其写入文件:

---
- name: gather system information
  gather_facts: False
  hosts: all

  vars_files:
    - host_feature_config.yml

  vars:
    - tasks_out: []

  tasks:

    - name: get the remote-hostname
      shell: 'hostname'
      register: rhost

    - name: get the remote-features
      set_fact:
         host_features: "{{ (lookup('vars', rhost.stdout)) | join(' ') }}"

    - import_tasks: tasks_lib.yml

    - debug:
         msg: "{{ tasks_out }}"

    - local_action: 
         copy content="{{ tasks_out }}" dest=out/tasks_out.json

不幸的是:调试将正确显示所有主机的所有值,但是如果你检查" tasks_out.json"仅存在上次扫描的主机的数据。 似乎输出(每个主机)被覆盖而不是连接。

如何将整个文本保存到tasks_out.json?

更新

所以将代码更改为:

    - copy: 
        content: "{% for host in ansible_play_hosts %}From host: {{ host }}\n{{ tasks_out }}\n{% endfor %}"
        dest: out/tasks_out.json
      delegate_to: localhost
      run_once: true

...不会改变这个问题。仍然是ansible将只从第一个任务中获取所有数据并将其写入" out / tasks_out.json"。但是多次!

所以当你有5个主机并且你在' em上运行任务时。 Ansible将获取第一个主机的输出(所有任务)并将其写入输出文件。但是对于第二......第五,它会重复相同的输出。

删除(或散列)" run_once:true"您将从上一个主机(而不是第一个)获取数据

所有这些都是合乎逻辑的,但我们仍然可以说Ansible会在新主机运行任务时覆盖该文件。

如何连续输出而不是让Ansible覆盖它?

0 个答案:

没有答案