class KnifeUploader::UploaderDataBagDiff
Public Instance Methods
diff_data_bag_item_files(bag_name1, bag_name2)
click to toggle source
# File lib/chef/knife/uploader_data_bag.rb, line 233 def diff_data_bag_item_files(bag_name1, bag_name2) ensure_data_bag_dir_exists(bag_name1) ensure_data_bag_dir_exists(bag_name2) items_to_compare = {} processed_items = Set.new() list_data_bag_item_ids(bag_name1).each do |item_id| item2 = load_data_bag_item_file(bag_name2, item_id, :can_skip) if item2 item1 = load_data_bag_item_file(bag_name1, item_id, :must_exist) processed_items << item_id items_to_compare[item_id] = [item1, item2] end end list_data_bag_item_ids(bag_name2).each do |item_id| unless processed_items.include?(item_id) item1 = load_data_bag_item_file(bag_name1, item_id, :can_skip) if item1 item2 = load_data_bag_item_file(bag_name2, item_id, :must_exist) items_to_compare[item_id] = [item1, item2] end end end if items_to_compare.empty? ui.error("Did not find any data bag items to compare between #{bag_name1} and #{bag_name2}") return end # Find at least one data bag item on the Chef server. This is necessary to be able to # decrypt data bags for comparison. data_bag1 = ridley.data_bag.find(bag_name1) item = nil items_to_compare.keys.sort.each do |item_id| item = data_bag1.item.find(item_id) break if item end unless item fatal_error("Could not find any of the following items in the data bag #{bag_name1}: " + items_to_compare.keys.sort.join(', ')) end items_to_compare.sort.each do |item_id, attributes_pair| item.id = item_id diff_data_bag_item(item, item_id, *attributes_pair, 'Differences for', "local #{bag_name1}", "local #{bag_name2}") end end
run_internal()
click to toggle source
# File lib/chef/knife/uploader_data_bag.rb, line 282 def run_internal if name_args.size < 1 || name_args.size > 2 ui.fatal("One or two arguments (data bag names) expected") show_usage exit(1) end report_errors do if name_args.size == 1 @dry_run = true report_errors { set_data_bag_items(name_args.first) } else diff_data_bag_item_files(name_args[0], name_args[1]) end end end