Chef infra 从配方创建厨师数据包

Chef infra 从配方创建厨师数据包,chef-infra,chef-recipe,Chef Infra,Chef Recipe,如何从配方创建数据包,并在该数据包已经存在时避免异常 文档显示,创建数据包的过程如下: new_databag = Chef::DataBag.new new_databag.name('unique_name') new_databag.save 当数据包尚不存在时,此方法有效,但如果数据包已存在,如何使其工作,从而不会中断chef运行?尝试使用chef::Dataag的列表方法,并检查您的数据包的名称是否存在: require 'chef/data_bag' unless Chef::D

如何从配方创建数据包,并在该数据包已经存在时避免异常

文档显示,创建数据包的过程如下:

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

当数据包尚不存在时,此方法有效,但如果数据包已存在,如何使其工作,从而不会中断chef运行?

尝试使用chef::Dataag的
列表
方法,并检查您的数据包的名称是否存在:

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
我使用它使我的食谱更加健壮,或者在Chef服务器上找不到预期的数据包时抛出一个更友好的错误。

我认为“if Chef::dataag.list.key?”测试应该是一个例外。在这种情况下,只有在新数据包已经存在的情况下才能通过该测试。对的谢谢你指出了这个模式:D