2

我有一个以下 Chef 定义,它创建一个每个节点的数据包并用与节点相关的项目填充它:

define :nagios_monitor, :command => "command", :description => "", :mon_name => "" do
    if not Chef::DataBag.list.key?(node[:hostname] + "_nagios_services")
        new_databag = Chef::DataBag.new
        new_databag.name(node[:hostname] + "_nagios_services")
        new_databag.save
    end
    databag = Chef::DataBag.list[node[:hostname] + "_nagios_services"]

    payload = {
        "id" => params[:mon_name],
        "command" => params[:command],
        "description" => params[:description]
    }
    databag_item = Chef::DataBagItem.new
    databag_item.data_bag(node[:hostname] + "_nagios_services")
    databag_item.raw_data = payload
    databag_item.save
end

当我nagios_monitor向食谱添加新资源但它不会检测到资源删除时,它运行良好。我想我应该在代码中的某处迭代数据包项,以检查我的配置中是否仍然存在某个项目,但我只是找不到合适的位置。从数据包中清除过时项目的规范方法是什么?

4

1 回答 1

0

我很幸运通过丢掉整个袋子然后完全重新生成它来解决类似的问题。不过,这仅在您只有一个作家时才有效。

于 2013-09-27T03:17:27.407 回答