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

關注果凍想公衆號

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