本節書摘來自華章出版社《ansible權威指南》一書中的第2章,第2.6節,作者 李松濤 魏 巍 甘 捷 更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。
2.6 ansible與正則
正規表達式(patterns)是各類進階語言的必定支援的方法之一,ansible也不例外。其patterns功能等同于正規表達式,文法使用也和正則類同,這大大便利了運維的使用。其對于ansible的靈活性有着極大貢獻,該功能同樣支援ansible-playbook。其用法也非常簡單
ansible
pattern_goes_here -m module_name -a arguments
該功能主要針對inventory的主機清單使用,我們通過一些案例可以更好地了解其功能及用法。在如下示例中主要針對webservers進行正則比對:
重新開機webservers組所有主機的httpd服務
webservers -m service -a name=httpd state=restarted
(1)all(全量)比對
比對所有主機,all或号功能相同。如檢測所有主機存活情況。
all和功能相同,但号需引起來
ansible all –m
ping
ansible -m ping
檢查192.168.1.024網段所有主機存活狀況。
192.168.1. -m ping
(2)邏輯或(or)比對
如我們希望同時對多台主機或多個組同時執行,互相之間用“”(冒号)分隔即可。
web1web2
使用方式如下:
ansible web1web2
-m ping
(3)邏輯非(!)比對
邏輯非用感歎号(!)表示,主要針對多重條件的比對規則,使用方式如下:
所有在webservers組但不在phoenix組的主機
webservers!phoenix
(4)邏輯與(&)比對
和邏輯非一樣,邏輯與也主要針對多重條件的比對規則,隻是邏輯上的判斷不同。邏輯與使用&表示,請看如下示例:
webservers組和staging組中同時存在的主機
webservers&staging
(5)多條件組合
ansible同樣支援多條件的複雜組合,該情況企業應用不多,這裡做簡單舉例說明。
webservers和dbservers兩個組中的所有主機在staging組中存在且在 phoenix組中不存在的主機
webserversdbservers&staging!phoenix
(6)模糊比對
通配符在ansible表示0個或多個任意字元,主要應用于一些模糊規則比對,在平時的使用中應用頻率非常高,請參考如下示例:
所有以.magedu.com結尾的主機均符合
.magedu.com
one開頭.com結尾的所有主機和dbservers組中的所有主機
one.comdbservers
(7)域切割
ansible底層基于python,是以也支援域切割。python字元串域切割的示例如下:
str = '12345678'
print str[01]
通過[01]即可擷取數值1。該功能在ansible中也支援,以如下inventory内容為例:
[webservers]
cobweb
webbing
weber
通過截取數組下标可以獲得對應變量值。
webservers[0] # == cobweb
webservers[-1] # == weber
webservers[01] # == webservers[0],webservers[1]
# == cobweb,webbing
webservers[1] # == webbing,weber
(8)正則比對
ansible同樣完整支援正則比對功能,“~”開始表示正則比對。
~(webdb)..example.com
檢測beta.example.com、web.example.com、green.example.com、beta.example.org、web.example.org、green.example.org的存活,使用如下比對模式:
~(betawebgreen).example.(comorg) -m ping
檢測inventory中所有以192.168開頭的伺服器存活資訊:
~192.168.[0-9]{2}.[0-9]{2,} -m ping
關于ansible的正則功能到此結束,相信大家在浏覽的過程中對其靈活程度也會有所感觸,在對ansible的實際應用過程中也會不斷地加深對其了解。