Puppet正则表达式与变量名不匹配



我不明白为什么这个regex不匹配,这里我试图匹配$all_interfaces中的所有eth0,但它不匹配:

$interface_name = 'eth0'
# $facts["interfaces"] = "eth0,eth0_1,eth0_2,eth0_3,eth1,lo"
$all_interfaces = split($facts["interfaces"], ',')

$all_interfaces.each |$iface| {
if ( $iface =~ /"${interface_name}"/ ) {
notify {"found virtual interface: ${iface}":}
} else {
notify {"not found virtual interface: ${iface}": }
}
}

输出:

not found virtual interface

有人能告诉我这个木偶片段出了什么问题吗。

我正在运行木偶版本:4.8.1

感谢

有人能告诉我这个木偶片段出了什么问题吗。

当然:正则表达式文字是一个原子单元,而不是用于从字符串构造正则表达式的表达式。因此,斜杠之间的字符都充当正则表达式的文字字符。内容没有应用变量插值,其中的引号是普通的模式字符。自然,生成的正则表达式匹配的字符串集与您要查找的完全不同。

您可能可以通过删除/字符使您的示例按预期工作,这样=~表达式的右侧就是一个字符串,而不是regex:

if ( $iface =~ "${interface_name}" ) {

或者我想你甚至可以用。。。

if ( $iface =~ $interface_name ) {

因为变量CCD_ 3已经引用了字符串。在这种情况下,Puppet 4+将表达式右侧的字符串解释为";字符串化正则表达式"——也就是说,包含在字符串中的正则表达式正文的文本。Puppet将根据字符串内容构造一个正则表达式,以与左侧操作数相匹配。

最新更新