《Ansible语法篇:剧本对象关键字之when》

一、前言

在ansible-playbook中,也可以像其他编程语言一样进行条件判断、循环等流程控制。除此之外,还可以控制task的执行结果。

在ansible中,可以通过when语句来执行条件判断。只有符合条件,才会执行对应的task。when语句和task对齐,在when语句中,变量不需要使用{{ }}括起来。

条件语句在Ansible中的使用场景:

1、在目标主机上定义了一个硬限制,比如:目标主机的发行版本必须是Centos,才能执行该task;
2、捕获一个命令的输出,根据命令输出结果的不同以触发不同的task;
3、根据不同目标主机的变量,以定义不同的task;
4、根据目标机的cpu或内存的大小,对相关应用性能进行调优;
5、用于判断某个服务的配置文件是否发生变更,以确定是否需要重启服务等。


二、常用判断运算符

2.1、比较运算符

==:比较两个对象是否相等,相等则返回真。可用于比较字符串和数字
!=:比较两个对象是否不等,不等则为真
>:比较两个对象的大小,左边的值大于右边的值,则为真
<:比较两个对象的大小,左边的值小于右边的值,则为真
=:比较两个对象的大小,左边的值大于等于右边的值,则为真
<=:比较两个对象的大小,左边的值小于等于右边的值,则为真


2.2、逻辑运算符

and:逻辑与,当左边和右边两个表达式同时为真,则返回真
or:逻辑或,当左右和右边两个表达式任意一个为真,则返回真
not:逻辑否,对表达式取反
():当一组表达式组合在一起,形成一个更大的表达式,组合内的所有表达式都是逻辑与的关系


三、常用判断类型

3.1、判断变量

defined :判断变量是否已经定义,已经定义则返回真
undefind :判断变量是否已经定义,未定义则返回真
none :判断变量值是否为空,如果变量已经定义,但是变量值为空,则返回真

示例一:

service变量定义,但是没有赋值,如下图所示:
在这里插入图片描述

判断service变量是否为空,如下图所示:
在这里插入图片描述

执行结果,如下图所示:
在这里插入图片描述


3.2、判断路径

file : 判断路径是否是一个文件,如果路径是一个文件则返回真
directory :判断路径是否是一个目录,如果路径是一个目录则返回真
link :判断路径是否是一个软链接,如果路径是一个软链接则返回真
mount:判断路径是否是一个挂载点,如果路径是一个挂载点则返回真
exists:判断路径是否存在,如果路径存在则返回真

示例一:

test变量定义,如下图所示:
在这里插入图片描述

判断/opt/pkgs/readme.txt路径是否存在,如下图所示:
在这里插入图片描述

执行结果,如下图所示:
在这里插入图片描述


3.3、判断字符串

lower:判断包含字母的字符串中的字母是否是纯小写,字符串中的字母全部为小写则返回真
upper:判断包含字母的字符串中的字母是否是纯大写,字符串中的字母全部为大写则返回真

示例一:

test1和test2变量定义,如下图所示:
在这里插入图片描述

判断变量test1变量的值是否为纯小写字母,判断test2变量的值是否为纯大写字母,如下图所示:
在这里插入图片描述

执行结果,如下图所示:
在这里插入图片描述


3.4、判断整除

even :判断数值是否是偶数,是偶数则返回真
odd :判断数值是否是奇数,是奇数则返回真
divisibleby(num) :判断是否可以整除指定的数值,如果除以指定的值以后余数为0,则返回真

示例一:

num1、num2、num3变量定义,如下图所示:
在这里插入图片描述

判断变量num1的值是否为偶数,判断变量num2的值是否为奇数,判断num3变量的值除以8,余数是否为0,如下图所示:
在这里插入图片描述

执行结果,如下图所示:
在这里插入图片描述


3.5、判断执行结果

success或succeeded:通过任务的返回信息判断任务的执行状态,任务执行成功则返回真
failure或failed:通过任务的返回信息判断任务的执行状态,任务执行失败则返回真
change或changed:通过任务的返回信息判断任务的执行状态,任务执行状态为changed则返回真
skip或skipped:通过任务的返回信息判断任务的执行状态,当任务没有满足条件,而被跳过执行时,则返回真

示例一:

service、mysql变量定义,如下图所示:
在这里插入图片描述

判断mysql服务端口是否正常,如下图所示:
在这里插入图片描述

执行结果,如下图所示:
在这里插入图片描述


3.6、其它判断

示例一:

判断mysql服务端口是否正常,如下图所示:
在这里插入图片描述

执行结果,如下图所示:
在这里插入图片描述


示例二:

ver1和ver2变量,如下图所示:
在这里插入图片描述

判断ver1变量的值是否大于ver2变量的值,如下图所示:
在这里插入图片描述

执行结果,如下图所示:
在这里插入图片描述


四、多条件判断

示例一:

# 逻辑与
when: ansible_disibution == "CentOS" and ansible_disibution_major_vsion == "7"

# 逻辑或
when: ansible_disibution == "RedHat" or ansible_disibution == "Fedora"

when:
  - ansible_disibution_vsion == "7.9"
  - ansible_kernel == "3.10.0-327.el7.x86_64"

# 组合使用
when: => 
  ( ansible_disibution == "RedHat" and ansible_disibution_major_vsion == "7" )
  or
  ( ansible_disibution == "Fedora" and ansible_disibution_major_vsion == "28")

总结:整理不易,如果对你有帮助,可否点赞关注一下?

更多详细内容请参考:《Linux运维篇:Linux系统运维指南》

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东城绝神

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值