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

时间:2018-02-27 16:10:29

标签: ruby amazon-web-services chef cookbook

我正在研究这个从加密数据包项目中分配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

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

1 个答案:

答案 0 :(得分: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