Ansible - 循环字典内列表中的所有项目

Ansible - 循环字典内列表中的所有项目

我正在使用 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'

在这种情况下,我如何能够循环文件并提取它们的路径?

谢谢!

相关内容