Loops ansible在文件列表上循环并检查文件是否存在,如果不下载它

Loops ansible在文件列表上循环并检查文件是否存在,如果不下载它,loops,ansible,yaml,Loops,Ansible,Yaml,不确定如何实现此逻辑,我知道如何在单个文件中实现: - name: Obtain information about a file win_stat: path: "C:\myfile.txt" register: fileinfo - [...] when: fileinfo.exists == False 如何处理文件列表?如果您只想减少执行此操作的步骤,您应该能够使用下载命令上的忽略错误:yes执行下载步骤(示例中未显示)。如果同时使用忽略错误:yes和regist

不确定如何实现此逻辑,我知道如何在单个文件中实现:

- name: Obtain information about a file
  win_stat:
    path: "C:\myfile.txt"
  register: fileinfo

- [...]
  when: fileinfo.exists == False

如何处理文件列表?

如果您只想减少执行此操作的步骤,您应该能够使用下载命令上的
忽略错误:yes
执行下载步骤(示例中未显示)。如果同时使用
忽略错误:yes
register
,甚至可以判断命令是否失败

如果你想让它更有效率,你可以在一个任务中完成统计,然后检查结果。当您使用列表执行任务时,您会得到一组答案

假设您在
ssh\u key\u config
中有一个文件名/路径列表,那么您可以使用stat,然后可以在项目上循环(这些项目中方便地包含文件名)

在这种情况下,假设
remote\u dir
包含主机上的远程目录,
target\u files
包含实际文件名,
your\u dest\u dir
包含您希望将文件放在本地的位置

我对Windows和Ansible做的不多,但是
win_stat
的文档记录与
stat
几乎相同,因此您可以直接替换它


还要注意,这需要的是文件列表,而不是glob。如果使用glob(例如,您希望从远程检索具有特定扩展名的所有文件),则不会使用
with_items
子句,并且需要使用
item.stat.filename
和/或
item.stat.path
远程检索文件(由于
项.item
将包含请求项,即glob。

如果您只想减少执行此操作的步骤,您应该能够执行下载步骤(示例中未显示)在下载命令中使用
ignore\u errors:yes
。如果同时使用
ignore\u errors:yes
register
,您甚至可以判断命令是否失败

如果你想让它更有效率,你可以在一个任务中进行统计,然后检查结果。当你用一个列表执行一个任务时,你会得到一堆答案

假设您在
ssh\u key\u config
中有一个文件名/路径列表,那么您可以使用stat,然后可以在项目上循环(这些项目中方便地包含文件名)

在这种情况下,假设
remote\u dir
包含主机上的远程目录,
target\u files
包含实际文件名,
your\u dest\u dir
包含您希望将文件放在本地的位置

我对Windows和Ansible做的不多,但是
win_stat
的文档记录与
stat
几乎相同,因此您可以直接替换它


还请注意,这需要文件列表,而不是glob。如果使用glob(例如,您希望从远程检索具有特定扩展名的所有文件),则您将不会使用
with_items
子句,并且需要使用
item.stat.filename
和/或
item.stat.path
远程检索文件(因为
item.item
将包含请求项,这将是glob.

,它们都有txt扩展名并且在同一目录下?我想问题是如何将check+另一个操作捆绑在一起(这里下载)在一个循环中。这些循环都有txt扩展名并且在同一个目录下?我想问题是如何将检查+另一个操作(这里下载)捆绑在一个循环中。做得好,谢谢。旁注,这些循环在执行过程中看起来很慢;(做得好,谢谢。旁注,这些循环在执行过程中看起来很慢(
- name: Check to see if file exists
  stat:
    path: "{{ remote_dir }}/{{ item }}"
  register: stat_results
  with_items: "{{ target_files }}"
  ignore_errors: True

- name: perform operation
  fetch:
    src: "{{ remote_dir }}/{{ item.item }}"
    dest: "{{ your_dest_dir }}"
    flat: yes
  with_items: "{{ stat_results.results }}"
  when: item.stat.exists == False