是否有可能合并多个食谱或食谱中的属性?
我想要实现的目标如下:
食谱1
设置默认的属性列表 喜欢 default [:bamboo] [:agent] [:attributes] = { ' system.attr-1' => ' TEST1' }
template.conf 中的,我有
<% if @options -%>
<% @options.sort.map do | option, value | -%>
<%= option %>= <%= value %>
<% end -%>
<% end -%>
食谱2
固有&#34;食谱1&#34; 并有2个食谱
RECIPE1
node.default[:bamboo][:agent][:attributes] = {
'system.attr-2' => 'test2'
}
recipe2
node.default[:bamboo][:agent][:attributes] = {
'system.attr-3' => 'test3'
}
现在我想要的是 template.conf 从&#34; cookbook 1&#34; 更新/合并cookbook2的属性和那些食谱。
这可能吗?如果没有,还有其他选择吗?
答案 0 :(得分:2)
在食谱2中,你想利用Ruby的Hash#merge
:
node.default[:bamboo][:agent][:attributes] = node[:bamboo][:agent][:attributes].merge(
'system.attr-3' => 'test3'
)
然后确保cookbook 2依赖于cookbook 1(因此首先加载属性)。
答案 1 :(得分:0)
不知道这是否是最美丽的方式,但是可以使用
node.default[:bamboo][:agent][:attributes] = node[:bamboo][:agent][:attributes].merge(
'system.attr-3' => 'test3'
)
template 'bamboo-capabilities.properties' do
path "#{node[:bamboo][:agent][:data_dir]}/bin/bamboocapabilities.properties"
source 'bamboo-capabilities.properties.erb'
cookbook 'bamboo'
owner node[:bamboo][:agent][:user]
group node[:bamboo][:agent][:group]
mode 0644
variables(
:options => node[:bamboo][:agent][:attributes]
)
notifies :restart, 'service[bamboo-agent]', :delayed
end
EDIT :: 好吧,这确实会产生一些问题 因为cookbook1是goint删除旧条目,当它最终到达时 在cookbook2食谱1,它将再次添加条目 这导致每个厨师运行重启