Class: KnifeUploader::UploaderDataBagDiff
- Inherits:
-
UploaderDataBagCommand
- Object
- Chef::Knife
- BaseCommand
- UploaderDataBagCommand
- KnifeUploader::UploaderDataBagDiff
- Includes:
- BaseCommandMixin
- Defined in:
- lib/chef/knife/uploader_data_bag.rb
Instance Method Summary collapse
Methods included from BaseCommandMixin
Methods inherited from UploaderDataBagCommand
#data_bag_item_id_from_path, #diff_data_bag_item, #ensure_data_bag_dir_exists, #get_data_bag_dir, #list_data_bag_item_files, #list_data_bag_item_ids, #load_data_bag_item_file, #override_attributes, #set_data_bag_items, #time
Methods inherited from BaseCommand
#debug, #diff, #diff_color, #get_chef_repo_path, #get_knife_config_path, #initialize, #locate_config_value, #parsed_knife_config, #report_errors, #ridley, #run
Constructor Details
This class inherits a constructor from KnifeUploader::BaseCommand
Instance Method Details
#diff_data_bag_item_files(bag_name1, bag_name2) ⇒ Object
225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 |
# File 'lib/chef/knife/uploader_data_bag.rb', line 225 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 ⇒ Object
274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 |
# File 'lib/chef/knife/uploader_data_bag.rb', line 274 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 |