Замена шаблона в кулинарной книге обертки
Я пытаюсь написать обертку поваренную книгу для шеф-повара графитового репо
В рецепте carbon.rb встречаются следующие строки:
template "#{node['graphite']['base_dir']}/conf/storage-schemas.conf" do
owner node['apache']['user']
group node['apache']['group']
end
где в templates / default /storage-schemas.conf есть файл storage-schemas.conf, который мне не нравится. Я могу отредактировать файл встроенным способом и достичь того, чего я хочу, но это не кажется хорошей практикой для шеф-повара, если я хочу иметь возможность регулярно обновлять репо без конфликтов слияния. Поэтому мне было интересно, смогу ли я решить эту проблему с помощью кулинарной книги обертки.
Мой первый хотя был что-то вроде
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. Это обычная практика? Это не очень сухо, но я не могу придумать более чистого пути.
3 ответа
Ты довольно близко Предполагая, что у вас есть измененная версия файла 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"
если вы хотите организовать файлы в своей кулинарной книге по-другому.
В качестве альтернативы ответу Дейва, вы также можете использовать chef-rewind
,
https://github.com/bryanwb/chef-rewind
Пример быстрого использования из репозитория github
# file postgresql / recipes / server.rb
template "/var/pgsql/data/postgresql.conf" do
source "postgresql.conf.erb"
owner "postgres"
end
# file 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
Создание патчей и слияние с апстримом рекомендуется при использовании knife
потому что нож выполняет некоторые действия по слиянию веток git автоматически, и вы можете отслеживать то, что вы изначально изменили.
Простая перезапись файлов в вашей кулинарной книге-обертке - это практика, с которой я раньше не сталкивался, но выглядит интересно ^^ Недостаток: вам нужно поддерживать и объединять вышестоящие изменения в ваш измененный шаблон вручную, и иногда это может оказаться более трудоемким, чем позволить git выполнять большую часть работы. для тебя.
Третий способ: использовать "затенение кулинарной книги" (не рекомендуется), которое работает, когда у вас есть прямой контроль над тем, какие кулинарные книги будет использовать конечный пользователь: http://tickets.opscode.com/browse/CHEF-2308
С шеф-поваром 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/