Blob Blame History Raw
From 55b72401b7cfce4c8b9edec827a96ab8b815ed30 Mon Sep 17 00:00:00 2001
From: Jay Lau <liugya@cn.ibm.com>
Date: Sun, 6 Apr 2014 13:46:53 +0800
Subject: [PATCH] Enable delete multiple server groups in one request

Currently, "nova server-group-delete" can only delete one server
group in one request, this patch was enabling nova client support
removing multiple server groups in one request.

Change-Id: I373151bc27cbe8617e2023ba99f6fb3f0108d592
Closes-Bug: #1302954

Conflicts:
	novaclient/tests/v1_1/test_shell.py
---
 novaclient/tests/v1_1/fakes.py      |  6 ++++++
 novaclient/tests/v1_1/test_shell.py |  5 +++++
 novaclient/v1_1/shell.py            | 21 ++++++++++++++++-----
 3 files changed, 27 insertions(+), 5 deletions(-)

diff --git a/novaclient/tests/v1_1/fakes.py b/novaclient/tests/v1_1/fakes.py
index 50658c1..61926c1 100644
--- a/novaclient/tests/v1_1/fakes.py
+++ b/novaclient/tests/v1_1/fakes.py
@@ -405,6 +405,12 @@ class FakeHTTPClient(base_client.HTTPClient):
         fakes.assert_has_keys(body['server'], optional=['name', 'adminPass'])
         return (204, {}, body)
 
+    def delete_os_server_groups_12345(self, **kw):
+        return (202, {}, None)
+
+    def delete_os_server_groups_56789(self, **kw):
+        return (202, {}, None)
+
     def delete_servers_1234(self, **kw):
         return (202, {}, None)
 
diff --git a/novaclient/tests/v1_1/test_shell.py b/novaclient/tests/v1_1/test_shell.py
index 580d2ed..503c813 100644
--- a/novaclient/tests/v1_1/test_shell.py
+++ b/novaclient/tests/v1_1/test_shell.py
@@ -1918,6 +1918,11 @@ class ShellTest(utils.TestCase):
         mock_system.assert_called_with("ssh -6 -p22  "
                                        "root@2607:f0d0:1002::4 -1")
 
+    def test_delete_multi_server_groups(self):
+        self.run_command('server-group-delete 12345 56789')
+        self.assert_called('DELETE', '/os-server-groups/56789')
+        self.assert_called('DELETE', '/os-server-groups/12345', pos=-2)
+
 
 class GetSecgroupTest(utils.TestCase):
     def test_with_integer(self):
diff --git a/novaclient/v1_1/shell.py b/novaclient/v1_1/shell.py
index c1754c9..3bf12f6 100644
--- a/novaclient/v1_1/shell.py
+++ b/novaclient/v1_1/shell.py
@@ -3537,12 +3537,23 @@ def do_server_group_create(cs, args):
     _print_server_group_details([server_group])
 
 
-@utils.arg('id', metavar='<id>',
-           help="Unique ID of the server group to delete")
+@utils.arg('id', metavar='<id>', nargs='+',
+           help="Unique ID(s) of the server group to delete")
 def do_server_group_delete(cs, args):
-    """Delete a specific server group."""
-    cs.server_groups.delete(args.id)
-    print("Instance group %s has been successfully deleted." % args.id)
+    """Delete specific server group(s)."""
+    failure_count = 0
+
+    for sg in args.id:
+        try:
+            cs.server_groups.delete(sg)
+            print(_("Server group %s has been successfully deleted.") % sg)
+        except Exception as e:
+            failure_count += 1
+            print(_("Delete for server group %(sg)s failed: %(e)s") %
+                  {'sg': sg, 'e': e})
+    if failure_count == len(args.id):
+        raise exceptions.CommandError(_("Unable to delete any of the "
+                                        "specified server groups."))
 
 
 @utils.arg('id', metavar='<id>',