Ansibleでファイルの存在確認にstatを使ったら大きいファイルには動作が遅すぎたのでやったこと
Ansibleでファイルが存在しているかによって処理を分けたいことがあります。
そんなときは stat を使うとできますが、対象のファイルが数GB単位で大きいと処理が遅くなります。
下の例ではファイルが存在しないときだけ実行するタスクを書いています。
- name: とあるファイルが存在しているかチェックする stat: path: /path/to/file register: the_file_stat - name: (ファイルが存在してないときだけやりたい処理) shell: ... when: the_file_stat.stat.exists == False
ですがこの stat は、ファイルをチェックするだけでなくてチェックサムなども計算してくれます。
かなり重いファイルの場合、この処理で時間がかかってしまいます。
ファイルの存在チェックだけで良い場合は、チェックサムは不要なので以下のようにして遅くなる原因の処理を無くせます。
- name: とあるファイルが存在しているかチェックする stat: path: /path/to/file get_checksum: false get_md5: false register: the_file_stat
このIssueで自己解決してる人が居たので、参考になりました。
stat module very slow checking status of a large file · Issue #24858 · ansible/ansiblegithub.com