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