最新消息: 关于Git&GitHub 版本控制你了解多少?
您现在的位置是:群英 > 服务器 > 系统运维 >
Ansible notify和handlers有什么用?
linuxe发表于 2020-10-16 15:06 次浏览
notify
 
notify这个action可用于在每个play的最后被触发,这样可以避免多次有改变发生时每次都执行指定的操作,取而代之,仅在所有的变化发生完成后一次性地执行指定操作。
 
在notify中列出的操作称为handler,也即notify中调用handler中定义的操作。

Ansible handlers的作用

handlers是一种触发器,它可以对task进行监控,如果task所指定的任务状态发生变化,则进行notify通知,然后触发额外的一系列操作,看一个示例来帮助理解:

01 cat apache.yml
02 - hosts: webservers
03   remote_user: root
04   tasks:
05   - name: install apache
06     yum: name=httpd state=latest
07   - name: install configure file for httpd
08     copy: src=/root/conf/httpd.conf dest=/etc/httpd/conf/httpd.conf
09   - name: start httpd service
10     service: enabled=true name=httpd state=started

 

上面的YAML文件存在三个task任务,分别是安装httpd、复制配置文件到远端主机、启动httpd服务。但是当第二个task中的配置文件发生了改变后再次执行playbook的话,会发现新的配置文件虽然会正确的复制到远端主机去,但是却没有重启httpd服务。因为Ansible在执行playbook时发现第三个任务与现在状态是一致的,就不会再次执行任务。为了解决这种问题,就需要使用ansible的handlers功能。handlers是用于监控一个任务的执行状态,如果一个tasks任务最后是changed状态则会触发handlers指定的操作。

 

如何配置handlers

Ansible中通过notify这个模块来实现handlers,将示例1修改后:

01 cat apache.yml
02 - hosts: webservers
03   remote_user: root
04   tasks:
05   - name: install apache
06     yum: name=httpd state=latest
07   - name: install configure file for httpd
08     copy: src=/root/conf/httpd.conf dest=/etc/httpd/conf/httpd.conf
09     notify:
10     - restart httpd  #通知restart httpd这个触发器
11     - check httpd  #可以定义多个触发器
12   - name: start httpd service
13     service: enabled=true name=httpd state=started
14   handlers:  #定义触发器,和tasks同级
15   - name: restart httpd  #触发器名字,被notify引用,两边要一致
16     service: name=httpd state=restart
17   - name: check httpd
18     shell: netstat -ntulp | grep 80

 

当httpd.conf的源文件发生修改后,只需重新执行playbook就会自动重启httpd服务,因为配置文件状态是changed而非ok。


标签:安装ansible
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
相关信息推荐
2020-10-17 14:47:27 关键词:Ansible安装
摘要:简介 ansible是新出现的自动化运维工具,基于python开发,集合了众多运维工具的有点,实现了批量系统部署、批量程序部署、批量运行命令等功能。ansible是基于模块工作的,本身没有批..
2020-10-16 15:09:53 关键词:安装ansible
摘要:在自动化运维的过程中,我们常常会通过命令行的形式使用Ansible模块,ansible自带了259各模块,我们可以通过一些命令来查看ansible中所含的模块,也可以查看单一模块的信息。下面,我..