私はこのモジュールを介して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
あります。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'
この場合、ファイルを繰り返してパスを抽出するにはどうすればよいですか?
ありがとうございます!