例えば次のようなプイレブックで、
# site.yaml
- hosts: all
roles:
- { role: hoge, tags: hoge }
hoge ロールの tasks と handlers が次の通り。
# roles/hoge/tasks/main.yaml
- name: hoge config file
copy:
src: hoge.conf
dest: /tmp/hoge.conf
notify:
- hoge restart
- name: hoge service start
systemd:
name: hoge.service
state: started
enabled: yes
# roles/hoge/handlers/main.yaml
- name: hoge restart
systemd:
name: hoge.service
state: restarted
このとき、hoge config file
だけ実行したいけど changed
でもハンドラは実行したくない、ということがたまにあります。
単に hoge config file
にタグを付けるだけだとハンドラが実行されてしまうので、タグ指定したときにハンドラが実行されないようにする小ネタ。
hoge config file
にそれっぽいタグを付けて、
- name: hoge config file
copy:
src: hoge.conf
dest: /tmp/hoge.conf
notify:
- hoge restart
tags:
- hoge_config # <--
hoge service start
でそれぽぽい変数を登録します。
- name: hoge service start
systemd:
name: hoge.service
state: started
enabled: yes
register: hoge_service # <--
その変数を条件にハンドラを実行します。
- name: hoge restart
systemd:
name: hoge.service
state: restarted
when: hoge_service is defined # <--
タグ hoge
を指定して実行すれば hoge service start
によって hoge_service
が登録されるので hoge config file
が changed
ならハンドラが実行されます。
タグ hoge_config
を指定して実行すれば hoge config file
が changed
のときにハンドラが実行されようとしますが、hoge service start
が実行されないので hoge_service
が未定義になるためハンドラは実行されません。