《Ansible权威指南 》一2.6 Ansible与正则-阿里云开发者社区

开发者社区> 华章出版社> 正文
登录阅读全文

《Ansible权威指南 》一2.6 Ansible与正则

简介: 正则表达式(Patterns)是各类高级语言的必定支持的方法之一,Ansible也不例外。其Patterns功能等同于正则表达式,语法使用也和正则类同,这大大便利了运维的使用。其对于Ansible的灵活性有着极大贡献,该功能同样支持Ansible-playbook。其用法也非常简单。

本节书摘来自华章出版社《Ansible权威指南 》一书中的第2章,第2.6节,李松涛 魏 巍 甘 捷 著更多章节内容可以访问云栖社区“华章计算机”公众号查看。

2.6 Ansible与正则

正则表达式(Patterns)是各类高级语言的必定支持的方法之一,Ansible也不例外。其Patterns功能等同于正则表达式,语法使用也和正则类同,这大大便利了运维的使用。其对于Ansible的灵活性有着极大贡献,该功能同样支持Ansible-playbook。其用法也非常简单。
ansible -m -a
该功能主要针对Inventory的主机列表使用,我们通过一些案例可以更好地了解其功能及用法。在如下示例中主要针对webservers进行正则匹配:

// 重启webservers组所有主机的httpd服务
ansible webservers -m service -a "name=httpd state=restarted"

(1)All(全量)匹配
匹配所有主机,all或*号功能相同。如检测所有主机存活情况。

// all和*功能相同,但*号需引起来
ansible all –m ping
ansible "*" -m ping
检查192.168.1.0/24网段所有主机存活状况。
ansible 192.168.1.* -m ping

(2)逻辑或(or)匹配
如我们希望同时对多台主机或多个组同时执行,相互之间用“:”(冒号)分隔即可。

web1:web2
使用方式如下:
ansible "web1:web2" -m ping

(3)逻辑非(!)匹配
逻辑非用感叹号(!)表示,主要针对多重条件的匹配规则,使用方式如下:

// 所有在webservers组但不在phoenix组的主机
webservers:!phoenix

(4)逻辑与(&)匹配
和逻辑非一样,逻辑与也主要针对多重条件的匹配规则,只是逻辑上的判断不同。逻辑与使用&表示,请看如下示例:

// webservers组和staging组中同时存在的主机
webservers:&staging

(5)多条件组合
Ansible同样支持多条件的复杂组合,该情况企业应用不多,这里做简单举例说明。

// webservers和dbservers两个组中的所有主机在staging组中存在且在 phoenix组中不存在的主机
webservers:dbservers:&staging:!phoenix

(6)模糊匹配
*通配符在Ansible表示0个或多个任意字符,主要应用于一些模糊规则匹配,在平时的使用中应用频率非常高,请参考如下示例:

// 所有以.magedu.com结尾的主机均符合
*.magedu.com
// one开头.com结尾的所有主机和dbservers组中的所有主机
one*.com:dbservers

(7)域切割
Ansible底层基于Python,因此也支持域切割。Python字符串域切割的示例如下:

str = '12345678'
print str[0:1]
通过[0:1]即可获取数值1。该功能在Ansible中也支持,以如下Inventory内容为例:
[webservers]
cobweb
webbing
weber

通过截取数组下标可以获得对应变量值。

webservers[0]    # == cobweb
webservers[-1]    # == weber
webservers[0:1]    # == webservers[0],webservers[1]
            # == cobweb,webbing
webservers[1:]    # == webbing,weber
``
(8)正则匹配
Ansible同样完整支持正则匹配功能,“~”开始表示正则匹配。

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

检测beta.example.com、web.example.com、green.example.com、beta.example.org、web.example.org、green.example.org的存活,使用如下匹配模式:

ansible "~(beta|web|green).example.(com|org)" -m ping

检测Inventory中所有以192.168开头的服务器存活信息:

ansible ~192.168.[0-9]{2}.[0-9]{2,} -m ping

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享: