2017-10-25 11 views
0

私は、次のコードを持っている:シェフのレシピオーダー実行

include_recipe 'hashicorp-vault::default' 
conn = Faraday.new(:url => 'http://127.0.0.1:8200') 

res = conn.put do |req| 
    req.url '/v1/sys/init' 
    req.body = '{"secret_shares": 1, "secret_threshold": 1}' 
end 

問題はシェフがinclude_recipe 'hashicorp-vault::default'を無視し、最初の他のコードを実行し、そのボールトがインストールされていないので、それがクラッシュするということです。

最初にhashicorp-vault::defaultを実行するにはどうすればよいですか?あなたがボールトレシピで定義されたリソースが収束し、ちょうど定義されていないされているので、時間を収束するようにコードを移動する必要があり

+0

の詳細を見つけることができますhttps://coderanger.net/two-pass – Tensibai

答えて

2

include_recipe 'hashicorp-vault::default' 

ruby_block 'get secret' do 
    block do 
    conn = Faraday.new(:url => 'http://127.0.0.1:8200') 
    node.run_state['res'] = conn.put do |req| 
     req.url '/v1/sys/init' 
     req.body = '{"secret_shares": 1, "secret_threshold": 1}' 
    end 
    end 
end 

レシピ(または他の後にレシピ)の残りの部分でどこあなたはこの秘密の使用を得たいですnode.run_state['rest']この特定のハッシュはノードオブジェクトの一部として保存されないので、秘密をシェフサーバーに漏らさないでしょう。

この動作が原因シェフがレシピをコンパイルし、それ内のリソースを収束する方法にあり、あなたはあなたの問題を参照して、収束時間の代わりに、コンパイル時にコードの残りの部分を実行しているcoderanger's blog

関連する問題