Ansible Playbook中的条件控制

Ansible是一个系列文章,我会尽量以通俗易懂、诙谐幽默的总结方式给大家呈现这些枯燥的知识点,让学习变的有趣一些。
Ansible系列博文直达链接:Ansible入门系列

前言

Ansible一直都在进化的路上,他一直都在让自己变的更强大,所以,没有逻辑控制的绝对是Low的。对于Ansible来说,如果没有逻辑控制的功能,是不完美的。逻辑控制功能对于我们日常使用Ansible来说,也是一个很大的功能,在Ansible的Playbook中主要是以下三种逻辑控制:

  • when:条件判断语句,类似于编程语言中的if
  • loop:循环语句,类似于编程语言中的whilefor
  • block:把几个任务组成一个代码块,方便针对一组操作进行特殊处理。

这篇文章,我先对Ansible中的when逻辑控制进行详细的总结,后面的文章再总结loopblock

使用场景

在实际应用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日,于内蒙古呼和浩特。

关注果冻想公众号

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章