# class Chef::Knife::DataBagCreate

### Public Instance Methods

read_secret() click to toggle source

    # File lib/chef/knife/data_bag_create.rb, line 45
    def read_secret
      if config[:secret]
        config[:secret]
      else
        Chef::EncryptedDataBagItem.load_secret(config[:secret_file])
      end
    end

run() click to toggle source

    # File lib/chef/knife/data_bag_create.rb, line 61
    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

      # create the data bag
      begin
        rest.post_rest("data", { "name" => @data_bag_name })
        ui.info("Created data_bag[#{@data_bag_name}]")
      rescue Net::HTTPServerException => e
        raise unless e.to_s =~ /^409/
        ui.info("Data bag #{@data_bag_name} already exists")
      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 use_encryption
                     Chef::EncryptedDataBagItem.encrypt_data_bag_item(output, read_secret)
                   else
                     output
                   end)
          item.data_bag(@data_bag_name)
          rest.post_rest("data/#{@data_bag_name}", item)
        end
      end
    end

use_encryption() click to toggle source

    # File lib/chef/knife/data_bag_create.rb, line 53
    def use_encryption
      if config[:secret] && config[:secret_file]
        ui.fatal("please specify only one of --secret, --secret-file")
        exit(1)
      end
      config[:secret] || config[:secret_file]
    end