厨师食谱订单执行

时间:2017-10-25 09:30:56

标签: chef

我有以下代码:

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

1 个答案:

答案 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

上找到更多详细信息