在大厨食谱中,我有多个资源被称为
template "blah_path/file1.conf"
source "recipe/file1.conf"
variables ( k1: v1)
end
template "blah_path/file2.conf"
source "recipe/file2.conf"
variables ( k2: v2)
end
.
.
template "blah_path/file10.conf"
source "recipe/file10.conf"
variables ( k10: v10)
end
是否可以在单一资源下组合上述步骤? TMK,如果我尝试创建自己的资源/提供者,我不能直接调用其中的其他资源。
在编写厨师食谱时,有没有更好的方法来抽象这样的代码跟踪?
提前致谢
答案 0 :(得分:0)
不是将其隐藏在LWRP中,而是可以通过一些循环来干掉代码。 根据您的确切代码,这样的东西会起作用:
files = { 'file1.conf' => {k1: v1}, 'file2.conf' => {k2: v2, k3: v3}, ... }
files.each do |filename, params|
template "blah_path/#{filename}"
source "recipe/#{filename}"
variables params
end
end
使用托管Chef时,我喜欢将应用程序配置存储在编码数据包中,并使用以下代码生成配置文件:
configs = Chef::DataBag.load('config').keys
configs.each do |config|
json = Chef::EncryptedDataBagItem.load("config", config, secret)[node.chef_environment]
yaml = {node.chef_environment => json}.to_yaml
file "#{node[cookbook_name]['project_dir']}/shared/config/#{config}.yml" do
content yaml
owner "ubuntu"
group "ubuntu"
mode "0770"
action :create
end
end