Подтвердить что ты не робот

Замена шаблона в поваренной книге обертки

Я пытаюсь написать куклую обертки для графического repo шеф-повара

В рецепте carbon.rb появляются следующие строки:

template "#{node['graphite']['base_dir']}/conf/storage-schemas.conf" do
  owner node['apache']['user']
  group node['apache']['group']
end

где в шаблонах /default/storage -schemas.conf есть файл storage-schemas.conf, который мне не подходит. Я могу редактировать файл inline и добиваться того, чего хочу, но это не похоже на хорошую практику шеф-повара, если я хочу, чтобы моя репо обновлялась без конфликтов слияния. Поэтому мне было интересно, могу ли я решить эту проблему с помощью кулинарной книги с оберткой.

Мое первое, хотя было что-то вроде

include_recipe "graphite"
template "#{node['graphite']['base_dir']}/conf/storage-schemas.conf" do
  owner node['apache']['user']
  group node['apache']['group']
end

где я бы просто перезапустил команду после того, как базовый рецепт закончил и поместил файл, который мне нужен, в wrappercookbook/templates/storage-schemas.conf.erb. Это обычная практика? Он не чувствует себя очень СУХОЙ, но я не могу придумать более чистый способ.

4b9b3361

Ответ 1

Ты довольно близко. Предполагая, что у вас есть модифицированная версия файла storage-schemas.conf.erb в вашей куковой книге обертки, вы можете просто сделать:

include_recipe "graphite"
begin
  r = resources(:template => "#{node['graphite']['base_dir']}/conf/storage-schemas.conf")
  r.cookbook "my-cookbook"
rescue Chef::Exceptions::ResourceNotFound
  Chef::Log.warn "could not find template to override!"
end

Вы также можете использовать строку, например:

r.source "graphite-stuff/my-storage-schemas.conf.erb"

если вы хотите упорядочить файлы в своей куковой книге обертки по-другому.

Ответ 2

В качестве альтернативы ответу Дэйва вы также можете использовать chef-rewind.

https://github.com/bryanwb/chef-rewind

Быстрый пример использования из репозитория github

# файл postgresql/recipes/server.rb

template "/var/pgsql/data/postgresql.conf" do
  source  "postgresql.conf.erb"
  owner "postgres"
end

# файл my-postgresql/recipes/server.rb

chef_gem "chef-rewind"
require 'chef/rewind'

include_recipe "postgresql::server"
# my-postgresql.conf.erb located inside my-postgresql/templates/default/my-postgresql.conf.erb
rewind :template => "/var/pgsql/data/postgresql.conf" do
  source "my-postgresql.conf.erb"
  cookbook_name "my-postgresql"
end

Ответ 3

Создание патчей и слияние с восходящим потоком - это рекомендуемая практика при использовании knife, потому что нож делает некоторые из ветвей слияния git автоматически для вас, и вы можете отслеживать, что вы изначально изменили.

Просто переписывание файлов в вашей куковой книге обертки - это практика, с которой я не сталкивался раньше, но выглядит интересно. ^ Недостаток: вам нужно вручную поддерживать и объединять восходящие изменения в свой модифицированный шаблон, и иногда это может быть больше работы, чем разрешение git сделайте большую часть материала для себя.

Третий способ: полагаться на "cookbook shadowing" (устаревший), который работает, когда у вас есть прямой контроль над тем, какие кулинарные книги будут использовать конечный пользователь: http://tickets.opscode.com/browse/CHEF-2308

Ответ 4

с шеф-поваром 12 вы можете использовать edit_resource

include_recipe 'communitycookbook'

edit_resource!(:template, '/etc/myapp.conf') do
  source 'other.erb'
  cookbook 'wrapper'
  variables.update(port: 8080)
end

больше об этом вы можете найти здесь: https://coderanger.net/rewind/