如何在以编程方式生成的Chef数据包中检测和删除过时的项目?

时间:2013-04-30 17:47:06

标签: chef

我有一个以下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

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

1 个答案:

答案 0 :(得分:0)

通过丢弃整个包,然后完全重新生成,我已经运气好了解决类似的问题。这真的只有在你有一个作家时才有效。