web-dev-qa-db-ja.com

例外を発生させずにシェフのレシピから戻る

例外を発生させずにシェフのレシピから戻る方法はありますか?

長いレシピがあるとしましょう。 Rubyブロックを開始に追加して、いくつかの条件(ディレクトリの存在など)をチェックし、処理を停止しますthis条件が成功した場合に例外を発生させずにレシピ(ただし、run_listの残りの部分を実行し続ける)。

条件付き実行(only_if/not_if)は問題を解決しません。これは、レシピ内のすべてのリソース呼び出しに条件を追加する必要があるためです。それらの多く。

Opscodeのwikiには コメント があり、コメント投稿者は同じことについて質問しますが、答えはありません。

4
HUB

レシピの実行を中止する方法(たとえば、何らかの条件のため)は、「return」ステートメントを使用することです。徹底的な議論は、 並列StackOverflowの質問 に対するjtimbermanの回答に表示されます。

2
yoniLavi

そのレシピを2つに分割し、ifステートメント内でinclude_recipeを使用します。たとえば、cookbooks/foo/default.rbの場合:

some_condition = File.exists?("/etc/whatever") # Your specific check here

if some_condition
    include_recipe "foo::conditional_bit"
end

条件付きレシピをcookbooks/foo/recipes/conditional_bit.rbに入れ、recipe[foo]を適切なノードの実行リストに追加します。

実行の順序は、Rubyブロックを指定した場合とは少し異なることに注意してください。条件は、「実行」ではなく、chef-client実行の「コンパイル」フェーズでチェックされます。 "フェーズ。詳細については、 シェフの実行の解剖学 ページを参照してください。

1
Tim Potter