【发布时间】: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