我有以下hiera:
profile::example::firewalls:
- serverclass1:
label: http
port: 80
label: https
port: 443
- serverclass2:
label: ssh
port: 22
label: telnet
port: 21
我尝试在 erb 模板中通过以下方式调用它:
<% @example = scope().call_function('hiera',['profile::example::firewalls']) -%>
show me the array!
<%= @example %>
奇怪的是,这返回以下内容:
+show me the array!
+[{"serverclass1"=>nil, "label"=>"https", "port"=>443}, {"serverclass2"=>nil, "label"=>"telnet", "port"=>21}]
一旦我有一个完整的数组,我最终会在 ruby 中的 for/each 循环中使用它,但目前这似乎只返回最终结果,而不是我期望的一切。
问题始于包含重复"标签"键的 YAML 数据结构。这就是为什么输出中缺少某些数据的原因。
(有关详细信息,请参阅此相关的堆栈溢出答案。
虽然不完全清楚你想做什么,但在我看来,你最好使用这样的 YAML 数据结构:
profile::example::firewalls:
serverclass1:
http: 80
https: 443
serverclass2:
ssh: 22
telnet: 21
然后,您可以使用如下代码在 ERB 模板中循环访问它:
<% scope().call_function('lookup',['profile::example::firewalls']).each do |server_class, data| -%>
Server class: <%= server_class %>
<%- data.each do |key, value| -%>
<%= key %> --- <%= value %>
<%- end -%>
<% end -%>
另请注意,我删除了已弃用的hiera()
函数并将其替换为lookup()
。