summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnthony Goddard <goddardanthony@gmail.com>2011-05-20 23:35:27 -0400
committerNuo Yan <nuo@opscode.com>2011-06-02 16:38:38 -0700
commit3b02f5bc41dabea4ecc2f3c45e7abc0ae9b8a60e (patch)
treeae888ab905c0f7456231a3b1cadf012f54cd8b88
parentee2890e890811275758d61518951d535bb5bcb73 (diff)
downloadchef-3b02f5bc41dabea4ecc2f3c45e7abc0ae9b8a60e.tar.gz
moved bulk deletion out of knife.rb, added client deletion into client_bulk_delete, fixes #CHEF-2271
-rw-r--r--chef/lib/chef/knife.rb30
-rw-r--r--chef/lib/chef/knife/client_bulk_delete.rb26
2 files changed, 24 insertions, 32 deletions
diff --git a/chef/lib/chef/knife.rb b/chef/lib/chef/knife.rb
index 351127e053..8cd1920216 100644
--- a/chef/lib/chef/knife.rb
+++ b/chef/lib/chef/knife.rb
@@ -497,36 +497,6 @@ class Chef
self.msg("Deleted #{obj_name}")
end
- def bulk_delete(klass, fancy_name, delete_name=nil, list=nil, regex=nil, &block)
- object_list = list ? list : klass.list(true)
-
- if regex
- to_delete = Hash.new
- object_list.each_key do |object|
- next if regex && object !~ /#{regex}/
- to_delete[object] = object_list[object]
- end
- else
- to_delete = object_list
- end
-
- ui.msg("The following clients will be deleted:")
- ui.msg("")
- ui.msg(ui.list(to_delete.keys.sort, :columns_down))
- ui.msg("")
- ui.confirm("Are you sure you want to delete these clients")
-
- to_delete.each do |name, object|
- if Kernel.block_given?
- block.call(name, object)
- else
- object.destroy
- end
- output(format_for_display(object)) if config[:print_after]
- self.msg("Deleted #{fancy_name} #{name}")
- end
- end
-
def rest
@rest ||= begin
require 'chef/rest'
diff --git a/chef/lib/chef/knife/client_bulk_delete.rb b/chef/lib/chef/knife/client_bulk_delete.rb
index 1a2b3bfa97..1da69f40d3 100644
--- a/chef/lib/chef/knife/client_bulk_delete.rb
+++ b/chef/lib/chef/knife/client_bulk_delete.rb
@@ -33,8 +33,30 @@ class Chef
if @name_args.length < 1
ui.fatal("You must supply a regular expression to match the results against")
exit 42
- else
- bulk_delete(Chef::ApiClient, "client", nil, nil, @name_args[0])
+ end
+ all_clients = Chef::ApiClient.list(true)
+
+ matcher = /#{@name_args[0]}/
+ clients_to_delete = {}
+ all_clients.each do |name, client|
+ next unless name =~ matcher
+ clients_to_delete[client.name] = client
+ end
+
+ if clients_to_delete.empty?
+ ui.info "No clients match the expression /#{@name_args[0]}/"
+ exit 0
+ end
+
+ ui.msg("The following clients will be deleted:")
+ ui.msg("")
+ ui.msg(ui.list(clients_to_delete.keys.sort, :columns_down))
+ ui.msg("")
+ ui.confirm("Are you sure you want to delete these clients")
+
+ clients_to_delete.sort.each do |name, client|
+ client.destroy
+ ui.msg("Deleted client #{name}")
end
end
end