Ansible Playbook中的条件控制
Ansible是一个系列文章,我会尽量以通俗易懂、诙谐幽默的总结方式给大家呈现这些枯燥的知识点,让学习变的有趣一些。
Ansible系列博文直达链接:Ansible入门系列
前言
Ansible一直都在进化的路上,他一直都在让自己变的更强大,所以,没有逻辑控制的绝对是Low的。对于Ansible来说,如果没有逻辑控制的功能,是不完美的。逻辑控制功能对于我们日常使用Ansible来说,也是一个很大的功能,在Ansible的Playbook中主要是以下三种逻辑控制:
when
:条件判断语句,类似于编程语言中的if
loop
:循环语句,类似于编程语言中的while
和for
block
:把几个任务组成一个代码块,方便针对一组操作进行特殊处理。
这篇文章,我先对Ansible中的when
逻辑控制进行详细的总结,后面的文章再总结loop
和block
。
使用场景
在实际应用Ansible的过程中经常会碰到不同的主机可能要执行不同的命令,或者执行某个task的时候需要进行相应的判断,目前Ansible的所有条件判断都是使用when
进行判断的,when
的值是一个条件表达式,如果条件判断成立,这个task就执行;否则就不执行。成立与不成立就是Python中的True和False,同时,这里的条件表达式也支持多个条件之间and或者or。
如果我们使用一个变量进行相应的判断,一定要搞清楚该变量的数据类型。
when实操
老样子,还是三台服务器:
192.168.5.2 # 管理主机
192.168.5.3 # 被管理远程主机
192.168.5.4 # 被管理远程主机
inventory文件内容如下:
[web]
192.168.5.3
192.168.5.4
我这边写了一个playbook,内容如下:
---
- hosts: web
gather_facts: True
tasks:
- name: Test When
debug: msg="I am 192.168.5.3"
when: ansible_default_ipv4.address == "192.168.5.3"
在yaml脚本中,使用了when
,只有在主机IP地址为192.168.5.3时,才执行对应的task。如果对脚本中ansible_default_ipv4.address
不明白的话,可以看看这篇《Ansible facts详解》
执行完成后,结果如下图所示:
从上图可以看到,只有在192.168.5.3这台主机上执行了这个task,而192.168.5.4则跳过执行了,这就是when
的用法。很简单,但是很实用。
总结
一个小的语法点,但是很实用,在我们日后涉及Ansible的工作,肯定会离不开when
的,搞起!
悲剧,打篮球把手怼了~此时此刻的我,都是在忍着剧痛写着这篇文章!!!
果冻想,认真玩技术的地方。
2020年5月16日,于内蒙古呼和浩特。
var code = “eb81d68f-4446-47af-8d35-724af085a15d”