playbook核心元素之handlers、notify

发布时间 2023-04-13 09:49:13作者: 往事已成昨天

playbook核心元素之handlers、notify

Cloud研习社 Cloud研习社 2023-04-13 07:31 发表于山东
图片图片

教程每周二、四、六更新

图片

 

我们上面的integration.yml 写的有点随意,现在把它改一下:

[root@m01 ansible]# vim httpconf.yml
---
- hosts: com
  tasks:
    - name: install httpd
      yum: name=httpd state=installed
    - name: config httpd
      copy:
        src: /root/ansible/httpd.conf
        dest: /etc/httpd/conf/httpd.conf
    - name: start httpd service
      systemd: state=started name=httpd

上面的剧本完成了企业中常见的操作,先安装软件包,然后修改配置文件,最后启动服务。如果完成第一遍操作以后,发现配置文件需要进一步优化,这个时候再次执行这个剧本,就会:

  • 先安装:但是已经安装过了,这一步不再执行。

  • 拷贝配置文件:配置文件被修改过,执行拷贝

  • 启动服务:服务已经启动了,无需在启动

我们发现,经过这三步以后,只修改了配置文件,但是没有进行服务的重启,所以这也就无法使修改的配置生效。此时就用到了handlers。我们可以上面的例子改成:

[root@m01 ansible]# cat httpconf.yml
---
- hosts: com
  tasks:
    - name: install httpd
      yum: name=httpd state=installed
    - name: config httpd
      copy:
        src: /root/ansible/httpd.conf
        dest: /etc/httpd/conf/httpd.conf
      notify: restart httpd
    - name: start httpd service
      systemd: state=started name=httpd

  handlers: 
    - name: restart httpd
      systemd:
        state: restarted
        name: httpd

handlers相当于处理装置,使用handlers关键字,指明哪些任务可以被'调用',之前说过,handlers是另一种任务列表,你可以把handlers理解成另外一种tasks,你可以理解成它们是'平级'的,所以,handlers与tasks是'对齐'的(缩进相同)。上例中的handlers中只有一个任务,这个任务的名称为"restart httpd",handlers中的任务需要被tasks中的任务调用,那么上例中,很明显,"restart httpd"被"config httpd"调用了。

同时,我们使用notify关键字'调用'handlers中的任务,或者说,通过notify关键字'通知'handlers中的任务,所以,综上所述,上例中的play表示,如果"config httpd"真正的修改了配置文件(实际的操作),那么则执行"restart httpd"任务,如果"config httpd"并没有进行任何实际的改动,则不执行"restart httpd" ,这就是handlers的作用,聪明如你肯定已经明白了,动手执行一下上述playbook试试吧【动手之前先准备好一个可用的/root/ansible/httpd.conf文件,否则会报错】。

handlers是另一种任务列表,所以handlers中可以有多个任务,被tasks中不同的任务notify,例如:

handlers:
  - name: restart httpd
    systemd:
      state=restarted
      name=httpd
  - name: create a file
    file:
      path=/data/newfile
      state=touch

我们也可以写多个notify,例如:

- hosts: com
  tasks:
    - name: install httpd
      yum: name=httpd state=installed
    - name: config httpd
      copy:
        src: /root/ansible/httpd.conf
        dest: /etc/httpd/conf/httpd.conf
      notify:
        - restart httpd
        - check service state

 


 

雷哥开通了抖音(云计算雷哥)和微信视频号,求关注!!!和大家一起学习 技术!

图片

推荐阅读

 

《一站式教程之集群架构》:

 

ansible模块-user模块

ansible模块 - lineinfile模块

ansible模块 - blockinfile模块

ansible剧本(playbook)- 快速入门

ansible剧本-YAML语法

ansible剧本-playbook核心元素

 

 

看完本文有收获?请分享给更多人

推荐关注「Cloud研习社」,带你从零开始掌握云计算技术!

Cloud研习社
为Linux云计算零基础同学服务,致力于打造一套完整的linux云计算教程。包括新手学习路线、linux、存储、集群架构以及Docker,K8S,DevOps等
180篇原创内容

图片


图片

 

收录于合集 #一站式教程
 221
上一篇ansible-playbook命令
阅读 31