Puppet 4.8.1变量拼接正则匹配网络接口失败问题求助
问题根因
代码不生效的核心错误出在正则表达式的写法上:
- 正则字面量中额外添加了无意义的双引号
你编写的匹配规则/"${interface_name}"/的实际匹配逻辑是:查找包含"eth0"(带英文双引号)的字符串。但通过split拆分得到的所有接口名均为无引号的纯文本(比如eth0、eth0_1),没有任何一个接口名包含双引号,因此全部匹配失败。
修复方案
直接删除正则中的双引号即可,修改后的匹配规则如下:
if ( $iface =~ /${interface_name}/ ) {
如果需要更精确的匹配规则,可根据需求调整:
- 匹配以eth0开头的接口:
/^${interface_name}/ - 匹配完全等于eth0的接口:
/^${interface_name}$/
完整修复后代码示例
$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}": } } }
修改后运行,eth0、eth0_1、eth0_2、eth0_3四个接口都会命中found分支的notify。
内容的提问来源于stack exchange,提问作者James Sapam
相关产品推荐
相关产品推荐

