最近ChefからAnsibleに移ってきたのですが、git周りで少し手こずったので、ここでまとめておきます。
git
のレポジトリを更新する時に、新しくなった場合のみコマンドを実行し、それ以外の時は何もしないようにしたかったのですが、ドキュメンテーションを見てもあんまりそれらしい情報が見つかりませんでした。
ソースコードを少し見てみたら、register
を使う場合はmyvar.changed
でレポジトリが変わったかどうかを判定できることが分かったので、こんな感じで書くことができました。
- name: Fetch project
git: repo={{ repository }} accept_hostkey=yes dest={{ project_dir }}
register: gitclone
- name: Build project
command: make
when: gitclone.changed
args:
chdir: "{{ project_dir }}"
register
を使う時はどのような値が使えるかがドキュメンテーションを読んでもあんまり分からなかったのですが、各モジュールのソースコードでmodule.exit_json
を探せば分かるようです。例えばgitモジュールを見るとchanged
が設定されてることが分かります。