在Ansible 中,Patterns 意味着要管理哪些机器,在playbooks 中,意味着哪些主机需要应用特定的配置或者过程。
6.1 命令格式:
ansible <pattern_goes_here> -m <module_name> -a <arguments>
比如我们的主机列表配置为:
则有命令:
ansible nova -m ping
模式通常用主机组来表示,上面的命令就代表针对nova 组的所有主机。
注:ansible不能操作没有在Inventory中定义过的主机。
6.2 全量匹配:
说明:匹配所有主机,all或者*号,两个功能相同,只是*号需要使用引号引起来(单双引号都可以)。
// 匹配所有主机
ansible all -m ping ansible "*" -m ping
// 匹配某个网段
ansible 10.152.35.* -m ping
6.3 逻辑或(or)匹配
如希望对多个主机或者多个组进行执行,组名之间通过冒号隔开,表示“OR”的意思,意思是这两个组中的所有主机
ansible nova:ironic -m ping
6.4 逻辑非(!)匹配
主要针对多重条件的匹配规则。
//所有在nova里面的机器,但不在compute里面的机器被匹配到。需要使用单引号。
ansible 'nova:!compute' -m ping
不使用引号或者使用双引号会报错。
6.5 逻辑与(&)匹配
针对多重条件的匹配。
//nova和compute组中同时存在的机器。(单双引号都可以)
ansible 'nova:&compute' -m ping
6.6 组合匹配
//nova组和ironic组中的所有机器,同时在bm组中存在,但不在compute组中。
6.7 模糊匹配
*通配符表示0个或者多个任意字符,主要用于一些模糊匹配。
//所有以192.168开头的主机
ansible 192.168.* -m ping
6.8 域切割或者索引
Ansible底层基于Python,因此也支持域切割,eg:
也可以指定组中特定范围的主机,[x-y]这种形式已经不推荐使用了,推荐使用[x:y]。
6.9正则匹配
//以~开始表示正则匹配。
~(nova|ironic).*\.example\.com (需要单或双引号)
如:
检测以192.168开头的主机
ansible ~192\.168\.[0-9]\.[0-9]\{\2} -m ping
6.10 指定主机执行
在/usr/bin/ansible 和/usr/bin/ansible-playbook 中,还可以通过一个参数”--limit”来明确指定某些主机或组。
从Ansible1.2 开始,如果想要指定一个文件中的主机可以使用”@”,这样只操作该文件中的主机。如果指定多个文件,则用逗号分隔: