天天看點

《Ansible權威指南》一 2.6 Ansible與正則

本節書摘來自華章出版社《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的實際應用過程中也會不斷地加深對其了解。