summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJose Asuncion <jeunito@gmail.com>2016-11-20 18:01:56 -0800
committerJose Asuncion <jose.asuncion@gmail.com>2016-11-29 08:43:51 -0800
commit7155ed0447bf558536ed76f109e28fe72848dbe4 (patch)
tree0d72fa819a891a2305e6379e65b44957f2a6f615
parent1991cf97660a38e704eb4cd9609ed6ea84a35442 (diff)
downloadchef-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.rb22
-rw-r--r--spec/spec_helper.rb2
-rw-r--r--spec/unit/knife/client_delete_spec.rb16
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)