playbook(判断)
- when关键字
绝大多数语言中,都使用if作为条件判断的关键字,而在ansible中,条件判断的关键字是when,我们可以使用when关键字为任务指定条件,条件成立,则执行任务,条件不成立,则不执行任务。
只输出大于1的数字
在ansible中,我们可以使用如下比较运算符
== :比较两个对象是否相等,相等为真
!= :比较两个对象是否不等,不等为真
> : 比较两个值的大小,如果左边的值大于右边的值,则为真
< :比较两个值的大小,如果左边的值小于右边的值,则为真
>= :比较两个值的大小,如果左边的值大于右边的值或左右相等,则为真
<= :比较两个值的大小, 如果左边的值小于右边的值或左右相等,则为真
- 判断远程主机版本
我们可以用一条命令查看远程主机的的版本信息
playbook写法一:
写法2
---
- hosts: testB
remote_user: root
tasks:
- debug:
msg: "System release is redhat7"
when:
- ansible_distribution == "RedHat"
- ansible_distribution_major_version == "7"
- 可用的逻辑运算符如下
- and :逻辑与,当左边与右边同时为真,则返回真
- or :逻辑或,当左边与右边有任意一个为真,则返回真
- not :取反,对一个操作体取反
- ( ) :组合,将一组操作体包装在一起,形成一个较大的操作体
多个判断信息组合
否定判断
- 通过返回值判断执行情况
什么是返回值?有点像shell中的echo $?
修改内容,让estimate5.yaml无法正常执行
修改内容,忽略错误,继续执行下面的task任务
此时我们可以看到当task2无法正常执行时,rc为127(不为0) - 通过返回值判断目录是否存在
- test判断:我们在shell中经常会用test来判断
在命令行中通过test -e 来判断目录文件是否存在,并且通过查看返回值来查看结果
在脚本中:如果符合判断条件返回true 不符合返回false
判断存在
判断不存在
写法二: 否定not可以写在前面
---
- hosts: testB
remote_user: root
gather_facts: no
vars:
testpath: /testdirllll
tasks:
- debug:
msg: "file not exist"
when: not testpath is exists
- 判断变量:
判断变量的一些tests
- defined : 判断变量是否已经定义,已经定义则返回真
- undefind : 判断变量是否已经定义,未定义则返回真
- none : 判断变量值是否为空,如果变量已经定义,但是变值为空,则返回真
- 判断执行结果
判断执行结果的一些tests:
- success或succeeded:通过任务的返回信息判断任务的执行状态,任务执行成功则返回真
- failure或failed:通过任务的返回信息判断任务的执行状态,任务执行失败则返回真
- change或changed:通过任务的返回信息判断任务的执行状态,任务执行状态为changed则返回真
- skip或skipped:通过任务的返回信息判断任务的执行状态,当任务没有满足条件,而被跳过执行时,则返回真
- 判断路径
- 判断路径的一些tests:
注:如下tests的判断均针对于ansible主机中的路径,与目标主机无关
- file : 判断路径是否是一个文件,如果路径是一个文件则返回真
- directory : 判断路径是否是一个目录,如果路径是一个目录则返回真
- link : 判断路径是否是一个软链接,如果路径是一个软链接则返回真
- mount: 判断路径是否是一个挂载点,如果路径是一个挂载点则返回真
- exists: 判断路径是否存在,如果路径存在则返回真!
- 判断字母包含的字符串是否是纯大/小写
判断字符串的一些tests:
- lower:判断包含字母的字符串中的字母是否是纯小写,字符串中的字母全部为小写则返回真
- upper:判断包含字母的字符串中的字母是否是纯大写,字符串中的字母全部为大写则返回真
- 判断数值是奇数/偶数/能否被某数整除
判断数值的一些tests
- even : 判断数值是否是偶数,是偶数则返回真
- odd : 判断数值是否是奇数,是奇数则返回真
- divisibleby(num) : 判断是否可以整除指定的数值,如果除以指定的值以后余数为0,则返回真
- version:可以用于对比两个版本号的大小,或者与指定的版本号进行对比,使用语法为version(‘版本号’, ‘比较操作符’)当使用version吋,支持多种风格的比较操作符,version支持的比较操作符如下:
- 大于: >, gt
- 大于等于: >=, ge
- 小于: <,lt
- 小于等于: <<=,le
- 等于: ==, =, eq
- 不等于: !=, <>, ne
判断version(对比版本号)
- 判断list的子集和父集关系
- subset:判断一个list是不是另一个list的子集,是另一个list的子集时返回真
- superset:判断一个list是不是另一个list的父集,是另一个list的父集时返回真
- 判断是否为字符串
注意:ansible认为:数字不是字符串,但如果给数字加上信号就是字符串了。字母是字符串
注意:字母的组合也是字符串,并且加不加引号都是字符串 - 判断是否为数值
注意:数字加上引号后就不被ansible认定为数值了,而小数也是数值