--- -hosts:all vars: str1:"abc" str2:"ABC" tasks: -debug: msg:"This string is all lowercase" when:str1islower -debug: msg:"This string is all uppercase" when:str2isupper
--- -hosts:all gather_facts:no vars: defined_var:"test" none_var: tasks: -debug: msg:"Variable is defined" when:defined_varisdefined -debug: msg:"Variable is undefined" when:undefined_varisundefined -debug: msg:"The variable is defined, but there is no value" when:none_varisnone
例 2:判断给定变量是一个字符串还是数字。
1 2 3 4 5 6 7 8 9 10 11 12
--- -hosts:all gather_facts:no vars: testvar:"a" tasks: -debug: msg:"{{testvar}} is a number" when:testvarisnumber -debug: msg:"{{testvar}} is a string" when:testvarisstring
--- -hosts:localhost gather_facts:no vars: num1:2 num2:3 num3:8 tasks: -debug: msg:"{{ num1 }} is an even number" when:num1iseven -debug: msg:"{{ num2 }} is an odd number" when:num2isodd -debug: msg:"{{ num3 }} can be divided exactly by 4" when:num3isdivisibleby(4)
列表父子集判断
ansible 可使用如下关键字对列表进行父子集判断:
父子集判断
说明
subset
判断一个 list 是不是另一个 list 的子集,是另一个 list 的子集时返回真
superset
判断一个 list 是不是另一个 list 的父集,是另一个 list 的父集时返回真
看如下示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
--- -hosts:localhost gather_facts:no vars: a: -2 -5 b: [1,2,3,4,5] tasks: -debug: msg:"A is a subset of B" when:aissubset(b) -debug: msg:"B is the parent set of A" when:bissuperset(a)
版本判断
在 ansible 中 version 关键字可以用于对比两个版本号的大小,或者与指定的版本号进行对比,使用语法为 version(‘版本号’, ‘比较操作符’)。
version 支持的比较操作符如下:
比较操作符
符号表示
字母表示
大于
>
gt
大于等于
>=
ge
小于
<
lt
小于等于
<=
le
等于
== 或 =
eq
不等于
!= 或 <>
ne
看如下示例:
1 2 3 4 5 6 7 8 9 10 11 12
--- -hosts:localhost vars: ver1:18.04 ver2:22.04 tasks: -debug: msg:"This message can be displayed when the ver2 is greater than ver1" when:ver2isversion(ver1,">") -debug: msg:"system version {{ansible_distribution_version}} greater than 18.04" when:ansible_distribution_versionisversion("18.04","gt")
--- -hosts:localhost gather_facts:no tasks: -debug: msg:"I execute normally" -shell:"echo 'This is a string for testing error'" register:return_value failed_when:' "error" in return_value.stdout' -debug: msg:"I never execute,Because the playbook has stopped"