レシピでChef環境を見つける方法


30

現在の環境が「dev」の場合にのみ、cookbook_fileリソースを実行します。これはどのように表現できますか?

ドキュメントはこれを示唆しています:

レシピでは、次のようなコードブロックが役立ちます。

qa_nodes = search(:node,"chef_environment:QA")      
qa_nodes.each do |qa_node|                          
    # Do useful specific to qa nodes only
end

しかし、私はそれが私が望むものかどうかわかりません-それがループであるという事実は間違っているようです。

回答:


46

ノードのchef_environment Ruby属性(通常のChef属性ではない)を確認します。

if node.chef_environment == "dev"
  # stuff
end

7
具体的には、chef_environmentは、ノードの環境の値を返すChef :: Nodeオブジェクトのメソッドです。これはノード属性ではないため、混同しないでください。
jtimberman

ありがとう@jtimberman。環境はノードの属性であると常に考えていましたが、そうではないことは理にかなっています。
ティムポッター

3
素晴らしい、これは動作します。だから私の元の質問への答えは追加することonly_if { node.chef_environment == "dev" }です。確認済み。
スティーブベネット

この回答を機能させることができませんでした。この構文は私のために動作します: if "#{node.chef_environment}" == "dev"
spuder

2

別のエレガントな方法:

if ['production','development'].include? node.chef_environment
    #do something here
end
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.