Замена шаблона в поваренной книге обертки
Я пытаюсь написать куклую обертки для графического 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. Это обычная практика? Он не чувствует себя очень СУХОЙ, но я не могу придумать более чистый способ.
Ответы
Ответ 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/