ぴよ丸水産

週末ファゴッティストによる技術ブログ

【Ansible】windowsホストから指定のディレクトリ配下ファイルをfetch

はじめに

Ansibleでwindowsホストに対して、とあるディレクトリ配下のファイルをfetchしてくる処理を作りました。
fetchモジュールって、公式ドキュメントに、
This must be a file, not a directory. とあるように、
このディレクトリ配下ぜ~んぶ持ってきてっていうのは無理なんですね。
そうやって意地悪するとこ、嫌いじゃないです。
ちょっとだけ工夫して実現したのでメモ残します。

環境

  • Ansibleノード
    • Redhat系7(詳しく見てない)
    • Ansible2.4
  • ターゲットノード

いざfetch

roleのtasksの中に書くっていう前提です。
C:¥Users¥Piyomaru¥hoge¥配下の
ファイルたちを取得したいイメージです。

- name: get filename
   win_find:
     paths: C:¥Users¥Piyomaru¥hoge¥
   register: file_list

- name: fetch files in directory
   fetch:
     src: C:¥Users¥Piyomaru¥hoge¥"{{ item.filemame }}"
     dest: ./output
   with_items: "{{ file_list.files }}"

一回file_listをdebugモジュールで、
dict型で出ることを確認しました。
filepathのキーでループ回してもよかったかと思います。

余談

この処理の実装に至った背景として、
実現しようとした全体の流れを書いておきます。

  1. Powershellコマンドを叩いて、結果をファイルに出力するPowershellスクリプトを作成(叩くコマンドはファイルに別出しして、引数で指定)

  2. 1.のPowershellスクリプトWindowsにコピー(win_copyモジュール)

  3. スクリプトを実行し、ホスト名フォルダにファイルを出力させる(win_shellモジュール)

  4. 3.で出力させたファイルたちをfetchでAnsibleノードに持ってくる★この記事はこの部分!

なんか、こうして書くとレシピですね。
1. でレンチンしたジャガイモを鍋に投入!
みたいな。

参考

docs.ansible.com