LoginSignup
58
56

More than 5 years have passed since last update.

Ansible で(たぶん)正しいファイルの存在確認方法(ファイル比較もあるよ)

Posted at

※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同士を比較してあげれば、ファイル名が違っていても同じ内容かどうか判断できる。というお話しでした。

58
56
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
58
56