web-dev-qa-db-ja.com

ラッパークックブックのテンプレートの置き換え

シェフのグラファイトレポ のラッパークックブックを作成しようとしています。

レシピ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に配置します。これは一般的な方法ですか?あまりドライな感じはしませんが、もっときれいな方法は考えられません。

21
newmanne

あなたはかなり近いです。ラッパークックブックに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"

ラッパークックブック内のファイルを別の方法で整理する場合。

27
Dave S.

デイブの答えの代わりに、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
14
Sergio

knifeを使用する場合は、パッチを作成してアップストリームとマージすることをお勧めします。これは、knifeがgitブランチのマージを自動的に実行し、最初に変更した内容を追跡できるためです。

ラッパークックブックのファイルを単に上書きすることは、以前は遭遇しなかった方法ですが、面白そうです^^欠点:アップストリームの変更を手動で維持して変更したテンプレートにマージする必要があり、gitにほとんどの作業を行わせるよりも作業が多い場合がありますあなたのために。

3番目の方法:エンドユーザーが使用するクックブックを直接制御できる場合に機能する「クックブックシャドウイング」(非推奨)に依存します。 http://tickets.opscode.com/browse/CHEF-2308 ==

1
cmur2

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/

0
aka47