2013-06-05 19 views

答えて

72

私が見ているように、どのレシピもそれ自身で空のマシンで実行できるはずです。したがって、レシピAのレシピBがレシピBに依存する場合は、常にinclude_recipeを使用します。

たとえば、2つの料理ブック、tomcat、java。 TomcatにはJavaが必要です。

  1. ユーザーがtomcatをインストールしたい場合、彼は実際にインストールするために他の料理ブックが必要であるとは思わないかもしれません。彼はtomcatのレシピを実行し、 "No java found"のような完全に役に立たないエラーメッセージで失敗するか、さらに悪いことに成功しますが、Javaがインストールされていないため、ユーザーはTomcatを起動できません。 「料理のJavaが見つからない」:

  2. しかしinclude_recipe 'java'ラインは、メタデータにdepends 'java'ラインを必要とTomcatの料理であり、ユーザーTomcatをインストールしようと、理解しやすいエラーメッセージが表示されます。このようにして、実際にはユーザーは実際にレシピを実行せずにメタデータを読むことで、独自の(または自動ツールでも)依存関係をダウンロードできます。

+7

レシピの繰り返しを避けることについてシェフがどのように知的なのですか?だからあなたの料理本が 'parent'に依存している場合、あなたは' include_recipe parent'といくつかの無意味な魂が 'parent'を実行リストに追加します、' parent :: default.rb'は2回実行されますか? 'parent'が[正しく作られている]場合(http://docs.opscode.com/chef_why.html#idempotence)、マシンに何も悪影響はありませんが、ブートストラップ/コンバージするときにどれくらい時間が掛かりますかノード?シェフが重複を避けるために自動化されていない場合は、手動で回避することをお勧めしますか? –

+6

同じレシピを複数回ロードしません。すでに見たことがあればスキップします。 –

+0

私はそれが偶像崇拝の恩恵であると思います:あなたが何回実行しても同じ結果を出すことが保証されているなら、すでに実行されていればスキップすることができます!ありがとうDraco。 –

1

すべてのロジックは実行リストで制御する必要があります。クックブックは、人々が思うように再利用することはできません。すべてinclude_recipeは、実行リストが何をしようとしているかを把握するためにユーザーが見なければならない別の場所を追加するので、明示的にして実行リストに入れます。

+1

私は依存関係を明示的にするために 'include_recipe'を使うべきだと考えます。 – user1071847

関連する問題