class Chef::Knife::DataBagFromFile

Public Instance Methods

loader() click to toggle source
# File lib/chef/knife/data_bag_from_file.rb, line 69
def loader
  @loader ||= Knife::Core::ObjectLoader.new(DataBagItem, ui)
end
read_secret() click to toggle source
# File lib/chef/knife/data_bag_from_file.rb, line 53
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_from_file.rb, line 73
def run
  if config[:all] == true
    load_all_data_bags(@name_args)
  else
    if @name_args.size < 2
      ui.msg(opt_parser)
      exit(1)
    end
    @data_bag = @name_args.shift
    load_data_bag_items(@data_bag, @name_args)
  end
end
use_encryption() click to toggle source
# File lib/chef/knife/data_bag_from_file.rb, line 61
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

Private Instance Methods

data_bags_path() click to toggle source
# File lib/chef/knife/data_bag_from_file.rb, line 87
def data_bags_path
  @data_bag_path ||= "data_bags"
end
find_all_data_bag_items(data_bag) click to toggle source
# File lib/chef/knife/data_bag_from_file.rb, line 95
def find_all_data_bag_items(data_bag)
  loader.find_all_objects("./#{data_bags_path}/#{data_bag}")
end
find_all_data_bags() click to toggle source
# File lib/chef/knife/data_bag_from_file.rb, line 91
def find_all_data_bags
  loader.find_all_object_dirs("./#{data_bags_path}")
end
load_all_data_bags(args) click to toggle source
# File lib/chef/knife/data_bag_from_file.rb, line 99
def load_all_data_bags(args)
  data_bags = args.empty? ? find_all_data_bags : [args.shift]
  data_bags.each do |data_bag|
    load_data_bag_items(data_bag)
  end
end
load_data_bag_items(data_bag, items = nil) click to toggle source
# File lib/chef/knife/data_bag_from_file.rb, line 106
def load_data_bag_items(data_bag, items = nil)
  items ||= find_all_data_bag_items(data_bag)
  item_paths = normalize_item_paths(items)
  item_paths.each do |item_path|
    item = loader.load_from("#{data_bags_path}", data_bag, item_path)
    item = if use_encryption
             secret = read_secret
             Chef::EncryptedDataBagItem.encrypt_data_bag_item(item, secret)
           else
             item
           end
    dbag = Chef::DataBagItem.new
    dbag.data_bag(data_bag)
    dbag.raw_data = item
    dbag.save
    ui.info("Updated data_bag_item[#{dbag.data_bag}::#{dbag.id}]")
  end
end
normalize_item_paths(args) click to toggle source
# File lib/chef/knife/data_bag_from_file.rb, line 125
def normalize_item_paths(args)
  paths = Array.new
  args.each do |path|
    if File.directory?(path)
      paths.concat(Dir.glob(File.join(path, "*.json")))
    else
      paths << path
    end
  end
  paths
end