在ansible中patterns是指我们怎么样确定由那一台主机来管理,意思就是与那台主机进行交互。一个oattern通常关联到一系列的主机,在使用ansible之前,我们需要先告诉ansible那台机器将被执行。

all
*

如上则是表示inventory中所有的主机名,两个任一即可。

也可以写为ip地址或主机名的形式:

192.168.1.121
master

也可以写为组或者多个组,在组与组之间需要使用“:”隔开,表示或的关系。

test
test:test1

你也可以使用一个特定的组,如下,则是表示主机隶属于test但不属于test1的主机地址:

test:!test1
test:&test1     //则是表示两者之间的交集
test:test1:$test2:!test3  //表示在test或test1中,并且隶属于test2,但是不隶属于test3的主机。

也可以不必严格的定义groups,单个的host names,ip,groups都支持通配符。

*.example.com
*.com

Ansible同时也支持通配和groups的混合使用:

one*.com:dbservers
在高级语法中,你也可以在group中选择对应编号的server:
webservers[0]

或者一个group中的一部分servers:

webservers[0-25]

大部分人都在patterns应用正则表达式,但你可以.只需要以 ‘~’ 开头即可:

~(web|db).*\.example\.com

同时让我们提前了解一些技能,除了如上,你也可以通过 --limit 标记来添加排除条件,/usr/bin/ansible or /usr/bin/ansible-playbook都支持:

ansible-playbook site.yml --limit datacenter2

如果你想从文件读取hosts,文件名以@为前缀即可.从Ansible 1.2开始支持该功能:

ansible-playbook site.yml --limit @retry_hosts.txt