シェフのグラファイトレポ のラッパークックブックを作成しようとしています。
レシピ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に配置します。これは一般的な方法ですか?あまりドライな感じはしませんが、もっときれいな方法は考えられません。
あなたはかなり近いです。ラッパークックブックに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リポジトリからの簡単な使用例
#ファイル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
knife
を使用する場合は、パッチを作成してアップストリームとマージすることをお勧めします。これは、knifeがgitブランチのマージを自動的に実行し、最初に変更した内容を追跡できるためです。
ラッパークックブックのファイルを単に上書きすることは、以前は遭遇しなかった方法ですが、面白そうです^^欠点:アップストリームの変更を手動で維持して変更したテンプレートにマージする必要があり、gitにほとんどの作業を行わせるよりも作業が多い場合がありますあなたのために。
3番目の方法:エンドユーザーが使用するクックブックを直接制御できる場合に機能する「クックブックシャドウイング」(非推奨)に依存します。 http://tickets.opscode.com/browse/CHEF-2308 ==
chef 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/