红宝石模板中的深度 hiera 查找仅返回最后一个结果



我有以下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()

相关内容

  • 没有找到相关文章

最新更新