前言
很多时候,某些场景下playbook的结果依赖于变量、fact或者是前一个任务的执行结果,或者有的时候,我们会基于上一个task执行返回的结果而决定如何执行后续的task,这个时候就需要用到条件判断。
条件语句在Ansible中的使用场景:
- 在目标主机上定义了一个硬限制,比如:目标主机的发行版本必须是RedHat,才能执行该task;
- 捕获一个命令的输出,根据命令输出结果的不同以触发不同的task;
- 根据不同目标主机的facts,以定义不同的task;
- 根据目标机的cpu或者memory的大小,对相关应用性能进行调优;
- 用于判断某个服务的配置文件是否发生变更,以确定是否需要重启服务等。
下面就介绍一些常用的条件判断
when 关键字
1. when 关键字使用
在ansible中,when是条件判断的最常用关键字。如在安装包的时候,需要指定主机的操作系统类型,可以使用when语句来做判断。when关键字后面跟着的是python的表达式,在表达式中你能够使用任何的变量或者fact,当表达式的结果返回的是false,便会跳过本次的任务。
示例:
---
- name: install wget package
hosts: all
tasks:
- name: Install wget
yum:
name: wget
state: installed
when: ansible_os_family == "RedHat"
2. when 配合比较运算符
以上示例,我们使用了”==“的比较运算符,在ansible中,还支持如下比较运算符:
- ==:比较两个对象是否相等,相等则返回真。可用于比较字符串和数字
- !=:比较两个对象是否不等,不等则为真。
- :比较两个对象的大小,左边的值大于右边的值,则为真
- =, ge
- 小于: 10
- 确保将mariadb-server安装到根分区且根分区的可用空间要大于200M
- name: install nginx if enough space on root
yum:
name: nginx
state;latest
loop: "{{ ansible_mounts }}"
when: item.mount == "/" and item.size_available > 200000000
以上就是大部分的判断方法,可能很多在职业生涯中都用不上。