在playbook的任务执行过程中,有些任务的状态每次都会发生变化,当需要根据变化做出响应,而不用更改后续任务时,handlers是一个不错的选择。
一、handlers有何作用?
handlers意为触发器,与notify搭配使用,对某个子任务进行监听,当其状态发生变化时,执行定义的额外动作。使用handlers,无需更改后续任务,便可增加额外的功能,playbook的功能扩展更为灵活。
二、实例
在前文Ansible使用基础之playbook模式的讲解中,以安装http服务器为例进行讲解。原playbook如下图所示:
现有额外需求如下。
需求: http安装完成后,现需将监听端口由默认的80,该为8080
-
方案一
在本地修改配置文件后,照旧使用copy模块传到任务主机,之后将后面的start httpd 任务改为 restart httpd
-
方案二
使用handlers
,在传送配置文件完成后,立即重启http服务。更改如下:
对比两种方案,可见,使用handlers
,playbook能够进行更为灵活的扩展。
三、注意事项
- notify后的名称需与handlers中定义的name一致
- handlers与tasks同级