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日,于内蒙古呼和浩特。

关注果冻想公众号
var code = “eb81d68f-4446-47af-8d35-724af085a15d”

posted @   ^_^果冻^_^  阅读(3)  评论(0编辑  收藏  举报  
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示