Ansible:如何找到库存主机之间的聚合文件大小



我能够在单个主机上找到变量totalsize中所有三个文件的总大小,如下所示。

猫所有主机

[destnode]
myhost1
myhost2
myhost3

猫myplay.yml

- name: "Play 1"
hosts: "destnode"
gather_facts: false
tasks:
- name: Fail if file size is greater than 2GB
include_tasks: "{{ playbook_dir }}/checkfilesize.yml"
with_items:
- "{{ source_file_new.splitlines() }}"

cat checkfilesize.yml

- name: Check file size
stat:
path: "{{ item }}"
register: file_size
- set_fact:
totalsize: "{{ totalsize | default(0) |int + ( file_size.stat.size / 1024 / 1024 ) | int }}"
- debug:
msg: "TOTALSIZE: {{ totalsize }}"

要运行:

ansible-playbook -i all.hosts myplay.yml -e source_file_new="/tmp/file1.logn/tmp/file1.logn/tmp/file1.log"

上面的播放效果很好,它为我提供了各个主机上变量source_file_new中提到的所有文件的大小总和。

我的要求是从提到的destnode组的所有三个(或更多(主机中获得所有文件的总大小。

因此,如果每个主机上的每个文件都是10MB,那么当前的剧本在主机1上打印10+10+10=30MB,在主机2和主机3上打印一样。

相反,我希望来自所有主机的所有大小的总和,如下面的

host1 (10+10+10) + host2 (10+10+10) + host3 (10+10+10) = 90MB

hostvars中提取destnode中每个节点的totalsize事实,并将它们相加。

简而言之,在当前checkfilesize.yml任务文件的末尾,替换调试任务:

- name: Show total size for all nodes
vars:
overall_size: "{{ groups['destnode'] | map('extract', hostvars, 'totalsize') 
| map('int') | sum }}"
debug:
msg: "Total size for all nodes: {{ overall_size }}"
run_once: true

如果以后需要重用该值,可以立即将其存储在一个事实中,该事实将为所有主机设置相同的值:

- name: Set overall size as fact for all hosts
set_fact:
overall_size: "{{ groups['destnode'] | map('extract', hostvars, 'totalsize') 
| map('int') | sum }}"
run_once: true
- name: Show the overall size (on result with same value for each host)
debug:
msg: "Total size for all nodes: {{ overall_size }} - (from {{ inventory_hostname }})"

作为替代方案,您可以在播放级别用变量声明来替换set_fact

相关内容

  • 没有找到相关文章

最新更新