无法使用chef属性检索加密数据包的数据条目项

问题描述 投票:0回答:1

我正在研究这个从加密数据包项目中分配api密钥的方法。要检索数据包项目,我在查询中使用chef属性。这是我正在做的分配属性

ruby_block "get_my_region" do
  block do
    node.set['aws']['account_number'] = `curl -s http://169.254.169.254/latest/dynamic/instance-identity/document|grep region|awk -F\\" '{print $4}'`.chop
    node.save
  end
  action :create
end

ruby_block "get_account" do
    block do
      node.set['aws']['region'] = `curl -s http://169.254.169.254/latest/dynamic/instance-identity/document | grep -oP '(?<="accountId" : ")[^"]*(?=")'`.chop
      node.save
    end
    action :create
end

一旦属性被分配,我正在调用模板以使用分配的属性到配置文件

template '/etc/default/polymur-proxy' do
  source 'polymur-proxy.erb'
  notifies :restart, 'service[polymur-proxy]', :delayed
  variables(
  api_key: (api_keys["#{node['aws']['region']}"]["#{node['aws']['account_number']}"]["key"]).to_s,
  )
end

问题是在调试时我可以看到属性被分配了正确的值但是在查询中使用它们时它们返回空。如果任何人有任何建议,这将有所帮助

ruby amazon-web-services chef cookbook
1个回答
0
投票

您正在体验Chef's two pass执行模型,在ruby_block资源调用之前评估模板变量。你可以用懒惰的块包裹api_keys

但是,无需在AWS元数据端点上手动调用curl。无论如何,Chef's ohai ec2插件正在提取它们 - node["ec2"]["account_id"]node["ec2"]["availability_zone"](只需在这里删除az id,trgsub)。您可以将此权限传递给模板,甚至可以直接在模板中使用node

© www.soinside.com 2019 - 2024. All rights reserved.