Chef infra 主厨菜谱执行

Chef infra 主厨菜谱执行,chef-infra,Chef Infra,我有以下代码: 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 问题在于,chef忽略了包含“hashicorp vault:

我有以下代码:

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
问题在于,chef忽略了包含“hashicorp vault::default”的
,并首先执行其他代码,因此它会崩溃,因为未安装vault


如何强制首先执行
hashicorp vault::default

您需要将代码移动到收敛时间,以便在vault配方中定义的资源已收敛,而不仅仅是定义:

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
在配方的其余部分(或其他更高版本的配方)中,要获取此机密,请使用
节点。运行_state['rest']
此特定哈希不会保存为节点对象的一部分,因此不会将机密泄漏到chef服务器中


此行为是由于chef编译配方然后聚合其中的资源的方式造成的。您可以找到有关

的更多详细信息。您需要将代码移动到聚合时间,以便聚合vault配方中定义的资源,而不仅仅是定义资源:

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
在配方的其余部分(或其他更高版本的配方)中,要获取此机密,请使用
节点。运行_state['rest']
此特定哈希不会保存为节点对象的一部分,因此不会将机密泄漏到chef服务器中


这种行为是由于chef编译菜谱,然后在其中聚合资源的方式造成的。您可以找到有关

的更多详细信息。您的问题是在聚合时而不是在编译时执行其余代码,请参阅您的问题是在聚合时而不是在编译时执行其余代码,请参阅