diff options
author | Jose Asuncion <jeunito@gmail.com> | 2016-11-20 18:01:56 -0800 |
---|---|---|
committer | Jose Asuncion <jose.asuncion@gmail.com> | 2016-11-29 08:43:51 -0800 |
commit | 7155ed0447bf558536ed76f109e28fe72848dbe4 (patch) | |
tree | 0d72fa819a891a2305e6379e65b44957f2a6f615 | |
parent | 1991cf97660a38e704eb4cd9609ed6ea84a35442 (diff) | |
download | chef-7155ed0447bf558536ed76f109e28fe72848dbe4.tar.gz |
knife client delete should delete multiple nodes
Signed-off-by: Jose Asuncion <jeunito@gmail.com>
-rw-r--r-- | lib/chef/knife/client_delete.rb | 22 | ||||
-rw-r--r-- | spec/spec_helper.rb | 2 | ||||
-rw-r--r-- | spec/unit/knife/client_delete_spec.rb | 16 |
3 files changed, 29 insertions, 11 deletions
diff --git a/lib/chef/knife/client_delete.rb b/lib/chef/knife/client_delete.rb index 08cdf6c7dd..d8a79ef59b 100644 --- a/lib/chef/knife/client_delete.rb +++ b/lib/chef/knife/client_delete.rb @@ -35,23 +35,23 @@ class Chef banner "knife client delete CLIENT (options)" def run - @client_name = @name_args[0] - - if @client_name.nil? + if @name_args.length == 0 show_usage - ui.fatal("You must specify a client name") + ui.fatal("You must specify at least one client name") exit 1 end - delete_object(Chef::ApiClientV1, @client_name, "client") do - object = Chef::ApiClientV1.load(@client_name) - if object.validator - unless config[:delete_validators] - ui.fatal("You must specify --delete-validators to delete the validator client #{@client_name}") - exit 2 + @name_args.each do |client_name| + delete_object(Chef::ApiClientV1, client_name, "client") do + object = Chef::ApiClientV1.load(client_name) + if object.validator + unless config[:delete_validators] + ui.fatal("You must specify --delete-validators to delete the validator client #{client_name}") + exit 2 + end end + object.destroy end - object.destroy end end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index aac5a82f2a..dff2450dd8 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -68,6 +68,8 @@ require "chef/config" require "chef/chef_fs/file_system_cache" +require "chef/api_client_v1" + if ENV["CHEF_FIPS"] == "1" Chef::Config.init_openssl end diff --git a/spec/unit/knife/client_delete_spec.rb b/spec/unit/knife/client_delete_spec.rb index 82ef902e09..6f46253770 100644 --- a/spec/unit/knife/client_delete_spec.rb +++ b/spec/unit/knife/client_delete_spec.rb @@ -34,6 +34,22 @@ describe Chef::Knife::ClientDelete do @knife.run end + context "receives multiple clients" do + let(:clients) { [ "adam", "ben", "charlie" ] } + + before(:each) do + @knife.name_args = clients + end + + it "deletes all clients" do + clients.each do |client| + expect(@knife).to receive(:delete_object).with(Chef::ApiClientV1, client, "client") + end + + @knife.run + end + end + it "should print usage and exit when a client name is not provided" do @knife.name_args = [] expect(@knife).to receive(:show_usage) |