Сочетание двух шаблонов из двух поваренных книг шеф-повара
У меня есть кулинарная книга для установки базового продукта (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