Ansible中的条件判断、handlers
1.有条件地运行任务
Ansible可使用conditionals在符合特定条件时执行任务或play。
所以我们可以利用条件来区分不同的受管主机,并根据它们所符合的条件来分配功能角色。Playbook变量、注册的变量和Ansible事实都可通过条件来进行测试。可以使用比较字符串、数字数据和布尔值的运算符。
以下场景说明了在Ansible中使用条件的几种情况:
1.可以在变量中定义硬限制(如min_memory)并将它与受管主机上的可用内存进行比较。
2.Ansible可以捕获并评估命令的输出,以确定某一任务在执行进一步操作前是否已经完成。例如,如果某一程序失败,则将路过批处理。
3.可以利用Ansible事实来确定受管主机网络配置,并决定要发送的模板文件(如,网络绑定或中继)。
4.可以评估CPU的数量,来确定如何正确调节某一Web服务器。
5.将注册的变量与预定义的变量进行比较,以确定服务是否已更改。例如,测试服务配置文件的MD5检验以和查看服务是否已更改。
2.条件任务语法
when语句用于有条件地运行任务。它取要测试的条件为值。如果条件满足,则运行任务。如果条件不满足,则跳过任务。
测试my_service变量是否具有值。
---
- hosts: allvars: my_ser: httpdtasks:- name: "{{ my_ser }} package is install" yum: name: "{{ my_ser }}"state: presentwhen: my_ser is defined
下表显示了在处理条件时可使用的一些运算:
操作 | 示例 |
---|---|
等于(值为字符串) | ansible_machine == “x86_64” |
等于(值为数字) | max_memory == 512 |
小于 | min_memory < 128 |
大于 | min_memory > 256 |
小于等于 | min_memory <= 256 |
大于等于 | min_memory >= 512 |
变量存在 | min_memory is defined |
变量不存在 | min_memory is not defined |
布尔变量是True。1、True或yes的求值为True | memory_available |
布尔变量是False。0、False或no的求值为False | not memory_available |
第一个变量的值存在,作为第二个变量的列表中的值 | ansible_distribution in supported_distros |
如果ansible_distribution的值在sup_dir列表中,则条件通过且任务运行。
---
- hosts: allvars:sup_dir:- RedHat- CentOStasks:- name: asdadyum:name: httpdstate: presentwhen: ansible_facts['distribution'] in sup_dir[root@ansible jay]# ansible-playbook playbook.yml PLAY [all] ***********************************************************************TASK [Gathering Facts] ***********************************************************
ok: [192.168.10.129]TASK [asdad] *********************************************************************
changed: [192.168.10.129]PLAY RECAP ***********************************************************************
192.168.10.129 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
3.多个条件一起测试
一个when语句可用于评估多个条件。使用and和or关键字组合条件,并使用括号分组条件。
1.如果任一条件为真时满足条件语句,则应当使用or语句。
when: ansible_distribution == "Redhat" or ansible_distribution == "CentOS"
2.使用and运算时,两个条件都必须为真,才能满足整个条件语句。
when: ansible_distribution_version == "7.3" or ansible_distribution == "CentOS"
3.when关键字还支持使用列表来描述条件列表。向when关键字提供列表时,将使用and运算组合所有条件。
when:- ansible_distribution_version == "7.5"- ansible_distribution == "CentOS"
4.通过使用括号分组条件,可以表达更复杂的条件语句。
---
- hosts: alltasks:- name: asdadyum:name: httpdstate: absentwhen: >ansible_distribution == "CentOS"oransible_distribution_version == "7.5"
4.组合循环和有条件任务
循环和条件可以组合使用。
---
- hosts: alltasks:- name: asdadyum:name: httpdstate: presentloop: "{{ ansible_facts['mounts'] }}"when: - item.mount == "/"- item.size_available > 30000000
5.ansible处理程序
Ansible模块设计为具有幂等性。这表示,在正确编写的playbook中,playbook及其任务可以运行多次而不会改变受管主机,除非需要进行更改使受管主机进入所需的状态。
但在时候,在任务确实更改系统时,可能需要运行进一步的任务。例如,更改服务配置文件时可能要求重新加载该服务以便使其更改的配置生效。处理程序是响应由其他任务触发的通知的任务。
---
- hosts: alltasks:- name: 2123yum:name: httpdstate: present- name: 2131template:src: files/1dest: /etc/1notify:- restart apache- name: dadservice:name: httpdstate: startedhandlers:- name: restart apacheservice:name: httpdstate: restarted[root@ansible jay]# ansible-playbook playbook.yml PLAY [all] ***********************************************************************TASK [Gathering Facts] ***********************************************************
ok: [192.168.10.129]TASK [yum] ***********************************************************************
ok: [192.168.10.129]TASK [template] ******************************************************************
changed: [192.168.10.129]TASK [dad] ***********************************************************************
changed: [192.168.10.129]RUNNING HANDLER [restart apache] *************************************************
changed: [192.168.10.129]PLAY RECAP ***********************************************************************
192.168.10.129 : ok=5 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Ansible中的条件判断、handlers相关推荐
- shell python比较_shell中的条件判断以及与python中的对比
shell中比如比较字符串.判断文件是否存在及是否可读等,通常用"[]"来表示条件测试. 注意:这里的空格很重要.要确保方括号的空格. if ....; then ...
- mysql 查询后根据值的不同进行判断与修改,SQL中的条件判断语句(case when zhen)用法
需求: mysql 查询后根据值的不同进行判断与修改 语法结构: SQL中的条件判断语句(case when zhen)用法 SELECT A.品号,属性, CASE ...
- linux在命令行if,Linux命令之if - Bash中的条件判断语句
用途说明 Shell中的条件判断语句,与其他编程语言类似. 如果需要知道有哪些条件判断方式,通过man test就可以得到帮助. 常用格式 格式一 if 条件; then 语句 fi 格式二 if 条 ...
- Python中if条件判断语句怎么用?
俗话说"不积跬步无以至千里".学习了Python的基本语法后,接下来我们学习Python常的if条件判断语句. if语句是最简单的条件判断语句,它可以控制程序的执行流程,其使用格式 ...
- linux中shell条件判断if中的-a到-z的意思
2019独角兽企业重金招聘Python工程师标准>>> 下面我们一起来看一篇关于shell条件判断if中的-a到-z的意思,有需要了解的朋友不防进入参考参考. [ -a FILE ] ...
- .net一个函数要用另一个函数的值_【195期】MySQL中的条件判断函数 CASE WHEN、IF、IFNULL你会用吗?...
点击上方"Java面试题精选",关注公众号 面试刷图,查缺补漏 >>号外:往期面试题,10篇为一个单位归置到本公众号菜单栏->面试题,有需要的欢迎翻阅 阶段汇总集 ...
- 中if判断中文_当Excel表格中的条件判断超过8个,用IF函数不容易实现怎么办?...
点击上方蓝字 免费关注 置顶公众号或设为星标,否则可能收不到文章 个人微信号 | (ID:LiRuiExcel520) 微信服务号 | 跟李锐学Excel(ID:LiRuiExcel) 微信公众号 ...
- Python中if条件判断语句的用法!
俗话说"不积跬步无以至千里".学习了Python的基本语法后,接下来我们学习Python常的if条件判断语句. if语句是最简单的条件判断语句,它可以控制程序的执行流程,其使用格式 ...
- shell中的条件判断和比较
1 shell 的$! ,$?, $$,$@ $n $1 the first parameter,$2 the second... $# The number of co ...
最新文章
- 为git服务器配置gitosis管理权限
- Travelling (三进制+状压dp)
- SAP成都研究院C4C光明左使:SAP Cloud for Customer 使用SAP UI5的独特之处
- rmmod 提示 No such file or directory
- TranslateAnimation类:位置变化动画类
- C#/winform 腾讯QQ注册
- VSCode中使用Git忽略提交代码设置
- Spring Cloud分布式微服务系统中利用redssion实现分布式锁
- ckeditor+ckfinder使用
- 诡异的问题“该字符串未被识别为有效的 DateTime”
- php 开源 博客,推荐常用PHP开源博客TOP10
- Android之NDK开发入门
- 设计模式的艺术 结构性模式之组合模式
- pdf分解成多个pdf?PDF分割怎么做
- 1、操作系统的定义和作用?
- 基于routeros的ADSL带宽叠加
- 国企安逸?我笑了……
- 用卷积神经网络(CNN)识别文字
- mysql统计姓名为小明_MySQL练习2
- 整数拆分 python_LeetCode 343. 整数拆分 | Python
热门文章
- Latex调整表格行距
- 关于“Error: Net gdfx_temp0, which fans out to ***:inst4|BIN, cannot be assigned more than”错误
- 基岩版刷铁傀儡机制和Java_我的世界:Java版1.14获得铁傀儡的四种方式,第三种千万别忘记...
- ajax瀑布流插件,jQuery瀑布流无限加载插件:jquery.falless.js
- 基于逻辑回归的鸢尾花分类预测
- java 调excel 的宏_Microsoft Excel宏来运行Java程序
- 课程表APP开发市场现状分析
- 一起talk C栗子吧(第一百八十七回:C语言实例--反余弦函数 )
- 代码测试,调试与优化小结
- 各种经典英美剧中英字幕word文档分享