ansible when is 二: 判断数字字符、奇偶数、整除、大写、小写,版本号比较
1、数字与字符常用的比较
even : 判断数值是否是偶数,是偶数则返回真;
odd :判断数值是否是奇数,是奇数则返回真;
divisibleby(num) :判断是否可以整除指定的数值,如果除以指定的值以后余数为0,则返回真;
number: 是否为数字;
string: 是否为字符;
lower: 是否为小写;
upper: 是否为大写;
如:
---
- hosts: hostA
tasks:
- name: "是否为数字"
tags: data_string
debug:
msg: "1 is number"
when: 1 is number
- name: "是否为字符"
tags: data_string
vars:
var1: abc
debug:
msg: "var1 is string"
when: var1 is string
- name: "是否为全大写"
tags: data_string
debug:
msg: "'Abc is not upper string'"
when: '"Abc" is not upper'
- name: "是否为全小写"
tags: data_string
debug:
msg: "abc is lower string"
when: '"abc" is lower'
- name: "是否为奇数"
tags: data_string
debug:
msg: "13 是奇数"
when: 13 is odd
- name: "是否为偶数"
tags: data_string
debug:
msg: "44 是偶数"
when: 44 is even
- name: "是否可以被指定数整除"
tags: data_string
debug:
msg: "33 可以被11 整除"
when: 33 is divisibleby(11)
2、版本号比较
version: 版本号的比较
可以用于对比两个版本号的大小,或者与指定的版本号进行对比,使用语法为 version('版本号', '比较操作符'),如:2.4 is version('2.5','gt');
版本比较的符号写法:
大于 :> 或 gt
大于等于:>= 或 ge
小于 :< 或 lt
小于等于:<= 或 le
等于 := 或 eq
如:
---
- hosts: hostA
tasks:
- name: "获取ansible 软件版本"
shell: ansible --version | head -n 1 | awk -F " " '{print $2}'
register: result
tags: vers
- name: "版本号比较"
debug:
msg: "ansible 版本号:{{result.stdout}}"
when: result.stdout is version("2.9.6","eq") and result.stdout is version("2.9.4","gt")
tags: vers
测试结果:
root@master:/home/user1# ansible-playbook -i ansible_host test_when.yml -t vers
PLAY [hostA] **********************************************************************************************************************
TASK [Gathering Facts] ************************************************************************************************************
ok: [192.168.108.22]
TASK [获取ansible 软件版本] *******************************************************************************************************
changed: [192.168.108.22]
TASK [版本号比较] *****************************************************************************************************************
ok: [192.168.108.22] => {}
MSG:
ansible 版本号:2.9.6
PLAY RECAP ************************************************************************************************************************
192.168.108.22 : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0