本节书摘来自异步社区《puppet实战手册》一书中的第2章,第2.12节,作者:【英】john arundel著,更多章节内容可以访问云栖社区“异步社区”公众号查看
puppet通过regsubst函数提供了一种简单的方式来处理文本,在字符串中进行搜索和替换,或者从字符串中提取所需模式(子串)。人们经常需要用它来处理来自fact或来自外部程序的数据。
在这个例子中,读者将看到如何使用regsubst提取ipv4地址的前三位(网络部分,假设它是一个c类地址)。
操作步骤
按照下面的步骤来完成示例。
1. 在配置清单中添加下面的代码:
2. 运行puppet:
工作原理
regsubst至少需要三个参数:source(输入源)、pattern(匹配模式)和replacement(替换内容)。在例子中,指定的source字符串作为$:: ipaddress,而这台机器上的值如下:
<code>10.96.247.132</code>
指定的pattern如下:
<code>(.*)\..*</code>
而replacement的内容如下:
<code>\1.0</code>
pattern将匹配整个ip地址,捕获圆括号内的ip地址前三位。捕获的文本可以通过1的形式在replacement字符串中使用。
所有匹配的文本(本示例中是整个字符串)都会被参数中指定的replacement所替换。在这里是1(从source字符串中捕获的文本),后面跟随字符串.0,它的计算结果如下:
<code>10.96.247.0</code>
当然,可以通过其他方式得到相同的结果,包括:
<code>$class_c = regsubst($::ipaddress, '\.\d+$', '.0')</code>
更多参考
pattern可以是任意的正则表达式,与if语句中正则表达式使用相同的(ruby)语法。