繁体   English   中英

Puppet 模板迭代和 yaml 文件

[英]Puppet Templates Iterations and yaml files

我的数据目录中有以下 yaml 文件:

---
type:
  - config_setting1:
    foo: bar
  - config_setting2:
    foo: bar

我的.erb模板如下所示:

conf {
<% settings = YAML.load_file('/etc/puppetlabs/code/environments/example/data/conf.yaml') -%>
<% settings['type'].each do |val| -%>
  <%= val %>
<% end -%>
}

当我在我的代理机器上运行 puppet 时,我最终得到了这个:

conf {
  {"config_setting1"=>nil, "foo"=>"bar"}
  {"config_setting2"=>nil, "foo"=>"bar"}
}

我的最终目标是让输出看起来像这样:

conf {
  config_setting1 {
    foo: bar
  }
  config_setting2 {
    foo: bar
  }
}

我知道我需要对我的模板进行一些清理才能真正以这种方式输出,但我现在更关注如何而不是最终结果。 如您所见,我熟悉使用设置末尾的['type']来浏览嵌套哈希,并且我意识到如果我对其进行硬编码,我可以很容易地创建这个结构,但我想了解如何迭代地使用它。 我一直试图在迭代中遵循Puppet 文档,但是即使您逐字复制它们,它们的示例也不起作用......这让事情变得有点困难。 如何像我一样调用在嵌套的 yaml 文件中提取单个数据? 只是键还是特定值? 我试过类似的东西:

<% settings['type'].each do |val| -%>
  <%= settings['val'] %>
<% end -%>

以及它的多种变体,但我找不到正确的语法来获得我想要的东西。 我也试过有一些类似<% settings['type'].each do |index, value| -%> <% settings['type'].each do |index, value| -%>但我也无法得到任何可以使用的结果。 如果有人能指出我正确的方向,我将不胜感激。 我很乐意被告知我也在以完全错误的方式处理这件事; 如果有更好的方法来获取这些数据,我会全力以赴。

另一个不太重要但仍然让我烦恼的问题 - 在我的 load_file 中,我有绝对路径......有没有办法使用相对路径?

令人惊讶的是,输入内容将回答您自己的问题。 我意识到有一个非常简单的解决方案。 如果我们采用我的模板:

conf {
<% settings = YAML.load_file('/etc/puppetlabs/code/environments/example/data/conf.yaml') -%>
<% settings['type'].each do |val| -%>
  <%= val %>
<% end -%>
}

并在第三行替换<% settings['type'].each do |val| -%> <% settings['type'].each do |val| -%><% settings.keys.each do |val| -%> <% settings.keys.each do |val| -%>我能够得到我想要的东西。 如果有更好的方法来做到这一点,我仍然很感兴趣,无论是我如何通过 yaml 加载或以其他方式加载。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM