原文链接:https://www.cpweb.top/826
参考文章:http://www.zsythink.net/archives/2624

  notify 和 handlers,译为通知和处理程序。它们两者关系是notify通知调用hanlers其下的任务执行。
  hanlders和tasks是同级,两者下面都定义了任务。但是handlers下的任务,在没有notify调用它下面任务的情况下,它是不会触发执行的。
  那么如何去调用,我们可以在tasks下面的某个任务中去定义notify调用handlers下的任务。一般在一个任务的结尾,和模块同级。
 可以说 notify 监控这个任务,如果任务是changed状态(即真正的进行实际操作,造成了实际的改变),那么notify会通知调用hanlers其下的某个任务执行。如果任务没有处在changed状态,即任务没造成实际改变,那么notify就不会去通知调用。
示例:

[root@m1 test]# vim notify.yml
- hosts: web1tasks:- name: configure nginx servertemplate:src: /root/nginx.confdest: /etc/nginx/nginx.confnotify: restart nginx serverhandlers:- name: restart nginx serversystemd:name: nginxstate: restarted

  需要注意的是默认情况下,在tasks下的所有task执行完毕后,才会执行各个handler,并不是执行完某个任务后,立即执行其对应的handler,如果你想要在执行完某些task以后立即执行对应的handler,则需要使用meta模块,示例如下:

[root@m1 test]# cat notify2.yml
- hosts: web1tasks:- name: test1shell: 'echo "1"'notify: touch test1- name: test2shell: 'echo "2"'notify: touch test2- meta: flush_handlers- name: test3shell: 'echo "3"'notify: touch test3handlers:- name: touch test1file:name: /root/test1state: touch- name: touch test2file:name: /root/test2state: touch- name: touch test3file:name: /root/test3state: touch

  上例中,meta任务的参数值为flush_handlers,"meta: flush_handlers"表示立即执行之前的task所对应handler。我们来看下运行结果:

[root@m1 test]# ansible-playbook notify2.yml PLAY [web1] *************************************************************************************TASK [Gathering Facts] **************************************************************************
ok: [172.16.1.7]TASK [test1] ************************************************************************************
changed: [172.16.1.7]TASK [test2] ************************************************************************************
changed: [172.16.1.7]RUNNING HANDLER [touch test1] *******************************************************************
changed: [172.16.1.7]RUNNING HANDLER [touch test2] *******************************************************************
changed: [172.16.1.7]TASK [test3] ************************************************************************************
changed: [172.16.1.7]RUNNING HANDLER [touch test3] *******************************************************************
changed: [172.16.1.7]PLAY RECAP **************************************************************************************
172.16.1.7                 : ok=7    changed=6    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

  假如我们想要在一个task中用一个notify调用多个handler。我们可能会想到定义多个handler使用相同的name,但是这样并不可行,因为当多个handler的name相同时,只有一个handler会被执行,即遇到第一个剩下同名的不会执行。所以,我们并不能用这种方式去实现。
  想要用一个notify调用多个handler,则需要借助另一个关键字,它就是 listen ,我们可以把 listen 理解成组名,我们可以把多个handler分到这 listen定义的组中,使用notify去调用这个组即可。示例如下:

[root@m1 test]# cat notify2.yml
- hosts: web1tasks:- name: test1shell: 'echo "1"'notify: grouphandlers:- name: touch test1listen: groupfile:name: /root/test1state: touch- name: touch test2listen: groupfile:name: /root/test2state: touch

运行结果如下:

[root@m1 test]# ansible-playbook notify2.yml PLAY [web1] *************************************************************************************TASK [Gathering Facts] **************************************************************************
ok: [172.16.1.7]TASK [test1] ************************************************************************************
changed: [172.16.1.7]RUNNING HANDLER [touch test1] *******************************************************************
changed: [172.16.1.7]RUNNING HANDLER [touch test2] *******************************************************************
changed: [172.16.1.7]PLAY RECAP **************************************************************************************
172.16.1.7                 : ok=4    changed=3    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

