ansible 主機正則


ansible <pattern> -m <module_name> -a <arguments>

該功能主要針對Inventory的主機列表,案例如下:

1、ALL(全量匹配)

說明:匹配所有主機,all或者*號,兩個功能相同,只是*號需要使用雙引號引起來。

// 匹配所有主機
ansible all -m ping
ansible "*" -m ping

// 匹配某個網段
ansible 192.168.4.* -m ping

2、邏輯或(or)匹配

如希望對多個主機或者多個組進行執行,相互之間用冒號分割。

ansible  192.168.4.46:192.168.4.50 -m ping

3、邏輯非(!)匹配

主要針對多重條件的匹配規則。

//所有在zookeeper里面的機器,但不在hadoop里面的機器被匹配到。需要使用單引號。
ansible 'zookeeper:!hadoop' -m ping
不使用引號或者使用單引號會報錯。

[root@manager1 data 10:51:57]#ansible 'zookeeper:!hadoop' -m ping
192.168.4.46 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
[root@manager1 data 10:52:41]#ansible "zookeeper:!hadoop" -m ping
-bash: !hadoop": event not found
[root@manager1 data 10:53:45]#ansible zookeeper:!hadoop -m ping
-bash: !hadoop: event not found

4、邏輯與(&)匹配

針對多重條件的匹配。

//zookeeper組和hadoop組中同時存在的機器。需要引號(單引號,雙引號都行。)
ansible "zookeeper:&hadoop" -m ping

5、多條件組合

//webservers和dbservers兩個組中的所有機器在staging組中存在,但不存在與phoenix。
ansible 'webservers:dbservers:&staging:!phoenix' -m ping

6、模糊匹配

*通配符表示0個或者多個任意字符,主要用於一些模糊匹配。

//所有以192.168開頭的主機
ansible 192.168.* -m ping

7、域切割或者索引

Ansible底層基於Python,因此也支持域切割,eg:

//主機清單配置如下:
[webservers]
cobweb
webbing
weber
通過截取數組下標可以獲得對應的變量值
webservers[0] # ==cobwb
webservers[-1] #==weber

8、正則匹配

//~開始表示正則匹配。
~(web|db).*\.example\.com
檢測以192.168開頭的主機
ansible ~192\.168\.[0-9]\.[0-9]\{\2} -m ping

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM