※Ansible を始めて日が浅いので最新のバージョン(1.7.2)でしかチェックしていません。
※CentOSでしか確認していません。誰か他のOSでチェックしたらコメントに残してくれるとみんな助かっていいと思う。
ぐぐって出てくる方法だと shell: や command: モジュールを使って(-f とかちょっと。。。)チェックした値を register: していて、なんだかなぁと思っていたのだけど、正しい判断の仕方が見つけられた(と思う)のでメモしてみる。(実はQiita投稿は初めてw)
よく見ると本家ドキュメントにも書いてあって、コアモジュールの stat を使うだけ。
# task
- stat: path=/hoge/fuga
register: is_file
- name: skip if file is found.
fail: msg='file not found'
when: is_file.stat.md5 is not defined
stat モジュールでファイルの stat を取得して、(statモジュールがデフォルトでmd5を取得するので) md5 をチェックすればOK
ディレクトリにはmd5が付かないみたい?なので、ファイルの存在確認として使える。
fail モジュールは強制終了させてくれる。(name を付けることで正常時のメッセージが見やすい)
when を工夫すればディレクトリ許可もできる。それは記事数を稼ぐために別に書く。かもしれないw
おまけのファイル比較の正しい方法。git もそうだけど、md5でチェックするのが正しいよね。
- stat: path=/hoge/fuga
register: is_file1
- stat: path=/hoge/hoga
register: is_file2
- debug: msg="compare"
when: (is_file1.stat.md5 == is_file2.stat.md5)
register した値の中にstatがあるので、その中のmd5同士を比較してあげれば、ファイル名が違っていても同じ内容かどうか判断できる。というお話しでした。