linux学习

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

留言

您的电子邮箱地址不会被公开。 必填项已用 * 标注