2016-05-25 7 views
0

default.rb属性ファイルからシェフデータバッグにアクセスする方法はありますか?アトリビュートファイルからChefデータバッグにアクセス

私は、最終的にテンプレートに渡される属性のハッシュとしてオペレーティングシステム環境変数の集合を表現する必要があります。これらの環境変数の中には、私が暗号化されたデータバッグに保存しているものがあります。残念ながらシェフはアトリビュートファイル内からレシピDSLにアクセスすることはできませんので、私が通常使っている方法は利用できません。data_bag_item

ありがとうございます。

+1

あなたはレシピDSLを持っていないかもしれませんが、私はさまざまな方法を呼び出すことについていかなる禁止もないと思います。 [Chef :: DataBagItem.load](http://www.rubydoc.info/github/opscode/chef/Chef/DataBagItem#load-class_method)。他のポスターが言うように、アトリビュートファイルにデフォルトを与え、レシピを使ってデータバッグをロードする方が良いでしょう。 – Martin

答えて

2

DSLヘルパーは使用できませんが、自分で直接Chef::DataBagItem.loadを使用することはできます。シェフコードをチェックして使用方法を確認してください(AFAIK APIは文書化していません)。

3

レシピの属性をデータバッグから設定して、期待どおりに使用できないのはなぜですか?通常、実行時にデータバッグが存在しない場合のために、ちょうど同じ値のデフォルト値をattributes/default.rbに設定します。属性には

ファイル:予想通り

default['cookbook_name']['secret_value'] = '__UNDEFINED__' 

次にレシピにユーザが入力すると属性を参照:

node.default['cookbook_name']['secret_value'] = data_bag_item('something', 'else') 

ザ・属性を格納する場所として使用されているファイル属性。レシピがコンパイルされると、最終結果が実行されるようスケジュールされます。価値がどこから来たのかは重要ではない。

+0

良い答えですが、レシピが一般化されているためです。デプロイメント対象のリストをループし、そのうちいくつかは信任環境変数を必要とします。だから私は属性ファイルに特殊化を保つことを望んでいました。 –

+0

各属性のラムダについてはどうしたら、レシピで呼び出すのですか?そうすれば、レシピで実行中であっても、属性ファイルにコードが論理的に保持されます。 'default ['cookbook_name'] ['secret_value'] = lambda {data_bag_item( 'something'、 'else')}'の行に沿って考える。アトリビュートファイルはまだRubyなので、必要に応じて '.call'を使ってレシピで評価が行われると機能するはずです。 –

+0

'node ['whatever'] = value'はシェフ12.8でエラーをスローします(少なくとも)。node.default ['whatever'] = value'を好きになります – Tensibai

関連する問題