[英]Chef: Define same attribute with different values for different cookbooks
假設我有一個項目要使用如下模板進行部署:project / file.erb
node['simpe_test_value']
我希望能夠編寫2個不同的cookbook來部署相同的項目,但對模板中使用的屬性具有不同的值,例如:
食譜/ TEST1 /食譜/ default.rb
node.default['simple_test_value'] = 'in cookbook test 1'
template "project/test.cfg" do
local true
source "project/test.erb"
end
食譜/ TEST2 /食譜/ default.rb
node.default['simple_test_value'] = 'in cookbook test 2'
template "project/test.cfg" do
local true
source "project/test.erb"
end
Chef將在收斂階段之前評估所有屬性,因此我的模板文件將擴展為兩個資源的相同值。
我怎樣才能做到這一點?
我的目標是通過僅調整一些屬性,為項目使用相同的代碼並多次部署(不同的烹飪書/不同的食譜)。
好的,在評論閱讀后,我確實認為你必須命名你的屬性。
如果模板資源相同(目標中的路徑相同)則無法工作(或者它將循環更新,您最終只能使用一個文件)。
對於某些部署,我們執行以下操作:
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...
(這里簡化但我覺得這個概念已經足夠了)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.