Ruby 厨师:你能从一本相关的食谱中将元素添加到属性列表中吗
所以我对厨师和红宝石很不了解。我一直在做一本食谱来安装XDB的telegraf。我为这个配方设计了一个系统,根据默认属性散列中存储的属性列表生成自定义配置 现在我想扩展它,这样依赖的cookbooks就可以添加到生成配置的属性中,这样我就可以向telegraf配置添加新的配置,而不必telegraf配置负责使用它的cookbook引入的部分模板配置。这里是方法 在我的telegraf食谱中,我有这样的默认属性Ruby 厨师:你能从一本相关的食谱中将元素添加到属性列表中吗,ruby,chef-infra,chef-recipe,Ruby,Chef Infra,Chef Recipe,所以我对厨师和红宝石很不了解。我一直在做一本食谱来安装XDB的telegraf。我为这个配方设计了一个系统,根据默认属性散列中存储的属性列表生成自定义配置 现在我想扩展它,这样依赖的cookbooks就可以添加到生成配置的属性中,这样我就可以向telegraf配置添加新的配置,而不必telegraf配置负责使用它的cookbook引入的部分模板配置。这里是方法 在我的telegraf食谱中,我有这样的默认属性 default['telegraf']['config']['partials'] =
default['telegraf']['config']['partials'] = [
{
variables: { hostname: "hostname" },
templateName: 'output-win-perf-influxdb.erb',
},
{
variables: {},
templateName: 'input-win-perf-statsd.erb',
},
{
variables: {},
templateName: 'input-win-perf-system.erb',
}
]
以及此模板资源中使用的
template 'C:\\Program Files\\telegraf\\telegraf.conf' do
source 'telegraf/telegraf.conf.erb'
action :create
variables (node.default['telegraf']['config'])
end
partials被呈现到telegraf.conf中
<% @partials.each do |partial| %>
<%= render "telegraf/partials/#{partial['templateName']}", :variables => partial['variables']%>
<% end %>
我有点期待它会失败,因为它无法找到新部分模板的.erb。但是从运行日志来看,新项目似乎并没有添加到数组中。我使用了一个数组来维持秩序,但如果不可能的话,可能不得不采取不同的方法 查看完整版本,但不包括tl;dr这很快变得难以管理。使用散列来代替,即使您丢弃了密钥,但您可能会在这里使用密钥作为模板名称。这使得正常的深度合并逻辑可以让您免于很多痛苦
default['telegraf']['config']['partials'].push(
{
variables: { environments: ["chi", "main"] },
templateName: 'test.erb',
}
)