参考博文:
ansible笔记(12):handlers的用法
1.Ansible playbook handlers剧本触发功能
handlers
当tasks执行成功后(change提示有变化),会触发 handlsers 执行,tasks 下通过 notify
关联 handlsers 的 name
- handlers 执行的顺序与在playbook下定义的顺序相同,与被notify调用的顺序无关
- 所有tasks执行完毕后,才会执行各个handler,并不是执行完某个task后,立即执行对应的handler
- 如果你想要在执行完某些task以后立即执行对应的handler,则需要使用
meta
模块
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| shell > cat httpd-install.yaml --- - hosts: webserver tasks: - name: Install httpd yum: name=httpd,httpd-tools state=installed
- name: Configure httpd copy: src=./httpd.conf dest=/etc/httpd/conf/httpd.conf notify: Restart httpd server
handlers: - name: Restart httpd server service: name=httpd state=restarted
|
- 与task name平级,作用是影响ansible的内部运行方式
meta: flush_handlers
表示立即执行之前task所对应的handler。
3.listen 模块
当一个task需要同时调用多个handler时,使用listen为handler分组,在task notify下调用listen的组名,从而打到一个task同时调用多个handler的目的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| --- - hosts: test70 remote_user: root tasks: - name: task1 file: path=/testdir/testfile state=touch notify: handler group1 # 调用listen分组下的handler handlers: - name: handler1 listen: handler group1 # 两个handler在同一个listen组下 file: path=/testdir/ht1 state=touch - name: handler2 listen: handler group1 file: path=/testdir/ht2 state=touch
|