一、Ansible配置处理程序

1、处理程序

1️⃣:处理程序是响应由其他任务触发的通知的任务

2️⃣:仅当任务在受管主机上更改了某些内容时,任务才通知其处理程序

3️⃣:每个处理程序具有全局唯一的名称,在playbook中任务块的末尾触发

4️⃣:如果没有任务通过名称通知处理程序,处理程序就不会运行

5️⃣:如果一个或多个任务通知处理程序,处理程序就会在play中的所有其他任务完成后运行一次

6️⃣:因为处理程序就是任务,所以可以在处理程序中使用他们将用于任何其他任务的模块;通常而言,处理程序被用于重新引导主机和重启服务

2、实施处理程序

1️⃣:处理程序可视为非活动任务,只有在使用notify语句显式调用时才会被触发

  • 演示实例:

     //查看playbook
    [root@localhost project]# cat playbook.yaml
    ---
    - hosts: all
    tasks:
    - name: install httpd
    yum:
    name: httpd
    state: present
    notify: //notify关键字指定需要触发的处理程序
    - start httpd //要运行处理程序的名称 handlers: //handlers关键字表示处理程序任务列表的开头(与tasks同级别)
    - name: start httpd //被触发的处理程序(任务)的名称;注意:必须与notify指定的处理程序的名称相同
    service:
    name: httpd
    state: started //执行play
    [root@localhost project]# ansible-playbook playbook.yaml PLAY [all] **************************************************************************************************************************************************************** TASK [Gathering Facts] ****************************************************************************************************************************************************
    ok: [client.example.com] TASK [install httpd] ******************************************************************************************************************************************************
    changed: [client.example.com] RUNNING HANDLER [start httpd] *********************************************************************************************************************************************
    changed: [client.example.com] PLAY RECAP ****************************************************************************************************************************************************************
    client.example.com : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

2️⃣:一个任务可以在其notify部分中调用多个处理程序。Ansiblenotify语句视为数组,并且迭代处理程序名称

  • 演示实例:

     //查看playbook
    [root@localhost project]# cat playbook.yaml
    ---
    - hosts: all
    tasks:
    - name: install httpd
    yum:
    name: httpd
    state: present
    notify:
    - start httpd
    - install mariadb-server handlers:
    - name: start httpd
    service:
    name: httpd
    state: started - name: install mariadb-server
    yum:
    name: mariadb-server
    state: installed //执行play
    [root@localhost project]# ansible-playbook playbook.yaml PLAY [all] **************************************************************************************************************************************************************** TASK [Gathering Facts] ****************************************************************************************************************************************************
    ok: [client.example.com] TASK [install httpd] ******************************************************************************************************************************************************
    changed: [client.example.com] RUNNING HANDLER [start httpd] *********************************************************************************************************************************************
    changed: [client.example.com] RUNNING HANDLER [install mariadb-server] **********************************************************************************************************************************
    changed: [client.example.com] PLAY RECAP ****************************************************************************************************************************************************************
    client.example.com : ok=4 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

二、处理程序的好处

1、处理程序重要事项

1️⃣:处理程序始终按照playhandlers部分指定的顺序运行,它们不按在任务中由notify语句列出的顺序运行,或按任务通知它们的顺序运行

2️⃣:处理程序通常在相关play中的所有其他任务完成后运行,playbooktasks部分中某一任务调用的处理程序,将等到tasks下的所有任务都已处理后才会运行

3️⃣:处理程序名称存在于各play命名空间中,如果两个处理程序被错误地给予相同的名称,则仅会运行一个

4️⃣:即使有多个任务通知处理程序,该处理程序依然仅运行一次,如果没有任务通知处理程序,它就不会运行

5️⃣:如果包含notify语句的任务没有报告changed结果(例如,软件包已安装并且任务报告ok),则处理程序不会获得通知,处理程序将被跳过,直到有其他任务通知它。只有相关任务报告了changed状态,Ansible才会通知处理程序

2、处理程序用于在任务对受管主机进行更改时执行额外操作,它们不应用作正常任务的替代

最新文章

  1. C 标准库系列之locale.h
  2. 【Java EE 学习 31】【JavaScript基础增强】【Ajax基础】【Json基础】
  3. 今天遇到的点击添加按钮button_click代码段无法执行的问题
  4. ASP.NET MVC 伪静态的实现
  5. 元祖签约K2 BPM,引领绿色健康食品!
  6. centos时间同步方法
  7. SQL Server 中WITH (NOLOCK)
  8. bootstrap学习--什么是bootstrap
  9. Struts2框架学习(三) 数据处理
  10. Klass与Oop
  11. 调用本地摄像头拍照(H5和画布)
  12. Android初级教程:对文件和字符串进行MD5加密工具类
  13. Eureka源码探索(一)-客户端服务端的启动和负载均衡
  14. [转]Rabbitmq的使用及Web监控工具使用
  15. Hibernate学习笔记:注解@OneToMany和@ManyToOne的单独使用问题 不成对使用
  16. October 12th 2017 Week 41st Thursday
  17. CentOS 6.4 安装 rabbitmq(3.6.15)
  18. A implementaion for 2D blue noise
  19. centos7 docker安装和使用_入门教程
  20. 基于Java spring框架的微信企业号开发中关于js-sdk的配置

热门文章

  1. OO电梯系列优化分享
  2. hadoop 简单安装部署
  3. (一)Struts2框架概述
  4. 生产环境中的redis是怎么部署的?
  5. 黑马架构师v2.5.1 (codeUtil)使用注意事项
  6. day-4 xctf-pwn CGfsb
  7. Linux执行.sh文件,提示No such file or directory的问题
  8. 22. VUE 插槽-详解
  9. Nuget-自定义模板的创建与使用
  10. Java学习IO流第一天