3

基本製品 (Mediaflux) をインストールするためのクックブックと、特定の特殊なユースケース (DaRIS) に合わせて調整する 2 つ目のクックブックがあります。最初のクックブックのレシピは「ベース インストール」を実行するために実行され、2 番目のクックブックのレシピはインストールを「調整」するために実行されます。

ある時点で、ベースのクックブック/レシピによって作成されたファイルがあり、2 番目のクックブック/レシピに追加する必要があるファイルがあります。どちらの場合も、このファイルにはテンプレートの展開が必要です。

これを実装する良い方法を見つけようとしています。

  • 最も簡単なアイデアは、両方のクックブックにテンプレートのコピーを置き、両方のレシピでバージョン テンプレートを展開し、最初のレシピで作成されたファイル を上書きするために 2 番目のレシピに依存することです。

    • テンプレートのコピーが 2 つあるため、これは DRY ではありません。

    • これが「コーシャ」であるかどうかはわかりません... あるテンプレート展開が別のテンプレート展開を破壊する.

  • バリエーションとして、(基本レシピで) 1 つのテンプレート展開のみを使用し、クックブック名​​をパラメーター化して、2 番目のレシピをランリストに追加すると、最初のレシピが別のバージョンのテンプレートを使用するようにします。

    • これもDRYではありません。

    • ベースレシピがテンプレートの仕立てレシピの展開パラメータを認識していないという問題があります。(たぶん、テンプレートはノード属性から直接それらを取得できます...)

理想的には、次のいずれかを実行できるようにしたいと考えています。

  • 展開時に 2 つの (DRY) テンプレートを組み合わせたテンプレートを作成します。

  • 最初のレシピによって作成されたファイルに追加する方法で、2 番目の (テーラリング) テンプレートを展開します。

  • 「テンプレート」リソースを取得して、1 回の操作で 2 つのテンプレートを 1 つのファイルに展開します。

これらのことを行う方法はありますか?

私が見逃した別のアプローチはありますか?

4

2 に答える 2

3

シェフのドキュメントでは、テンプレートを取得する場所を指定できるオプションの「クックブック」属性について説明しています。

template "/path/to/this/file" do
  source "file.erb"
  cookbook "myothercookbook"
  mode 0440
  owner "me"
  group "me"
  variables({
     :var1 => node[:mycurrentcookbook][:var1],
     :var2 => node[:mycurrentcookbook][:var2]
  })
end

これにより、共通のテンプレートを再利用できます。

于 2013-10-23T16:48:21.703 に答える
0

私自身の質問に部分的に答えるために、1 つのテンプレートに Ruby の「render」メソッドを使用して別のテンプレートを組み込むことができます。これはここに文書化されています: http://docs.opscode.com/resource_template.html#partial-templates

于 2013-10-23T05:24:08.097 に答える