LoginSignup
1
0

More than 5 years have passed since last update.

ansible-playbook でタグ指定でロールの一部を実行したときだけハンドラを実行しない

Posted at

例えば次のようなプイレブックで、

# 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 filechanged ならハンドラが実行されます。

タグ hoge_config を指定して実行すれば hoge config filechanged のときにハンドラが実行されようとしますが、hoge service start が実行されないので hoge_service が未定義になるためハンドラは実行されません。

1
0
0

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
1
0