结合两个厨师烹饪书中的两个模板

时间:2013-10-23 02:07:53

标签: chef chef-template

我有一本用于安装基础产品(Mediaflux)的食谱,以及为特定专用用例(DaRIS)定制它的第二本食谱。运行第一本食谱的配方进行“基础安装”,然后运行第二份食谱以“定制”安装。

有一次,我有一个由基本食谱/食谱创建的文件,需要在第二本食谱/食谱中添加额外的东西。在这两种情况下,此文件都需要模板扩展。

我正试图想出一个实现这个目标的好方法。

  • 最简单的想法是在两本烹饪书中都有一份模板副本,并让这两个食谱扩展其版本模板,并依赖第二篇食谱来覆盖由第一。

    • 这不是DRY,因为我有两个模板副本。

    • 我不确定这是“犹太洁食”......还有一个模板扩展clobber另一个。

  • 一种变化是尝试只有一个模板扩展(在基本配方中)并参数化菜谱名称...以便将第二个配方添加到运行列表会导致第一个配方使用不同的版本的模板。

    • 这也不是DRY。

    • 存在基本配方不了解剪裁配方的模板扩展参数的问题。 (也许模板可以直接从节点属性中获取它们......)

理想情况下,我希望能够做到以下其中一项:

  • 创建一个模板,在扩展时将两个(DRY)模板组合在一起。

  • 附加它的方式展开第二个(剪裁)模板。

  • 获取“模板”资源,在一次操作中将两个模板扩展为一个文件。

有没有办法做这些事情?

我错过了另一种方法吗?

2 个答案:

答案 0 :(得分:3)

主厨documentation描述了可选的“cookbook”属性,使您可以指定应从何处检索模板:

template "/path/to/this/file" do
  source "file.erb"
  cookbook "myothercookbook"
  mode 0440
  owner "me"
  group "me"
  variables({
     :var1 => node[:mycurrentcookbook][:var1],
     :var2 => node[:mycurrentcookbook][:var2]
  })
end

这样可以重复使用常用模板。

答案 1 :(得分:0)

要部分回答我自己的问题,一个模板可以使用Ruby“render”方法合并另一个模板。这在此处记录:http://docs.opscode.com/resource_template.html#partial-templates