Ansible中的条件任务

Ansible可以使用条件语句在符合条件的时候执行任务或play。以下是一些使用条件的场景例子。

示例条件

操作示例
等于(值为字符串)ansible_machine == "x86_64"
等于(值为数字)max_memory == 512
小于min_memory < 128
大于min_memory > 256
小于等于min_memory <= 256
大于等于min_memory >= 512
不等于min_memory != 512
变量存在min_memory is defined
变量不存在min_memory is not defined
布尔变量为truememory_available
布尔变量为falsenot memory_available
第一个变量的值存在于第二个变量的列表中ansible_distribution in supported_distros

条件操作示例

操作条件和对应示例:

  1. 等于(值为字符串)

    - name: 检查机器类型
      debug:
        msg: "机器类型为 x86_64"
      when: ansible_machine == "x86_64"

    解释:当变量 ansible_machine 的值等于 "x86_64" 时,执行任务。

  2. 等于(值为数字)

    - name: 检查最大内存
      debug:
        msg: "最大内存为 512"
      when: max_memory == 512

    解释:当变量 max_memory 的值等于 512 时,执行任务。

  3. 小于

    - name: 检查最小内存
      debug:
        msg: "最小内存小于 128"
      when: min_memory < 128

    解释:当变量 min_memory 的值小于 128 时,执行任务。

  4. 大于

    - name: 检查最小内存
      debug:
        msg: "最小内存大于 256"
      when: min_memory > 256

    解释:当变量 min_memory 的值大于 256 时,执行任务。

  5. 小于等于

    - name: 检查最小内存
      debug:
        msg: "最小内存小于等于 256"
      when: min_memory <= 256

    解释:当变量 min_memory 的值小于等于 256 时,执行任务。

  6. 大于等于

    - name: 检查最小内存
      debug:
        msg: "最小内存大于等于 512"
      when: min_memory >= 512

    解释:当变量 min_memory 的值大于等于 512 时,执行任务。

  7. 不等于

    - name: 检查最小内存
      debug:
        msg: "最小内存不等于 512"
      when: min_memory != 512

    解释:当变量 min_memory 的值不等于 512 时,执行任务。

  8. 变量存在

    - name: 检查变量是否存在
      debug:
        msg: "变量 min_memory 存在"
      when: min_memory is defined

    解释:当变量 min_memory 已定义时,执行任务。

  9. 变量不存在

    - name: 检查变量是否存在
      debug:
        msg: "变量 min_memory 不存在"
      when: min_memory is not defined

    解释:当变量 min_memory 未定义时,执行任务。

  10. 布尔变量为true

    - name: 检查内存是否可用
      debug:
        msg: "内存可用"
      when: memory_available

    解释:当布尔变量 memory_availabletrue 时,执行任务。

  11. 布尔变量为false

    - name: 检查内存是否不可用
      debug:
        msg: "内存不可用"
      when: not memory_available

    解释:当布尔变量 memory_availablefalse 时,执行任务。

  12. 第一个变量的值存在于第二个变量的列表中

    - name: 检查发行版
      debug:
        msg: "操作系统发行版在支持的列表中"
      when: ansible_distribution in supported_distros

    解释:当变量 ansible_distribution 的值存在于变量 supported_distros 列表中时,执行任务。

示例任务详解

示例1:根据布尔变量执行任务

- name: 测试when
  hosts: web
  vars:
    stop: true
  tasks:
    - name: 如果stop变量为true则关闭http服务
      service:
        name: httpd
        state: stopped
      when: stop

解释:此任务在 web 主机组上执行,定义了变量 stoptrue。当 stop 变量为 true 时,关闭 httpd 服务。when 语句用于判断条件,必须放在模块外。

示例2:根据变量是否定义执行任务

- name: 变量如果有定义则执行
  hosts: web
  vars:
    status: stopped
  tasks:
    - name: 变量如果有定义则执行
      service:
        name: httpd
        state: "{{ status }}"
      when: status is defined

解释:此任务在 web 主机组上执行,定义了变量 statusstopped。当变量 status 定义时,将 httpd 服务状态设置为 status 变量的值。

示例3:根据变量值进行条件操作

- name: 判断系统版本做对应处理
  hosts: web
  gather_facts: yes
  vars:
    os_version:
      - CentOS
      - Fedora
  tasks:
    - name: 事实变量ansible_distribution=CentOS时进行操作
      service:
        name: httpd
        state: stopped
      when: ansible_distribution in os_version

解释:此任务在 web 主机组上执行,通过 gather_facts 收集主机信息。定义变量 os_version 为包含 CentOSFedora 的列表。当事实变量 ansible_distribution 的值在 os_version 列表中时,执行任务,停止 httpd 服务。

示例4:多个条件

- name: 判断是否有剩余空间,进行后续操作
  hosts: web
  tasks:
    - name: 判断根分区是否剩余空间超过300M
      service:
        name: vsftpd
        state: stopped
      loop: "{{ ansible_mounts }}"
      when: item.mount == "/" and item.size_available > 300000000

解释:此任务在 web 主机组上执行,通过循环遍历 ansible_mounts,判断根分区的剩余空间是否超过300M。如果条件成立,则停止 vsftpd 服务。

Ansible中的条件任务可以根据变量的值、定义状态以及布尔值来灵活控制任务的执行。通过上述示例,可以更清晰地了解如何在Ansible中应用条件语句,以实现更加动态和自动化的运维任务。

本文由mdnice多平台发布


逼格高的汤圆
10 声望2 粉丝