【问题标题】:Chef: Define same attribute with different values for different cookbooks厨师:为不同的食谱定义具有不同值的相同属性
【发布时间】:2016-01-11 20:48:03
【问题描述】:

假设我有一个项目要使用以下模板进行部署: 项目/文件.erb

node['simpe_test_value']

我希望能够编写 2 个不同的说明书来部署同一个项目,但模板中使用的属性具有不同的值,例如:

cookbooks/test1/recipes/default.rb

node.default['simple_test_value'] = 'in cookbook test 1'
template "project/test.cfg" do
  local true
  source "project/test.erb"
end   

cookbooks/test2/recipes/default.rb

node.default['simple_test_value'] = 'in cookbook test 2'
template "project/test.cfg" do
  local true
  source "project/test.erb"
end   

Chef 将在收敛阶段之前评估所有属性,因此我的模板文件扩展为两个资源的相同值。

我怎样才能做到这一点?

我的目标是为一个项目使用相同的代码并通过仅调整某些属性来多次部署它(不同的食谱/不同的食谱)。

【问题讨论】:

  • 你的目标是同一个节点吗?如果是,您将不得不使用模板资源的变量属性。 (如果你有效地针对同一个节点,我会举一个例子)
  • 是的,我的目标是同一个节点。请注意,我提供了一个非常基本的示例,在我的基础架构中,使用将调用模板的自定义 LWRP 会变得更加复杂,因此最后,所有使用的模板资源都是相同的。我一直在考虑在 ruby​​_block 中定义一个自定义字典,并通过 variables 属性将其传递到模板中。然而,我必须弄清楚如何访问已通过 variables 属性传递的模板上的字典

标签: ruby chef-infra


【解决方案1】:

好的,在阅读评论后,我确实认为您必须为属性命名。

如果模板资源相同(目标路径相同),它将无法工作(或者它将循环更新,您最终只会得到一个文件)。

对于某些部署,我们会执行以下操作:

node['company']['apps']['app1']['simple_value1']="value1"
node['company']['apps']['app1']['simple_value2']="value2"
node['company']['apps']['app2']['simple_value1']="value3"
node['company']['apps']['app2']['simple_value2']="value4"

在配方中,我们使用以下内容渲染模板:

template 'app1/WEB-INF/web.xml' do
  source 'web.xml.erb'
  cookbook 'app-templates' # specify the source cookbook to avoid duplicating the template file over many cookbooks
  variables({
     :app_name => 'app1',
     :app_vars => node['company']['apps']['app1']
  })
end

在模板中,我们使用@app_vars['simple_value1']@app_vars['simple_value2'],有时我们会迭代node['company']['apps'][@app_name] 子属性,以便为每个应用使用不同数量的值的不同用例使用相同的模板。

示例.erb:

Any line of fixed text

<% node['company']['apps'][@app_name].each do |name, value| -%>
key_<%= name %>=<%= value %>
<% end -%>

Rest of file...

(这里简化了,但我认为理解这个概念就足够了)

【讨论】:

  • 我很接近!哈哈。感谢您的回答,这就是我想要的。好吧,我一直在寻找一种方法来允许在收敛时由食谱覆盖属性,但这是不可能的。谢谢!
  • 您可以使用惰性求值,但它不会按预期工作(除非您更改 ruby​​_block 中的属性)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-04
  • 2015-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-01
相关资源
最近更新 更多