我有以下代码:
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'
并首先执行其他代码,因此崩溃是因为未安装Vault。
如何强制首先执行hashicorp-vault::default
?
答案 0 :(得分: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
上找到更多详细信息