ansible notify和handlers相关推荐

  1. ansible 详解

    文章目录 一.ansible 简介 1.1 ansible 是什么? 1.2 ansible 特点 1.3 ansible 架构图 二.ansible 任务执行 2.1 ansible 任务执行模式 ...

  2. Ansible 入门指南 - ansible-playbook 命令

    上篇文章Ansible 入门指南 - 安装及 Ad-Hoc 命令使用介绍的额是 Ad-Hoc 命令方式,本文将介绍 Playbook 方式. Playbook 译为「剧本」,觉得还挺恰当的. play ...

  3. Ansible roles角色实战案例:httpd nginx memcached mysql

    实战案例 案例1:实现 httpd 角色 #创建角色相关的目录 mkdir -pv /data/ansible/roles/httpd/{tasks,handlers,files}#创建角色相关的文件 ...

  4. Ansible中的playbook详解

    首先简单说明一下playbook,playbook是什么呢? 根本上说playbook和shell脚本没有任何的区别,playbook就像shell一样,也是把一堆的命令组合起来,然后加入对应条件判断 ...

  5. Ansible无敌详细入门教程

    Ansible 是什么 ? ansible架构图 ansible特性  模块化:调用特定的模块,完成特定的任务: 基于Python语言研发,由Paramiko, PyYAML和Jinja2三个核心库实 ...

  6. ansible笔记汇总

    写作时间:2022年2月 系统:centos 7.9 ansible版本:2.9.27 推荐ansible使用方法 1.不要只用一组秘钥对,多主机按模块用几组ssh秘钥对(保障安全) 2.ssh秘钥对 ...

  7. 07 ansible 角色roles 整合多个剧本

     ansible程序roles --- 规范     剧本编写完问题:     1. 目录结构不够规范                2. 编写好的任务如何重复调用     3. 服务端配置文件改动, ...

  8. linux批量管理工具之ansible

    准备(前戏) 安装 yum install ansible 查看与ansible相关的文件信息 rpm -ql ansible|less 命令与选项 hosts基本语法 主机与组 [webserver ...

  9. 企业自动化运维ansible

    自动化运维工具ansible 运维自动化发展历程及技术应用 云计算工程师核心职能 Linux运维工程师职能划分 自动化动维应用场景 文件传输 命令执行 应用部署 配置管理 任务流编排 企业实际应用场景 ...

最新文章

  1. B - The Suspects POJ - 1611
  2. C语言逗号运算符和逗号表达式基础总结
  3. .NET6之MiniAPI(十六):数据保护
  4. 【BJOI 2019】奥术神杖
  5. c语言 指针_C 语言指针详解
  6. 怎么打开网络访问 计算机共享,电脑只要打开共享提示“无法启用共享访问”如何解决...
  7. 整理一个双向链表list.h
  8. semi-global matching 算法总结
  9. php输入数据不能为空,输入的数据模型标识(modelID)'的值不能为空或者空白字符串...
  10. MVC.Net:压缩/保存图片缩略图
  11. HP DL360 G7通过iLO部署系统
  12. easyui下拉框和增加以及商品的上架和下架
  13. 手机APP测试主要有哪些内容
  14. 中学生信息技术计算机软件教案,初中信息技术教学计划
  15. 计算机英语总结250字,英语作文250字
  16. notifier_call -----总结
  17. js兼容方法:事件添加|事件绑定|事件监听 addEvent
  18. 软考和 PMP考哪个比较好?各自的价值是什么?
  19. 掌握这15个可视化图表,小白也能轻松玩转数据分析
  20. SMBus协议与IIC协议区别

热门文章

  1. element $alert实现字符串换行
  2. 小程序仿微信支付数字键盘,微信支付数字键盘
  3. 文件共享之SMB/CIFS协议及Samba的使用
  4. 基友记 SDUT 2189
  5. Mac系统 用文本编辑html代码的方法
  6. oracle的nvl的使用,oracle的nvl函数的使用介绍
  7. python url解析_python——urlparse:解析url
  8. matlab某公寓发生,第五人格6.10每日一题:某公寓住户被杀,
  9. C#编程基础 SqlCommand和SqlDataAdapter的区别
  10. 如何使用nVidia Falcor渲染框架进行GPU加速的图片处理