Ansible-Handlers与Notify
1、handlers、notify作用
Handlers 是一个触发器,同时是一个特殊的 tasks ,它无法直接运行,它需要被tasks 通知后才会运行。比如: httpd 服务配置文件发生变更,我们则可通过
Notify 通知给指定的 handlers 触发器,然后执行相应重启服务的操作,如果配置文件不发生变更操作,则不会触发 Handlers 任务的执行;
2、示例1-变更服务配置触发重启
2.1、编写playbook【使用 Ansible 的 playbook 部署 httpd 服务]
cat << 'CAT_END' > loop-file.yaml - hosts: httpd remote_user: root vars: http_port: 8080 tasks: - name: install httpd server yum: name=httpd state=present - name: configure httpd server template: src: ./httpd.conf.j2 dest: /etc/httpd/conf/httpd.conf notify: # 调用名称为Restart Httpd Server的handlers(可以写多个) - restart httpd server - name: start httpd server systemd: name=httpd state=started enabled=yes handlers: # 如果配置文件发生变化会调用该handlers下面的对应名称的task - name: restart httpd server systemd: name=httpd state=restarted CAT_END
2.2、准备模板配置文件
scp root@192.168.10.17:/etc/httpd/conf/httpd.conf httpd.conf.j2 sed -i '/^Listen/c Listen {{http_port}}' httpd.conf.j2
2.3、执行playbook
]# ansible-playbook loop-file.yaml PLAY [httpd] ************************************************************************************************************************************************* TASK [Gathering Facts] *************************************************************************************************************************************** ok: [192.168.10.17] ok: [192.168.10.18] TASK [install httpd server] ********************************************************************************************************************************** ok: [192.168.10.18] ok: [192.168.10.17] TASK [configure httpd server] ******************************************************************************************************************************** ok: [192.168.10.18] ok: [192.168.10.17] TASK [start httpd server] ************************************************************************************************************************************ ok: [192.168.10.18] ok: [192.168.10.17] PLAY RECAP *************************************************************************************************************************************************** 192.168.10.17 : ok=4 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 192.168.10.18 : ok=4 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
3、Handlers注意事项与说明
1、无论多少个 task 通知了相同的 handlers , handlers 仅会在所有tasks 结束后运行一次。 2、只有 task 发生改变了才会通知 handlers ,没有改变则不会触发handlers。 3、不能使用 handlers 替代 tasks 、因为 handlers 是一个特殊的 tasks。