如何让包装器菜谱在定义中使用其父模板?

时间:2014-05-21 22:16:47

标签: chef chef-recipe cookbook

我正在使用apache2供应商食谱和我自己的app-cookbook。在我的食谱中,我想使用网站的web_app定义并让它使用供应商食谱中定义的模板

#my-apache2/recipes/my-site.rb

web_app "my-site" do
    #template not specified here, so it should use default
    server_name "my-site.com"
    docroot "#{app_dir}/public"
end

结果是

Error executing action `create` on resource 'template[/etc/httpd/sites-available/my-site.conf]'
================================================================================

Chef::Exceptions::FileNotFound
------------------------------
Cookbook 'my-apache2' (1.0.0) does not contain a file at any of these locations:

因为它正在查看my-site食谱,而不是apache2模板目录。

我尝试了其他资源:

resources("template[web_app.conf.erb]").cookbook "my-apache2"

但是这个人的路径是根据资源参数(name)动态生成的。

#apache2/definitions/web_app.rb

application_name = params[:name] 
template "#{node['apache']['dir']}/sites-available/#{application_name}.conf" do
    source   params[:template]
...

因此它返回此返回错误

Chef::Exceptions::ResourceNotFound
----------------------------------
Cannot find a resource matching template[web_app.conf.erb] (did you define it first?)

有没有办法让它使用供应商食谱的模板而不将其复制到我的包装食谱?

1 个答案:

答案 0 :(得分:4)

查看定义的来源: https://github.com/onehealth-cookbooks/apache2/blob/45f08b4060f23573dbec65be32bf25baee56b734/definitions/web_app.rb#L35

如果您为定义提供了cookbook参数,那么它将在您指定的任何食谱中查找模板文件。 (在这种情况下,听起来你想指定apache2)

web_app "my-site" do
  server_name "my-site.com"
  docroot "#{app_dir}/public"
  cookbook 'apache2'
end