ansible notify和handlers
原文链接: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相关推荐
- ansible 详解
文章目录 一.ansible 简介 1.1 ansible 是什么? 1.2 ansible 特点 1.3 ansible 架构图 二.ansible 任务执行 2.1 ansible 任务执行模式 ...
- Ansible 入门指南 - ansible-playbook 命令
上篇文章Ansible 入门指南 - 安装及 Ad-Hoc 命令使用介绍的额是 Ad-Hoc 命令方式,本文将介绍 Playbook 方式. Playbook 译为「剧本」,觉得还挺恰当的. play ...
- Ansible roles角色实战案例:httpd nginx memcached mysql
实战案例 案例1:实现 httpd 角色 #创建角色相关的目录 mkdir -pv /data/ansible/roles/httpd/{tasks,handlers,files}#创建角色相关的文件 ...
- Ansible中的playbook详解
首先简单说明一下playbook,playbook是什么呢? 根本上说playbook和shell脚本没有任何的区别,playbook就像shell一样,也是把一堆的命令组合起来,然后加入对应条件判断 ...
- Ansible无敌详细入门教程
Ansible 是什么 ? ansible架构图 ansible特性 模块化:调用特定的模块,完成特定的任务: 基于Python语言研发,由Paramiko, PyYAML和Jinja2三个核心库实 ...
- ansible笔记汇总
写作时间:2022年2月 系统:centos 7.9 ansible版本:2.9.27 推荐ansible使用方法 1.不要只用一组秘钥对,多主机按模块用几组ssh秘钥对(保障安全) 2.ssh秘钥对 ...
- 07 ansible 角色roles 整合多个剧本
ansible程序roles --- 规范 剧本编写完问题: 1. 目录结构不够规范 2. 编写好的任务如何重复调用 3. 服务端配置文件改动, ...
- linux批量管理工具之ansible
准备(前戏) 安装 yum install ansible 查看与ansible相关的文件信息 rpm -ql ansible|less 命令与选项 hosts基本语法 主机与组 [webserver ...
- 企业自动化运维ansible
自动化运维工具ansible 运维自动化发展历程及技术应用 云计算工程师核心职能 Linux运维工程师职能划分 自动化动维应用场景 文件传输 命令执行 应用部署 配置管理 任务流编排 企业实际应用场景 ...
最新文章
- B - The Suspects POJ - 1611
- C语言逗号运算符和逗号表达式基础总结
- .NET6之MiniAPI(十六):数据保护
- 【BJOI 2019】奥术神杖
- c语言 指针_C 语言指针详解
- 怎么打开网络访问 计算机共享,电脑只要打开共享提示“无法启用共享访问”如何解决...
- 整理一个双向链表list.h
- semi-global matching 算法总结
- php输入数据不能为空,输入的数据模型标识(modelID)'的值不能为空或者空白字符串...
- MVC.Net:压缩/保存图片缩略图
- HP DL360 G7通过iLO部署系统
- easyui下拉框和增加以及商品的上架和下架
- 手机APP测试主要有哪些内容
- 中学生信息技术计算机软件教案,初中信息技术教学计划
- 计算机英语总结250字,英语作文250字
- notifier_call -----总结
- js兼容方法:事件添加|事件绑定|事件监听 addEvent
- 软考和 PMP考哪个比较好?各自的价值是什么?
- 掌握这15个可视化图表,小白也能轻松玩转数据分析
- SMBus协议与IIC协议区别
热门文章
- element $alert实现字符串换行
- 小程序仿微信支付数字键盘,微信支付数字键盘
- 文件共享之SMB/CIFS协议及Samba的使用
- 基友记 SDUT 2189
- Mac系统 用文本编辑html代码的方法
- oracle的nvl的使用,oracle的nvl函数的使用介绍
- python url解析_python——urlparse:解析url
- matlab某公寓发生,第五人格6.10每日一题:某公寓住户被杀,
- C#编程基础 SqlCommand和SqlDataAdapter的区别
- 如何使用nVidia Falcor渲染框架进行GPU加速的图片处理