Повторное использование шаблона по разным рецептам - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть поваренная книга шеф-повара со многими рецептами, которые имеют такой же код, помимо других конкретных вещей.

template 'stack_file' do
    local true
    source File.join(base_dir, 'stack_templates/admin.yml.erb')
    path File.join(base_dir, 'stacks/admin.yml')
    variables(context)
end

template 'settings_file' do
    sensitive true
    local true
    source File.join(base_dir, 'config_templates/settings_admin.yml.erb')
    path File.join(base_dir, 'configs/settings_admin.yml')
    variables(context)
end

Можно ли каким-то образом поместить этот код в метод, который я вызову с помощью моего source_file, destination_file и variables?

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

Сделайте следующее:

  1. создайте новую кулинарную книгу.
  2. не создавайте в ней рецепты, а вместо этого создайте ресурс
  3. , вы можете определить любые параметры (входные данные, такие как исходный файл, файл dest и т. д., как вы упоминали)
  4. добавьте ваши шаблоны в новую кулинарную книгу.
  5. в других ваших кулинарных книгах, создайте зависимость от ранее созданной кулинарной книги.Это позволит вам вызывать ресурс, который вы там создали (помните, что когда вы вызываете ресурс из другой кулинарной книги и он создает шаблоны, он будет пытаться взять файл шаблона из текущей кулинарной книги, а не тот, где определен ресурс.Вот почему вам нужно указывать имя поваренной книги при создании шаблона (в общем ресурсе поваренной книги) - см. атрибут поваренной книги https://docs.chef.io/resource_template.html)
  6. Повторите для любого количества поваренных книг.
0 голосов
/ 11 февраля 2019

Полагаю, вы можете написать модуль и включить его в свои рецепты, как в обычном Ruby.

module StackFile
...the code you want to share...
end

Тогда вы можете использовать:

inlclude StackFile

или

Chef::Recipe.send(:include, StackFile)

или при использовании *_if условий

Chef::Resource.send(:include, StackFile)
...