在厨师食谱

时间:2015-04-24 16:01:30

标签: chef

在大厨食谱中,我有多个资源被称为

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,如果我尝试创建自己的资源/提供者,我不能直接调用其中的其他资源。

在编写厨师食谱时,有没有更好的方法来抽象这样的代码跟踪?

提前致谢

1 个答案:

答案 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