ansible-playbook でタグ指定でロールの一部を実行したときだけハンドラを実行しない
例えば次のようなプイレブックで、
# 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
が未定義になるためハンドラは実行されません。
Author And Source
この問題について(ansible-playbook でタグ指定でロールの一部を実行したときだけハンドラを実行しない), 我々は、より多くの情報をここで見つけました https://qiita.com/ngyuki/items/c9a8603827408ae00902著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .