我在 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 -%>
干杯
我设法让它使用以下代码。 我唯一无法添加的是仅在 LAST 条目之后的尾随换行符。 关于如何改进此块的任何评论都值得赞赏。
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 -%>