include_recipe
only_if
何らかの条件を満たしたい。次のコードはエラーを発生させませんが、only_if
条件も気にしないため、どのような場合でも実行されます。
include_recipe "cubrid" do
only_if "hostname | grep 'blahblahshouldnotmatch'"
end
条件付きでのみ可能include_recipe
ですか?
include_recipe
only_if
何らかの条件を満たしたい。次のコードはエラーを発生させませんが、only_if
条件も気にしないため、どのような場合でも実行されます。
include_recipe "cubrid" do
only_if "hostname | grep 'blahblahshouldnotmatch'"
end
条件付きでのみ可能include_recipe
ですか?
上記は私にとってはうまくいきませんでしたが、次のことはうまくいきました:
if node["hostname"].include? "node2"
include_recipe "cubrid"
end
示唆するすべての回答で
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 と可能な条件の両方がコンパイルされた段階で評価されるため、少なくともこの問題を解決する方法はわかりません。私の知る限り、同じシェフクライアントの実行で他のクックブックによって実行されたアクションに基づいて、レシピを条件付きで含める方法はありません。