我正在使用 Ansible 通过该模块在 Windows 计算机上查找文件win_find
。
我想分两步完成:
- 查找给定位置中的任何目录(例如:查找下的所有目录
C:/
- 在每个目录中搜索特定文件(例如
blah.cfg
:) - 如果目录中有所述文件,则将其结构镜像到远程位置(使用
win_fetch
)。
我设法找到包含示例文件的目录,以及获取和上传它们,但由于某种原因,我无法先找到目录,然后循环它们来搜索文件。
这就是我想做的:
- ansible.windows.win_find:
file_type: directory
paths: 'C:\'
recurse: no
get_checksum: no
register: win_dirs
tags: find
- debug:
msg: "Found directory {{ item.path }}"
with_items: "{{ win_dirs.files }}"
tags: find
- ansible.windows.win_find:
patterns: [ 'blah.cfg' ]
file_type: file
paths: '{{ item.path }}'
with_items: "{{ win_dirs.files }}"
tags: find
register: win_apps
- debug:
msg: "found blah directory: {{ item.path }}"
with_items: "{{ win_apps.files }}"
tags: find
当我尝试使用变量中的文件时win_apps
,出现以下错误:
MSG:
'dict object' has no attribute 'files'
澄清一下,如果我只是使用递归搜索整个根目录,这确实有效:
- ansible.windows.win_find:
patterns: [ 'blah.cfg' ]
file_type: file
paths: 'C:\'
recurse: yes
tags: find
register: win_apps
- debug:
msg: "found blah directory: {{ item.path }}"
with_items: "{{ win_apps.files }}"
tags: find
但是,使用此方法,我无法像在主机上那样镜像远程位置上的目录,因为win_find
会遍历子目录。
我认为这一点有问题:
- ansible.windows.win_find:
patterns: [ 'blah.cfg' ]
file_type: file
paths: '{{ item.path }}'
with_items: "{{ win_dirs.files }}"
我已尽力阅读文档并尝试其他选项,但无法弄清楚这一点。
任何帮助将不胜感激。
谢谢!
更新:
第二个循环 ( ) 的结果win_apps
位于results
字典内,如中所述https://docs.ansible.com/ansible/latest/user_guide/playbooks_loops.html#registering-variables-with-a-loop。
所以文件路径在{{ win_apps.results.files.path }}
- 但我无法访问它们,因为它win_apps.results.files
是一个列表。这一直有效:
- debug:
msg: "Found file {{ item.files[1].path }}"
loop: "{{ win_files.results }}"
虽然这还没有:
- debug:
msg: "Found file {{ item.files.path }}"
loop: "{{ win_files.results }}"
返回The task includes an option with an undefined variable. The error was: 'list object' has no attribute 'path'
在这种情况下,我如何能够循环文件并提取它们的路径?
谢谢!