我从主机收集一些特定于系统的数据(例如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覆盖它?