带有 ip 验证的 Puppet ruby 模板 - 跳过失败值而不是错误并停止

Puppet ruby template with ip validation - skip failed values not error and stop

我在 Puppet (ruby).erb 模板中有以下代码,对从数组迭代的每个值都有一个验证函数。我希望它继续使用下一个值,最好发出警告,或者静默继续。如果条目验证失败,下面的代码会出错并停止。

例如,如果数组是 $nameservers = ['1.1.1.1','/some.domain/2.2.2.2'] 我希望它只处理 1.1.1.1 条目。

这实际上是为了让我可以对 /etc/resolv.conf 或 /etc/dnsmask.conf 使用相同的输入数组,这是由我的清单中的其他逻辑确定的,由 2 个模板之一处理(不,我没疯):).

我知道可以在清单或顶级范围变量中进行验证,但我需要在模板中进行验证。

search <%= scope.lookupvar('dns_search') %>
<% scope.lookupvar('nameservers').each do |server| -%>
<% if scope.function_validate_ip_address([server]) -%>
nameserver <%= server -%>

<% end -%>
<% end -%>

干杯

我设法让它与以下代码一起工作。我唯一无法添加的是仅在最后一个条目之后的尾随换行符。对如何改进此块的任何评论表示赞赏。

search <%= scope.lookupvar('dns_search') %>    
<% scope.lookupvar('nameservers').each do |server| -%>    
<% begin -%>    
<% if scope.function_validate_ip_address([server]) %>    
nameserver <%= server -%>    
<% end -%>    
<% rescue => e -%>    
<% scope.call_function('warning',[e]) -%>    
<% next %>    
<% end -%>    
<% end -%>