我有一个以下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
资源但它没有检测到资源删除时,它运行良好。我想我应该在代码中的某处迭代数据包项目,以检查我的配置中是否仍存在某个项目,但我找不到合适的位置。什么是从数据包中清除过时物品的规范方法?
答案 0 :(得分:0)
通过丢弃整个包,然后完全重新生成,我已经运气好了解决类似的问题。这真的只有在你有一个作家时才有效。