如何使用ansible从节点生成已计数文件的总和

如何使用ansible从节点生成已计数文件的总和,ansible,Ansible,我有一个进程,该进程从“in”文件夹中获取文件,并在进程失败时将其放入“error”文件夹。 我有2个集群,其中有4个节点,这个进程正在运行。 我想对每个节点上的“in”文件夹和“error”文件夹中的文件进行计数,但我也需要按集群进行总数计数 这是我试过的,但不起作用 - name: Count files in Error and in hosts: cluster_data become: true gather_facts: no vars: error_path

我有一个进程,该进程从“in”文件夹中获取文件,并在进程失败时将其放入“error”文件夹。 我有2个集群,其中有4个节点,这个进程正在运行。 我想对每个节点上的“in”文件夹和“error”文件夹中的文件进行计数,但我也需要按集群进行总数计数

这是我试过的,但不起作用

- name: Count files in Error and in
  hosts: cluster_data
  become: true
  gather_facts: no
  vars:
    error_path: "{{ ERROR_PATH }}"
    in_path: "{{ IN_PATH }}"
  tasks:
    - name: initiate total_files_error
      set_fact:
         total_files_error: 0
    - name: "count number of files in {{ error_path }} by node"
      files: 
        paths: "{{ error_path }}"
      register: count_files_error
    - name: print number of files in {{ error_path }} by node"
      debug: 
        msg: "{{ count_files_error.examined }}"
    - name: "count number of files in {{ error_path }} by cluster"
      set_fact:
        total_files_error: "{{ total_files_error + count_files_error.examined|int }}"
    - name: "print number of files in {{ error_path }} by cluster"
      debug: 
        msg: "{{ total_files_error }}"
我想知道每个
cluster\u data1
cluster\u data2
的总文件\u错误计数,但我不太了解set\u事实是如何工作的

这就是我现在拥有的:

任务[启动总文件\u错误]**********************************************
确定:[集群数据11]
确定:[集群数据12]
确定:[集群数据21]
确定:[集群数据22]
任务[计算/data/a2/error中的文件数]*********************************
确定:[集群数据21]
确定:[集群数据12]
确定:[集群数据11]
确定:[集群数据22]
任务[调试]*******************************************************************
确定:[集群_数据12]=>{
“msg”:“504”
}
确定:[集群数据21]=>{
“msg”:“534”
}
确定:[集群_数据11]=>{
“msg”:“1926”
}
确定:[群集数据22]=>{
“msg”:“5025”
}
任务[设置事实]****************************************************************
确定:[集群数据12]
确定:[集群数据21]
确定:[集群数据11]
确定:[集群数据22]
任务[调试]*******************************************************************
确定:[集群_数据11]=>{
“msg”:“1926”
}
确定:[集群_数据12]=>{
“msg”:“504”
}
确定:[集群数据21]=>{
“msg”:“534”
}
确定:[群集数据22]=>{
“msg”:“5025”
}
这就是我所期望的:

任务[启动总文件\u错误]**********************************************
确定:[集群数据11]
确定:[集群数据12]
确定:[集群数据21]
确定:[集群数据22]
任务[计算/data/a2/error中的文件数]*********************************
确定:[集群数据21]
确定:[集群数据12]
确定:[集群数据11]
确定:[集群数据22]
任务[调试]*******************************************************************
确定:[集群_数据12]=>{
“msg”:“504”
}
确定:[集群数据21]=>{
“msg”:“534”
}
确定:[集群_数据11]=>{
“msg”:“1926”
}
确定:[群集数据22]=>{
“msg”:“5025”
}
任务[设置事实]****************************************************************
确定:[集群数据12]
确定:[集群数据21]
确定:[集群数据11]
确定:[集群数据22]
任务[调试]*******************************************************************
确定:[集群_数据1]=>{
“msg”:“2430”
}
确定:[群集数据2]=>{
“msg”:“5559”
}
我想我可以用SETU事实做点什么,但我不知道怎么做。你能帮我吗

有人能帮我吗

提前Thx

问候,,
Winael

也许这个例子可以帮助您:

- name: count files
  find: 
    paths: {{ error_path }}
  register: file_count

- name: print file_count
  debug:
    msg: "{{ file_count.examined }}"

您应该阅读以下内容:您的示例太复杂了,应该简化为最简单的formThx,以帮助您使用find模块,但我主要关心的是按clusteri求和,我也希望得到答案,因为我不擅长过滤器和列表处理。解决方案也可能涉及json_查询。。。我迟早会弄明白的,请告诉我你是否成功地将一组主机的hostvars相加!