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 |
布尔变量为true | memory_available |
布尔变量为false | not memory_available |
第一个变量的值存在于第二个变量的列表中 | ansible_distribution in supported_distros |
条件操作示例
操作条件和对应示例:
等于(值为字符串)
- name: 检查机器类型 debug: msg: "机器类型为 x86_64" when: ansible_machine == "x86_64"
解释:当变量
ansible_machine
的值等于"x86_64"
时,执行任务。等于(值为数字)
- name: 检查最大内存 debug: msg: "最大内存为 512" when: max_memory == 512
解释:当变量
max_memory
的值等于512
时,执行任务。小于
- name: 检查最小内存 debug: msg: "最小内存小于 128" when: min_memory < 128
解释:当变量
min_memory
的值小于128
时,执行任务。大于
- name: 检查最小内存 debug: msg: "最小内存大于 256" when: min_memory > 256
解释:当变量
min_memory
的值大于256
时,执行任务。小于等于
- name: 检查最小内存 debug: msg: "最小内存小于等于 256" when: min_memory <= 256
解释:当变量
min_memory
的值小于等于256
时,执行任务。大于等于
- name: 检查最小内存 debug: msg: "最小内存大于等于 512" when: min_memory >= 512
解释:当变量
min_memory
的值大于等于512
时,执行任务。不等于
- name: 检查最小内存 debug: msg: "最小内存不等于 512" when: min_memory != 512
解释:当变量
min_memory
的值不等于512
时,执行任务。变量存在
- name: 检查变量是否存在 debug: msg: "变量 min_memory 存在" when: min_memory is defined
解释:当变量
min_memory
已定义时,执行任务。变量不存在
- name: 检查变量是否存在 debug: msg: "变量 min_memory 不存在" when: min_memory is not defined
解释:当变量
min_memory
未定义时,执行任务。布尔变量为true
- name: 检查内存是否可用 debug: msg: "内存可用" when: memory_available
解释:当布尔变量
memory_available
为true
时,执行任务。布尔变量为false
- name: 检查内存是否不可用 debug: msg: "内存不可用" when: not memory_available
解释:当布尔变量
memory_available
为false
时,执行任务。第一个变量的值存在于第二个变量的列表中
- 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
主机组上执行,定义了变量 stop
为 true
。当 stop
变量为 true
时,关闭 httpd
服务。when
语句用于判断条件,必须放在模块外。
示例2:根据变量是否定义执行任务
- name: 变量如果有定义则执行
hosts: web
vars:
status: stopped
tasks:
- name: 变量如果有定义则执行
service:
name: httpd
state: "{{ status }}"
when: status is defined
解释:此任务在 web
主机组上执行,定义了变量 status
为 stopped
。当变量 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
为包含 CentOS
和 Fedora
的列表。当事实变量 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多平台发布
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。