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

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

В рецепте 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/

Другие вопросы по тегам