这似乎是hiera()
函数的问题。我检查了以下清单。
$without_hiera = undef
$with_hiera = hiera('undefined_key', undef)
$no_hiera_template = 'Without Hiera: <% if @without_hiera.nil? %>nil<% else %>not nil: "<%= @without_hiera %>"<% end %>'
$hiera_template = 'With Hiera: <% if @with_hiera.nil? %>nil<% else %>not nil: "<%= @with_hiera %>"<% end %>'
notify {
'hiera':
message => inline_template($hiera_template);
'no_hiera':
message => inline_template($no_hiera_template);
}
这产生:
Notice: Without Hiera: nil
Notice: /Stage[main]/Main/Notify[no_hiera]/message: defined 'message' as 'Without Hiera: nil'
Notice: With Hiera: not nil: ""
Notice: /Stage[main]/Main/Notify[hiera]/message: defined 'message' as 'With Hiera: not nil: ""'
这个问题是已知的并且已经被详细讨论过,但是还没有可以接受的解决方案。该问题可通过电流master
和puppet-4
分支重现。
鉴于这将很难解决,您显然需要一种解决方法。可能性取决于您的数据。
- 如果 boolean 值
false
(请注意,这与 String 不同"false"
)对您的键不敏感,您可以false
设置默认值并<% if ! @value -%>
在模板中进行测试。
- 如果空字符串不是一个合理的值,您可以将其设为默认值,并使用
<% if ! @value.to_s.empty? -%>
- 最后,您可能可以围绕 hiera 函数编写自己的包装器,它会覆盖任意默认值,例如
__KEY_NOT_FOUND__
to nil
。你的旅费可能会改变。请参阅错误报告以获取可能对以前工作有帮助的一些提示。
查明其中一个相关的错误是否已移至Jira并在那里投票并说明这仍然是 Hiera 的一个问题,这也可能会有所帮助。