Сочетание двух шаблонов из двух поваренных книг шеф-повара

У меня есть кулинарная книга для установки базового продукта (Mediaflux) и вторая кулинарная книга, которая адаптирует его для конкретного специализированного варианта использования (DaRIS). Рецепт первой кулинарной книги запускается для "базовой установки", а рецепт второй - для "настройки" установки.

В какой-то момент у меня есть файл, созданный базовой кулинарной книгой / рецептом, который требует добавления дополнительных материалов во вторую кулинарную книгу / рецепт. В обоих случаях для этого файла требуется расширение шаблона.

Я пытаюсь найти хороший способ реализовать это.

  • Простейшая идея состоит в том, чтобы иметь копию шаблона в обеих кулинарных книгах, и чтобы оба рецепта расширяли свой шаблон версии и полагались на 2-й рецепт для перезаписи файла, созданного первым.

    • Это не СУХОЙ, так как у меня есть две копии шаблона.

    • Я не уверен, что это "кошерный"... с одним шаблоном расширения шаблона другим.

  • Вариантом может быть попытка иметь только одно расширение шаблона (в базовом рецепте) и параметризацию имени поваренной книги... так что добавление второго рецепта в список выполнения заставит первый использовать другую версию шаблона.

    • Это тоже не СУХОЙ.

    • Существует проблема, о которой базовый рецепт не знает о параметрах расширения индивидуального рецепта для шаблона. (Может быть, шаблон может получить их непосредственно из атрибутов узла...)

В идеале я хотел бы иметь возможность выполнить одно из следующих действий:

  • Создайте шаблон, который объединяет два (СУХЫХ) шаблона при его расширении.

  • Разверните второй (пошив) шаблон таким образом, чтобы добавить его в файл, созданный по первому рецепту.

  • Получите ресурс "template", чтобы развернуть два шаблона в один файл за одну операцию.

Есть ли способ сделать что-нибудь из этого?

Есть ли другой подход, который я пропустил?

2 ответа

Решение

Документация chef описывает необязательный атрибут "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

Это позволяет повторно использовать общие шаблоны.

Чтобы частично ответить на мой собственный вопрос, один шаблон может включать в себя другой, используя метод Ruby "render". Это задокументировано здесь: http://docs.opscode.com/resource_template.html

Другие вопросы по тегам