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
记录学习和生活的酸甜苦辣.....哈哈哈