[英]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.