class Chef::Knife::DataBagCreate
def run
def run @data_bag_name, @data_bag_item_name = @name_args if @data_bag_name.nil? show_usage ui.fatal("You must specify a data bag name") exit 1 end begin Chef::DataBag.validate_name!(@data_bag_name) rescue Chef::Exceptions::InvalidDataBagName => e ui.fatal(e.message) exit(1) end # Verify if the data bag exists begin rest.get("data/#{@data_bag_name}") ui.info("Data bag #{@data_bag_name} already exists") rescue Net::HTTPClientException => e raise unless /^404/.match?(e.to_s) # if it doesn't exists, try to create it rest.post("data", { "name" => @data_bag_name }) ui.info("Created data_bag[#{@data_bag_name}]") end # if an item is specified, create it, as well if @data_bag_item_name create_object({ "id" => @data_bag_item_name }, "data_bag_item[#{@data_bag_item_name}]") do |output| item = Chef::DataBagItem.from_hash( if encryption_secret_provided? Chef::EncryptedDataBagItem.encrypt_data_bag_item(output, read_secret) else output end ) item.data_bag(@data_bag_name) rest.post("data/#{@data_bag_name}", item) end end end