《Puppet实战手册》——2.12 使用正则表达式进行替换

简介: Puppet通过regsubst函数提供了一种简单的方式来处理文本,在字符串中进行搜索和替换,或者从字符串中提取所需模式(子串)。人们经常需要用它来处理来自fact或来自外部程序的数据。

本节书摘来自异步社区《Puppet实战手册》一书中的第2章,第2.12节,作者:【英】John Arundel著,更多章节内容可以访问云栖社区“异步社区”公众号查看

2.12 使用正则表达式进行替换

Puppet通过regsubst函数提供了一种简单的方式来处理文本,在字符串中进行搜索和替换,或者从字符串中提取所需模式(子串)。人们经常需要用它来处理来自fact或来自外部程序的数据。

在这个例子中,读者将看到如何使用regsubst提取IPv4地址的前三位(网络部分,假设它是一个C类地址)。

操作步骤
按照下面的步骤来完成示例。

1. 在配置清单中添加下面的代码:

$class_c = regsubst($::ipaddress, '(.*)\..*', '\1.0')
notify { "The network part of ${::ipaddress} is
 ${class_c}": }

2. 运行Puppet:

ubuntu@cookbook:~/puppet$ papply 

Notice: The network part of 10.96.247.132 is 10.96.247.0 

Notice: /Stage[main]/Admin::Test/Notify[The network part of 
10.96.247.132 is 10.96.247.0]/message: defined 'message' as 'The 
network part of 10.96.247.132 is 10.96.247.0' 

Notice: Finished catalog run in 0.09 seconds

工作原理
regsubst至少需要三个参数:source(输入源)、pattern(匹配模式)和replacement(替换内容)。在例子中,指定的source字符串作为$:: ipaddress,而这台机器上的值如下:

10.96.247.132
指定的pattern如下:

(.*)\..*
而replacement的内容如下:

\1.0
pattern将匹配整个IP地址,捕获圆括号内的IP地址前三位。捕获的文本可以通过1的形式在replacement字符串中使用。

所有匹配的文本(本示例中是整个字符串)都会被参数中指定的replacement所替换。在这里是1(从source字符串中捕获的文本),后面跟随字符串.0,它的计算结果如下:

10.96.247.0
当然,可以通过其他方式得到相同的结果,包括:

$class_c = regsubst($::ipaddress, '\.\d+$', '.0')
更多参考
pattern可以是任意的正则表达式,与if语句中正则表达式使用相同的(Ruby)语法。

相关文章
|
开发工具 git
《Puppet实战手册》——导读
IT运维领域正在进行一场革命。新一代的配置管理工具可以在几秒内完成大量服务器的构建(配置)和整个网络自动化。为了充分利用云计算的强大功能,并且建立可靠、可扩展、安全、高性能的系统,拥有Puppet这样的工具是必不可少的。
2209 0
|
Linux Spring Java
《Puppet实战手册》——2.11 使用in运算符
本节书摘来自异步社区《Puppet实战手册》一书中的第2章,第2.11节,作者:【英】John Arundel著,更多章节内容可以访问云栖社区“异步社区”公众号查看
1546 0
|
Ubuntu Linux Ruby
《Puppet实战手册》——2.10 使用选择器和case语句
Puppet会比较$::operatingsystem和每个所提供的可能的值:Ubuntu、Debian等。这些值可以是正则表达式(例如,部分字符串匹配或通配符匹配),但在此例中,只使用文字字符串(或全字符匹配)。
1390 0
|
存储
《Puppet实战手册》——2.9 在if语句中使用正则表达式
正则表达式非常强大,但是很难理解和调试。如果感觉正在用的正则表达式太复杂,不能一眼看明白它在做什么,最好简化设计,使其更加简单化。但是,正则表达式捕获模式是个非常有用的功能。
2287 0
|
Ubuntu 数据中心 网络协议
《Puppet实战手册》——2.8 编写功能强大的条件语句
此外,也可以通过在清单内设置变量来调整引入的类的行为。例如,在数据中心A的服务器可能需要使用与在数据中心B不同的DNS服务器,或者可能需要为Ubuntu系统使用一组类,而其他系统使用另一组不同的类。
1733 0
|
存储
《Puppet实战手册》——2.7 数组中多个元素的遍历
当Puppet遇到数组作为一个资源的名称时,它会为数组中每个元素的创建一个资源。在这个例子中,$packages数组中的每一个软件包都会被Puppet创建一个新的package资源,并且使用相同的参数(ensure => installed)。这是一种简化相似资源书写的方式。
2016 0
|
Ruby 调度
《Puppet实战手册》——2.6 使用内联模板
任何传递给inline_template函数的字符串的内容都会被当作ERB模板来执行。也就是说,任何在<%=和%>分隔符之间的内容都将作为Ruby代码而执行,而其余的部分将被视为字符串。
1670 0
|
网络安全 Apache Ruby
《Puppet实战手册》——2.5 使用标准的命名约定
本节书摘来自异步社区《Puppet实战手册》一书中的第2章,第2.5节,作者:【英】John Arundel著,更多章节内容可以访问云栖社区“异步社区”公众号查看
1528 0
|
Apache 缓存
《Puppet实战手册》——2.4 使用模块
模块是将相关的事物进行组合的一种简单方式。例如,一个webserver模块应该包括让一台机器作为Web服务器所必需的一切:Apache的配置文件、虚拟主机模板和一些必要的用来部署它们(Apache的配置文件、虚拟主机模板)的Puppet代码。
1629 0
|
2月前
|
运维 Linux Apache
Puppet 作为一款强大的自动化运维工具,被广泛应用于配置管理领域。通过定义资源的状态和关系,Puppet 能够确保系统始终处于期望的配置状态。
Puppet 作为一款强大的自动化运维工具,被广泛应用于配置管理领域。通过定义资源的状态和关系,Puppet 能够确保系统始终处于期望的配置状态。
71 3