Class: Chef::Knife::CookbookBulkDelete

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

Constant Summary

Constants inherited from Chef::Knife

DEFAULT_SUBCOMMAND_FILES

Instance Attribute Summary

Attributes inherited from Chef::Knife

#name_args

Instance Method Summary collapse

Methods inherited from Chef::Knife

#ask_question, #bulk_delete, category, #configure_chef, #confirm, #create_object, #delete_object, #edit_data, #edit_object, #file_exists_and_is_readable?, #format_for_display, #format_list_for_display, guess_category, inherited, #initialize, list_commands, load_commands, #load_from_file, #msg, msg, #output, #parse_options, #pretty_print, #rest, run, #show_usage, snake_case_name, #stdin, #stdout, subcommand_category, subcommand_class_from, subcommands, subcommands_by_category, unnamed?

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

#runObject



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/chef/knife/cookbook_bulk_delete.rb', line 31

def run
  unless regex_str = @name_args.first
    Chef::Log.fatal("You must supply a regular expression to match the results against")
    exit 42
  end

  regex = Regexp.new(regex_str)

  all_cookbooks = Chef::CookbookVersion.list
  cookbooks_names = all_cookbooks.keys.grep(regex)
  cookbooks_to_delete = cookbooks_names.inject({}) { |hash, name| hash[name] = all_cookbooks[name];hash }
  output(format_list_for_display(cookbooks_to_delete))

  confirm("Do you really want to delete these cookbooks? All versions will be deleted. (Y/N) ", false)
  
  confirm("Files that are common to multiple cookbooks are shared, so purging the files may disable other cookbooks. Are you sure you want to purge files instead of just deleting the cookbooks") if config[:purge]
  
  cookbooks_names.each do |cookbook_name|
    versions = rest.get_rest("cookbooks/#{cookbook_name}").values.flatten
    versions.each do |version|
      object = rest.delete_rest("cookbooks/#{cookbook_name}/#{version}#{config[:purge] ? "?purge=true" : ""}")
      Chef::Log.info("Deleted cookbook  #{cookbook_name.ljust(25)} [#{version}]")
    end
  end
end