Ansible 中 when 条件判断
when条件判断介绍
when可以定义判断条件,当条件为真时才执行某个任务,即只有满足某一条件时,才执行任务。when表达式中的变量,可以不使用{{}}
。
常用的操作符:
- ==:相等
- !=:不等
- >:大于
- <:小于
- <=:小于等于
- =:大于等于
当dbs组中的主机内存大于500M的时候,才安装tree;如果目标主机没有500M内存,则不会安装,代码示意如下:
# 编写playbook
[root@pubserver ansible]# vim when1.yml
---
- name: install tree
hosts: dbs
tasks:
- name: install tree pkg
yum:
name: tree
state: present
when: ansible_memtotal_mb>500
# 执行playbook
[root@pubserver ansible]# ansible-playbook when1.yml
.........
PLAY RECAP ****************************************************************************************************************************************
db1 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
# 测试执行结果
[root@pubserver ansible]# ansible dbs -m setup -a "filter=ansible_memtotal_mb"
db1 | SUCCESS => {
"ansible_facts": {
"ansible_memtotal_mb": 777, # 查看内存777>500
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": false
}
# 查看是否安装软件
[root@db1 ~]# yum info tree
上次元数据过期检查:2:43:38 前,执行于 2023年08月30日 星期三 13时42分56秒。
已安装的软件包
多条件:当存在多个条件时使用and或or进行连接。
/etc/motd中的内容,将会在用户登陆时显示在屏幕上。系统发行版是Rocky8才执行任务,代码示意如下:
[root@pubserver ansible]# vim motd
_____________
< hello world >
-------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
[root@pubserver ansible]# vim when2.yml
---
- name: when condition
hosts: webservers
tasks:
- name: modify /etc/motd
copy:
dest: /etc/motd
src: motd
when: > # 以下三行合成一行
ansible_distribution == "Rocky"
and
ansible_distribution_major_version == "8"
[root@pubserver ansible]# ansible-playbook when2.yml
..........
PLAY RECAP ****************************************************************************************************************************************
web1 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
web2 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0