ansible的when条件判断

条件判断使用场景

  • 1.基于可用内存
  • 2.基于命令的输出,比如程序运行失败,然后就跳过或执行某个步骤
  • 3.根据facts变量然后决定使用什么模板文件
  • 4.根据cpu的数量来调优web服务器
  • 5.比较register变量来决定是否一个服务状态要改变。例如md5
    在这里插入图片描述
操作举例注释
等于(string)ansible_machine == ‘x86_64’当架构等于x86
等于ansible_distribution == “RedHat”当前发行版是Rehdat
等于ansible_distribution_major_version == “8”当前的系统版本是8
小于min_memory < 128当最小内存小于128
大于min_memory > 128当最小内存大于128
小于等于min_memory <= 256当最小内存小于等于256
大于等于min_memory >= 512当最小内存大于等于512
不等于min_memory != 512当最小内存不等于512
被定义min_memory is defined当min_memory变量被定义
没有被定义min_memory is not defined当min_memory变量没有被定义
当某个值为Truememory_available当memory_available 为True
取反not memory_available当memory_available 不为True
当a在b(list)中centos in rhel当centos在rhel(列表)中

示例剧本

when判断在调用变量时,不用加"{{ }}"


示例1: 根据facts变量判断

如果剩余内存小于70,关闭防火墙服务

---
-   hosts: all
    name: test
    tasks: 
    -   name: 关闭firewalld服务
        service:
            name: firewalld
            state: stopped
            enabled: no
        when: ansible_memfree_mb<70 # 如果剩余内存小于70,执行任务:关闭firewalld服务

示例2:裸变量定义

---
- name: task demo
  hosts: all
  vars:
  # 定义一个变量为True
    run_my_tasks: true
  tasks:
    - name: httpd is installd
      yum:
        name: httpd
      when: run_my_tasks
      # 当run_my_tasks为True时执行这个tasks

在这里插入图片描述

示例:当变量被定义时执行taks

在这里插入图片描述

当变量定义时运行示例:
下面这个play没有定义my_pkg变量,所以不会运行demo2这个tasks

---
- name: 变量判断演示2
  hosts: all
  tasks:
    - name: demo2
      yum:
        name: "{{ my_pkg }}"
        state: removed
      when: my_pkg is defined

多条件 and or

字符串比较时,用““把字符串引起来

示例注释
ansible_distribution == “RedHat” and ansible_distribution_major_version == “8”当系统发行版是RedHat 且 系统版本是8
ansible_distribution == “RedHat” or ansible_distribution_major_version == “8”当系统发行版是RedHat 或 系统版本是8

当系统发行版是RedHat且内核版本等于3.10


when: ansible_distribution == "RedHat" and ansible_kernel == "3.10.0.327.e17.x86_64"

在这里插入图片描述

and多条件列表写法:

在这里插入图片描述

---
- name: 列表and条件判断演示
  hosts: all
  vars:
    - var1: 1
    - var2: 3
  tasks:
    - debug:
        msg: "{{ var1 }} {{ var2 }}"
      when: 	# 当var1 == 1 and var2 == 2 时才执行tasks
        - var1 == 1
        - var2 == 2
# var2变量的值是3,不满足条件,所以不会执行tasks

运行结果

# 条件不满足,跳过运行tasks
[student@workstation data-variables]$ ansible-playbook and.yml 

PLAY [列表and演示] ***************************************************************************

TASK [Gathering Facts] *******************************************************************
ok: [servera.lab.example.com]

TASK [debug] *****************************************************************************
skipping: [servera.lab.example.com]

PLAY RECAP *******************************************************************************
servera.lab.example.com    : ok=1    changed=0    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0   

or多条件嵌套条件

when: >可以像python 一样将条件扩起来,不要忘了when:后面要加 >回车。

在这里插入图片描述

loop结合when

在这里插入图片描述

- name: loop循环结合when判断演示
  yum:
    name: mariadb-server
  loop: "{{ ansible_mounts }}"
  when: item.mount == "/" and item.size_available > 300000000
  # 当ansible_mounts.mount的值是/且ansible_mounts.size_available 大于300000000时才执行tasks
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

识途老码

赞赏是第一生产力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值