patterns意味着在ansible中管理哪些主机,也可以理解为,要与哪台主机进行通信,不过在playbooks中,它将以为着哪些主机需要应用特定的配置或者过程。SaltStack中的targeting
在命令行中,通常这样来使用
ansible <pattern_goes_here> -m <module_name> -a <arguments>
例如
ansible webservers -m service -a "name=httpd state=restarted"
一个模式通常会用一个组来表示,这样可以在较少的文字中表示较多的主机(例如上面的例子),主机都是“webserver”组中
不管怎样,使用ansible,首先要知道如何告诉ansible,在你的inventory中有哪些主机。通过主机名或者组名都可以。
下面的通配模式用来表示inventory中的所有主机
all *
利用通配符还可以指定一组具有规则特征的主机或主机名
one.lightcloud.com one.lightcloud.com:two.lightcloud.com 192.168.1.50 192.168.1.*
下面的模式,用来知道一个地址或多个组。组名之间通过冒号隔开,表示“OR”的意思,意思是这两个组中的所有主机。
webservers webservers:dbservers
当然你可以做出非的表达式,例如,目标主机必须在组webservers但不在phoenix组中
webserver:!phoenix
你还可以做出交集的表达式,例如,目标主机必须即在组webservers中又在组staging中
webservers:&staging
你还还可以把它们全部组合到一块
webserver:dbservers:&staging:!phoenix
上面这个复杂的表达式最后表示的目标主机必须满足:在webservers或者dbservers组中,必须还存在于staging组中,但是不在phoenix组中。
这些可以看作是SaltStack中Compound matchers
注意:在shell中,记得把 & ! 这些特殊符号进行转义。
在ansible-palybook命令中,你也可以使用变量来组成这样的表达式,但是你必须使用“-e”的选项来指定这个表达式。通常我们不这样用:
ansible-palybook -e webservers:!{{excluded}}:&{{required}}
你完全不需要使用这些严格的模式去定义组来管理你的机器。无论通过主机名,IP,组都可以使用通配符去匹配
*.lightcloud.com *.com
他们也可以通过混合模式组合在一起
*.lightcloud.com:*.com
你还可以在开头的地方使用”~”,用来表示这是一个正则表达式
~(web|db).*\.example\.com
最后,在ansible和ansible-playbook中,还可以通过一个参数”�Climit”来明确指定排除某些主机或组
ansible-playbook site.yml --limit datacenter2