2017-10-25 4 views
0

Ich habe den folgenden Code:Chef Rezept Auftragsausführung

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 

Das Problem ist, dass Koch ignoriert include_recipe 'hashicorp-vault::default' und führt zuerst den anderen Code, so dass es abstürzt, weil Gewölbe nicht installiert ist.

Wie kann ich zwingen, hashicorp-vault::default an erster Stelle auszuführen?

+0

Sie Problem ist die Ausführung der Rest des Codes zu konvergieren Zeit statt der Kompilierung finden Sie unter https://codeanger.net/two-pass – Tensibai

Antwort

2

Sie müssen Ihren Code bewegen Zeit zu konvergieren, so dass die in dem Gewölbe Rezepte definierten Ressourcen und nicht nur definiert konvergierte wurden:

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 

Und im Rest des Rezepts (oder andere späte Rezepte), wo Sie wollen diese geheime Verwendung bekommen node.run_state['rest'] dieser spezifische Hash wird nicht als Teil des Node-Objekts gespeichert und als solches wird das Geheimnis nicht in den Chef-Server leckt.

Dieses Verhalten ist aufgrund der Art und Weise Koch Rezepte kompilieren und laufen dann die Ressourcen in ihm, können Sie weitere Details zu den coderanger's blog

Verwandte Themen