14

include_recipe only_if何らかの条件を満たしたい。次のコードはエラーを発生させませんが、only_if条件も気にしないため、どのような場合でも実行されます。

include_recipe "cubrid" do
    only_if "hostname | grep 'blahblahshouldnotmatch'"
end

条件付きでのみ可能include_recipeですか?

4

4 に答える 4

3

上記は私にとってはうまくいきませんでしたが、次のことはうまくいきました:

if node["hostname"].include? "node2"
  include_recipe "cubrid"
end
于 2015-04-24T11:45:55.577 に答える
0

示唆するすべての回答で

include_recipe "foo" if node['bar'] == 'baz'

非常に重要なことを 1 つ忘れています。これはコンパイル段階で評価され、実行中に node['bar'] が変更された場合、この if は間違った結果をもたらします。価値。

これは悪い習慣だと主張する人もいますが、それを行う前によく考えてください。ほんの一例です。chef-client の実行でパッケージをインストールすることは一般的な方法です。その後 ohai プラグイン パッケージをリロードすることは良い習慣と見なすことができますが、コードで何が起こるか:

include_recipe "my_cookbook::install" unless node['packages'].key?('mypackage')

同じクライアント実行で以前に実行されたクックブックのどこかに mypackage がインストールされている場合はどうなりますか? 正しい答えは、レシピが含まれるということですが、コードから明らかなように、含まれていないことが期待されます。

残念ながら、include_recipe と可能な条件の両方がコンパイルされた段階で評価されるため、少なくともこの問題を解決する方法はわかりません。私の知る限り、同じシェフクライアントの実行で他のクックブックによって実行されたアクションに基づいて、レシピを条件付きで含める方法はありません。

于 2019-03-08T11:41:58.967 に答える