在 Ansible 中,Patterns 意味着要管理哪些机器,在 playbooks 中,意味着哪些主机需要应用特
定的配置或者过程
命令格式(下一章介绍 Ansible 的命令具体使用):
ansible <pattern_goes_here> -m<module_name> -a <arguments>
比如我们的主机列表配置为:
192.168.0.6
[webservers]
192.168.0.4
[db]
192.168.0.5
ansible webservers -m service -a "name=httpdstate=restarted"
模式通常用主机组来表示,上面的命令就代表 webservers 组的所有主机
其他的匹配方式:
表示通配 inventory 中的所有主机
all
*
也可以指定具有规则特征的主机或者主机名
one.example.com
one.example.com:two.example.com
192.168.1.50
192.168.1.*
下面的模式,用来知道一个地址或多个组。组名之间通过冒号隔开,表示“OR”的意思,意思是这
两个组中的所有主机
webservers
webservers:dbservers
非模式匹配:表示在 webservers 组不在 phoenix 组的主机
webservers:!phoenix
交集匹配:表示同时都在 webservers 和 staging 组的主机
webservers:&staging
组合匹配:在 webservers 或者 dbservers 组中,必须还存在于 staging 组中,但是不在phoenix 组中
webservers:dbservers:&staging:!phoenix
在 ansible-palybook 命令中,你也可以使用变量来组成这样的表达式,但是你必须使用“-e”的选项来
指定这个表达式
webservers:!{{excluded}}:&{{required}}
你完全不需要使用这些严格的模式去定义组来管理你的机器,主机名,IP,组都可以使用通配符去
匹配
*.example.com
*.com
one*.com:dbservers
可以匹配一个组的特定编号的主机(先后顺序 0 到...)
webservers1[0] 表示匹配 webservers1 组的第 1 个主机
webservers1[0:25] 表示匹配 webservers1 组的第 1 个到第 25 个主机(官网文档是”:”表示范
围,测试发现应该使用”-”,注意不要和匹配多个主机组混淆)
在开头的地方使用“~”,表示这是一个正则表达式
~(web|db).*\.example\.com
在 /usr/bin/ansible 和 /usr/bin/ansible-playbook 中 ,还可以通过一个参数”–limit”来明确指定排除某
些主机或组
ansible-playbook site.yml --limit datacenter2
从 Ansible1.2 开始,如果想要排除一个文件中的主机可以使用”@”
ansible-playbook site.yml --limit @retry_hosts.txt