Ansible - 辞書内リストのすべての項目を繰り返します。

Ansible - 辞書内リストのすべての項目を繰り返します。

私はこのモジュールを介してWindowsシステム上のファイルを見つけるためにAnsibleを使用しています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 }}"

ドキュメントを読んで他のオプションを試してみましたが、これはわかりませんでした。

どんな助けでも大変感謝します。

ありがとうございます!

修正する:

2番目のloop()の結果は、後述のように辞書内にwin_appsあります。resultshttps://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'

この場合、ファイルを繰り返してパスを抽出するにはどうすればよいですか?

ありがとうございます!

ベストアンサー1

おすすめ記事