2012-07-15 90 views
6

如何从配方创建数据包并避免该数据包已存在时发生异常?从配方创建厨师数据包

文档显示,创建一个数据包像这样做:

new_databag = Chef::DataBag.new 
new_databag.name('unique_name') 
new_databag.save 

这工作时,databag还不存在,但如何使其工作,如果databag已经存在,所以它不会破厨师跑?

回答

12

尝试使用厨师:: DataBag的list方法和检查databag的名字是否存在:

require 'chef/data_bag' 

unless Chef::DataBag.list.key?('unique_name') 
    new_databag = Chef::DataBag.new 
    new_databag.name('unique_name') 
    new_databag.save 
end 

我使用它来使我的食谱更健壮,或者如果预期databag抛出一个更友好的错误无法在厨师服务器上找到。

+0

我认为“如果厨师:: DataBag.list.key?”测试应该是一个除非。在这种情况下,如果它已经存在以通过该测试,那么您只能制作新的数据库。正确?感谢您指出模式:D – 2015-01-26 22:06:33