九、条件控制与循环

发布时间 2023-12-14 09:38:28作者: 相信童话

九、条件控制与循环

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

image-20230928154253275

注意:在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