九、条件控制与循环
9.1 条件判断
有的时候在执行任务的时候需要对不同的情况做判断,以此来决定是否执行某些任务。什么情况下需要使用条件判断?
- 判断主机的硬件资源,如CPU、内存、磁盘空间是否满足要求,如满足再执行task
- 捕获一个命令的输出,根据命令输出结果的不同触发不同的task
- 根据不同目标主机的facts,定义不同的task
- 判断task的执行状态,以此来决定是否执行后面的task
9.1.1 when基本使用
在ansible中,条件判断的关键字就是when,when在task中,跟模块名同级别,下面是一个简单的例子,判断目标主机的总内存是否大于1024M和2048M。
- name: test var
hosts: node1
tasks:
- name: print total memory
debug:
msg: "tocal memory is {{ ansible_memtotal_mb }}"
- name: check memory is gt 1024M
debug:
msg: "memory > 1024M"
when: ansible_memtotal_mb > 1024
- name: check memory is gt 2048M
debug:
msg: "memory > 2048M"
when: ansible_memtotal_mb > 2048
注意:在when关键字中,调用变量不需要加"{{}}"
9.1.2 比较运算符
运算符 | 描述 |
---|---|
== | 等于 |
!= | 不等于 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
示例
- when: inventory_hostname == "node2"
- when: ansible_memtotal_mb >= 4096
9.1.3 逻辑运算符
运算符 | 描述 |
---|---|
and | 逻辑与,左边和右边两个表达式都为真,则返回真 |
or | 逻辑与,左边或右边其中一个表达式为真,则返回真 |
not | 逻辑否,表达式取反 |
() | 将一组表达式组合在一起,组合内的所有表达式都是逻辑与的关系 |
示例
- when: ansible_distribution == "RedHat" or ansible_distribution == "Fedora"
- when: ansible_distribution