Chef datadog 包装器食谱不会 运行 并出现 "missing api key" 错误
Chef datadog wrapper cookbook won't run with "missing api key" error
我创建了一个包装器食谱来从加密的数据包中检索我的数据狗 api 密钥,但看起来它在执行期间没有 运行ning。
这是我的代码:
attributes/default.rb
node.default['datadog']['encrypted_data_bag'] = 'datadog'
node.default['datadog']['encrypted_data_bag_item'] = 'datadog_keys'
recipes/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
我希望这个包装器配方加载数据狗密钥,然后数据狗配方加载到 运行,最后另一个包装器配方来删除密钥。但是当 Chef 运行ning 时,我收到如下错误消息:
ArgumentError
-------------
chef_handler[Chef::Handler::Datadog] (datadog::dd-handler line 52) had an error: ArgumentError: Missing Datadog Api Key
由于我是 Chef 的新手和数据包的使用,所以我有点困惑。为什么我的 setter 食谱不是 运行ning?
谢谢。
正如我在评论中提到的,您受到 two pass model 的影响。您应该删除添加到 chef 运行 末尾的资源中的键或由作为 运行.
中最后一个调用的 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 cookbook。从几个 DD cookbook 版本开始,可以将密钥存储在未写入 Chef 服务器的节点 运行 状态中。
node.run_state["datadog"] = {
"api_key" => datadog["api_key"],
"application_key" => datadog["application_key"]
}
以上示例是您问题的首选解决方案。
我创建了一个包装器食谱来从加密的数据包中检索我的数据狗 api 密钥,但看起来它在执行期间没有 运行ning。
这是我的代码:
attributes/default.rb
node.default['datadog']['encrypted_data_bag'] = 'datadog'
node.default['datadog']['encrypted_data_bag_item'] = 'datadog_keys'
recipes/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
我希望这个包装器配方加载数据狗密钥,然后数据狗配方加载到 运行,最后另一个包装器配方来删除密钥。但是当 Chef 运行ning 时,我收到如下错误消息:
ArgumentError
-------------
chef_handler[Chef::Handler::Datadog] (datadog::dd-handler line 52) had an error: ArgumentError: Missing Datadog Api Key
由于我是 Chef 的新手和数据包的使用,所以我有点困惑。为什么我的 setter 食谱不是 运行ning?
谢谢。
正如我在评论中提到的,您受到 two pass model 的影响。您应该删除添加到 chef 运行 末尾的资源中的键或由作为 运行.
中最后一个调用的 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 cookbook。从几个 DD cookbook 版本开始,可以将密钥存储在未写入 Chef 服务器的节点 运行 状态中。
node.run_state["datadog"] = {
"api_key" => datadog["api_key"],
"application_key" => datadog["application_key"]
}
以上示例是您问题的首选解决方案。