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