目录
- when关键字
- 1.基本使用
- 2.比较运算符
- 3.逻辑运算符
- 4.判断变量
when关键字
1.基本使用
当ansible_os_family是redhat的时候,执行安装vim,不是的话跳过
---
- hosts: web
tasks:
- name: Install VIM via yum
yum:
name: vim-enhanced
state: installed
when: ansible_os_family =="RedHat"
- name: Install VIM via apt
apt:
name: vim
state: installed
when: ansible_os_family =="Debian"
2.比较运算符
在上面的的实例中,我们使用了"=="的比骄傲运算符,ansible中,还支持如下比较运算符
==:比较两个对象是否相等,相等则返回真。可用于比较字符串和数字
!=:比较两个对象是否不等,不等则为真。
:比较两个对象的大小,左边的值大于右边的值,则为真
<:比较两个对象的大小,左边的值小于右边的值,则为真
=:比较两个对象的大小,左边的值大于等于右边的值,则为真
<=:比较两个对象的大小,左边的值小于等于右边的值,则为真
示例
when: ansbible_machine == "x86_64"
when: max_memory <= 512
3.逻辑运算符
在Ansible中,还支持逻辑运算符
and:逻辑与,当左边和右边两个表达式同时为真,则返回真
or:逻辑或,当左右和右边两个表达式任意一个为真,则返回真
not:逻辑否,对表达式取反
():当一组表达式组合在一起,形成一个更大的表达式,组合内的所有表达式都是逻辑与的关系
示例
# 逻辑或
when: ansible_distribution == "RedHat" or ansible_distribution == "Fedora"
# 逻辑与
when: ansible_distribution_version == "7.5" and ansible_kernel == "3.10.0-327.el7.x86_64"
when:
- ansible_distribution_version == "7.5"
- ansible_kernel == "3.10.0-327.el7.x86_64"
#判断register注册变量的返回结果
---
- hosts: web
tasks:
- name: get postfix server status
shell: systemctl is-active postfix
register: result
- name: print result
debug: msg="{{result}}"
- name: restart apache httpd based on postfix status
service:
name: httpd
state: restarted
when: result.rc == 0
4.判断变量
defined:判断变量是否已定义,已定义则返回真
undefined:判断变量是否未定义,未定义则返回真
none:判断变量的值是否为空,如果变量已定义且值为空,则返回真
- hosts: test
gather_facts: no
vars:
testvar: "test"
testvar1:
tasks:
- debug:
msg: "testvar is defined"
when: testvar is defined
- debug:
msg: "testvar2 is undefined"
when: testvar2 is undefined
- debug:
msg: "testvar1 is none"
when: testvar1 is none