Ansible之路——第六章:通配模式Patterns

Ansible之路——第六章:通配模式Patterns

 

在Ansible 中,Patterns 意味着要管理哪些机器,在playbooks 中,意味着哪些主机需要应用特定的配置或者过程。

 

6.1 命令格式:

ansible <pattern_goes_here> -m <module_name> -a <arguments>

 

比如我们的主机列表配置为:

Ansible之路——第六章:通配模式Patterns

 

 则有命令:

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

Ansible之路——第六章:通配模式Patterns

 

不使用引号或者使用双引号会报错。

Ansible之路——第六章:通配模式Patterns

 

6.5 逻辑与(&)匹配

针对多重条件的匹配。

//nova和compute组中同时存在的机器。(单双引号都可以)

ansible  'nova:&compute'  -m ping

Ansible之路——第六章:通配模式Patterns

 

6.6 组合匹配

Ansible之路——第六章:通配模式Patterns

 

//nova组和ironic组中的所有机器,同时在bm组中存在,但不在compute组中。

Ansible之路——第六章:通配模式Patterns

 

6.7 模糊匹配

*通配符表示0个或者多个任意字符,主要用于一些模糊匹配。

//所有以192.168开头的主机

ansible 192.168.* -m ping

 

6.8 域切割或者索引

Ansible底层基于Python,因此也支持域切割,eg:

 Ansible之路——第六章:通配模式Patterns

 

 

 

也可以指定组中特定范围的主机,[x-y]这种形式已经不推荐使用了,推荐使用[x:y]。

 Ansible之路——第六章:通配模式Patterns

 

6.9正则匹配

//以~开始表示正则匹配。

~(nova|ironic).*\.example\.com  (需要单或双引号)

 

如:

Ansible之路——第六章:通配模式Patterns

 

 

 Ansible之路——第六章:通配模式Patterns

 

 

 

检测以192.168开头的主机

ansible ~192\.168\.[0-9]\.[0-9]\{\2} -m ping

Ansible之路——第六章:通配模式Patterns

 

6.10 指定主机执行

在/usr/bin/ansible 和/usr/bin/ansible-playbook 中,还可以通过一个参数”--limit”来明确指定某些主机或组。

 Ansible之路——第六章:通配模式Patterns

 

 

从Ansible1.2 开始,如果想要指定一个文件中的主机可以使用”@”,这样只操作该文件中的主机。如果指定多个文件,则用逗号分隔:

 Ansible之路——第六章:通配模式Patterns

 

 Ansible之路——第六章:通配模式Patterns

 

上一篇:Design Patterns 2 - 面向对象设计原则


下一篇:Codeup——599 | 问题 A: Speech Patterns (25)