厨师数据狗包装器说明书不会运行并出现错误"missing api key"



我创建了一个包装食谱,以从加密的数据袋中检索我的datadog api键,但看起来它在执行过程中没有运行。

这是我的代码:

属性/default.rb

node.default['datadog']['encrypted_data_bag'] = 'datadog'
node.default['datadog']['encrypted_data_bag_item'] = 'datadog_keys'

食谱/set_key.rb:

node.default['datadog']['api_key'] = data_bag_item(node['datadog']['encrypted_data_bag'], node['datadog']['encrypted_data_bag_item'])['api_key']
node.default['datadog']['application_key'] = data_bag_item(node['datadog']['encrypted_data_bag'], node['datadog']['encrypted_data_bag_item'])['chef']

和del_key:

node.rm['datadog']['api_key']
node.rm['datadog']['application_key']

我创建了一个名为datadog的角色,并运行此角色的运行列表,如下:

datadog-wrapper-0.1.0::set_key
datadog::dd-agent
datadog::dd-handler
datadog-wrapper-0.1.0::del_key

我希望此包装配方加载DataDog密钥,然后是DataDog配方运行,最后是另一个包装配方以删除键。但是当厨师运行时,我会收到一条错误消息:

ArgumentError
-------------
chef_handler[Chef::Handler::Datadog] (datadog::dd-handler line 52) had an error: ArgumentError: Missing Datadog Api Key

由于我是厨师和数据袋使用的新手,所以我有点困惑。为什么我的二传剂食谱不运行?

谢谢。

正如我在评论中提到的那样,您受两个通过模型的影响。您应该删除添加到厨师运行末端的资源中的密钥,或者由DD食谱资源触发为运行中的最后一个键。

ruby_block "clean datadog api attributes" do
  block do
    node.rm("datadog", "api_key")
    ....
  end
  subscribes :create, "template[<some dd template using api keys>]", :immediately
end

但是,它可能无法使用所有版本的DD食谱。从几个DD食谱版本中,可以将键存储在Node的运行状态下,该键未写入Chef Server。

node.run_state["datadog"] = {
  "api_key"         => datadog["api_key"],
  "application_key" => datadog["application_key"]
}

上面的示例是您问题的首选解决方案。

最新更新