Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Chef data bag creation from a recipe

How to create a data bag from a recipe and avoid the exception when that data bag already exists?

The documentation shows that creating a data bag is done like this:

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

This works when the databag does not exist yet, but how to make it work if the databag already exists so it will not break the chef run?

like image 570
Evgeny Avatar asked Jul 15 '12 07:07

Evgeny


1 Answers

Try using the list method of Chef::DataBag and check whether your databag's name is present:

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

I use this to make my recipes more robust, or throw a more friendly error if an expected databag cannot be found on a Chef server.

like image 92
Tim Potter Avatar answered Sep 28 '22 05:09

Tim Potter