diff options
author | Anthony Goddard <goddardanthony@gmail.com> | 2011-05-20 23:35:27 -0400 |
---|---|---|
committer | Nuo Yan <nuo@opscode.com> | 2011-06-02 16:38:38 -0700 |
commit | 3b02f5bc41dabea4ecc2f3c45e7abc0ae9b8a60e (patch) | |
tree | ae888ab905c0f7456231a3b1cadf012f54cd8b88 | |
parent | ee2890e890811275758d61518951d535bb5bcb73 (diff) | |
download | chef-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.rb | 30 | ||||
-rw-r--r-- | chef/lib/chef/knife/client_bulk_delete.rb | 26 |
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 |