Class: Chef::Knife::DataBagCreate

Inherits:
Chef::Knife show all
Defined in:
lib/chef/knife/data_bag_create.rb

Instance Attribute Summary

Attributes inherited from Chef::Knife

#name_args, #ui

Instance Method Summary collapse

Methods inherited from Chef::Knife

#api_key, category, common_name, #configure_chef, #create_object, #delete_object, deps, #format_rest_error, guess_category, #highlight_config_error, #humanize_exception, #humanize_http_exception, inherited, #initialize, list_commands, load_commands, load_deps, msg, #noauth_rest, #parse_options, #read_config_file, reset_subcommands!, #rest, run, #run_with_pretty_exceptions, #server_url, #show_usage, snake_case_name, subcommand_category, subcommand_class_from, subcommand_loader, subcommands, subcommands_by_category, ui, unnamed?, #username

Methods included from Mixin::ConvertToClassName

#convert_to_class_name, #convert_to_snake_case, #filename_to_qualified_string, #snake_case_basename

Constructor Details

This class inherits a constructor from Chef::Knife

Instance Method Details

#read_secretObject



43
44
45
46
47
48
49
# File 'lib/chef/knife/data_bag_create.rb', line 43

def read_secret
  if config[:secret]
    config[:secret]
  else
    Chef::EncryptedDataBagItem.load_secret(config[:secret_file])
  end
end

#runObject



59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/chef/knife/data_bag_create.rb', line 59

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

  # 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_encryptionObject



51
52
53
54
55
56
57
# File 'lib/chef/knife/data_bag_create.rb', line 51

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