Jakub Ruzicka fcc2a65
From 55b72401b7cfce4c8b9edec827a96ab8b815ed30 Mon Sep 17 00:00:00 2001
Jakub Ruzicka fcc2a65
From: Jay Lau <liugya@cn.ibm.com>
Jakub Ruzicka fcc2a65
Date: Sun, 6 Apr 2014 13:46:53 +0800
Jakub Ruzicka fcc2a65
Subject: [PATCH] Enable delete multiple server groups in one request
Jakub Ruzicka fcc2a65
Jakub Ruzicka fcc2a65
Currently, "nova server-group-delete" can only delete one server
Jakub Ruzicka fcc2a65
group in one request, this patch was enabling nova client support
Jakub Ruzicka fcc2a65
removing multiple server groups in one request.
Jakub Ruzicka fcc2a65
Jakub Ruzicka fcc2a65
Change-Id: I373151bc27cbe8617e2023ba99f6fb3f0108d592
Jakub Ruzicka fcc2a65
Closes-Bug: #1302954
Jakub Ruzicka fcc2a65
Jakub Ruzicka fcc2a65
Conflicts:
Jakub Ruzicka fcc2a65
	novaclient/tests/v1_1/test_shell.py
Jakub Ruzicka fcc2a65
---
Jakub Ruzicka fcc2a65
 novaclient/tests/v1_1/fakes.py      |  6 ++++++
Jakub Ruzicka fcc2a65
 novaclient/tests/v1_1/test_shell.py |  5 +++++
Jakub Ruzicka fcc2a65
 novaclient/v1_1/shell.py            | 21 ++++++++++++++++-----
Jakub Ruzicka fcc2a65
 3 files changed, 27 insertions(+), 5 deletions(-)
Jakub Ruzicka fcc2a65
Jakub Ruzicka fcc2a65
diff --git a/novaclient/tests/v1_1/fakes.py b/novaclient/tests/v1_1/fakes.py
Jakub Ruzicka fcc2a65
index 50658c1..61926c1 100644
Jakub Ruzicka fcc2a65
--- a/novaclient/tests/v1_1/fakes.py
Jakub Ruzicka fcc2a65
+++ b/novaclient/tests/v1_1/fakes.py
Jakub Ruzicka fcc2a65
@@ -405,6 +405,12 @@ class FakeHTTPClient(base_client.HTTPClient):
Jakub Ruzicka fcc2a65
         fakes.assert_has_keys(body['server'], optional=['name', 'adminPass'])
Jakub Ruzicka fcc2a65
         return (204, {}, body)
Jakub Ruzicka fcc2a65
 
Jakub Ruzicka fcc2a65
+    def delete_os_server_groups_12345(self, **kw):
Jakub Ruzicka fcc2a65
+        return (202, {}, None)
Jakub Ruzicka fcc2a65
+
Jakub Ruzicka fcc2a65
+    def delete_os_server_groups_56789(self, **kw):
Jakub Ruzicka fcc2a65
+        return (202, {}, None)
Jakub Ruzicka fcc2a65
+
Jakub Ruzicka fcc2a65
     def delete_servers_1234(self, **kw):
Jakub Ruzicka fcc2a65
         return (202, {}, None)
Jakub Ruzicka fcc2a65
 
Jakub Ruzicka fcc2a65
diff --git a/novaclient/tests/v1_1/test_shell.py b/novaclient/tests/v1_1/test_shell.py
Jakub Ruzicka fcc2a65
index 580d2ed..503c813 100644
Jakub Ruzicka fcc2a65
--- a/novaclient/tests/v1_1/test_shell.py
Jakub Ruzicka fcc2a65
+++ b/novaclient/tests/v1_1/test_shell.py
Jakub Ruzicka fcc2a65
@@ -1918,6 +1918,11 @@ class ShellTest(utils.TestCase):
Jakub Ruzicka fcc2a65
         mock_system.assert_called_with("ssh -6 -p22  "
Jakub Ruzicka fcc2a65
                                        "root@2607:f0d0:1002::4 -1")
Jakub Ruzicka fcc2a65
 
Jakub Ruzicka fcc2a65
+    def test_delete_multi_server_groups(self):
Jakub Ruzicka fcc2a65
+        self.run_command('server-group-delete 12345 56789')
Jakub Ruzicka fcc2a65
+        self.assert_called('DELETE', '/os-server-groups/56789')
Jakub Ruzicka fcc2a65
+        self.assert_called('DELETE', '/os-server-groups/12345', pos=-2)
Jakub Ruzicka fcc2a65
+
Jakub Ruzicka fcc2a65
 
Jakub Ruzicka fcc2a65
 class GetSecgroupTest(utils.TestCase):
Jakub Ruzicka fcc2a65
     def test_with_integer(self):
Jakub Ruzicka fcc2a65
diff --git a/novaclient/v1_1/shell.py b/novaclient/v1_1/shell.py
Jakub Ruzicka fcc2a65
index c1754c9..3bf12f6 100644
Jakub Ruzicka fcc2a65
--- a/novaclient/v1_1/shell.py
Jakub Ruzicka fcc2a65
+++ b/novaclient/v1_1/shell.py
Jakub Ruzicka fcc2a65
@@ -3537,12 +3537,23 @@ def do_server_group_create(cs, args):
Jakub Ruzicka fcc2a65
     _print_server_group_details([server_group])
Jakub Ruzicka fcc2a65
 
Jakub Ruzicka fcc2a65
 
Jakub Ruzicka fcc2a65
-@utils.arg('id', metavar='<id>',
Jakub Ruzicka fcc2a65
-           help="Unique ID of the server group to delete")
Jakub Ruzicka fcc2a65
+@utils.arg('id', metavar='<id>', nargs='+',
Jakub Ruzicka fcc2a65
+           help="Unique ID(s) of the server group to delete")
Jakub Ruzicka fcc2a65
 def do_server_group_delete(cs, args):
Jakub Ruzicka fcc2a65
-    """Delete a specific server group."""
Jakub Ruzicka fcc2a65
-    cs.server_groups.delete(args.id)
Jakub Ruzicka fcc2a65
-    print("Instance group %s has been successfully deleted." % args.id)
Jakub Ruzicka fcc2a65
+    """Delete specific server group(s)."""
Jakub Ruzicka fcc2a65
+    failure_count = 0
Jakub Ruzicka fcc2a65
+
Jakub Ruzicka fcc2a65
+    for sg in args.id:
Jakub Ruzicka fcc2a65
+        try:
Jakub Ruzicka fcc2a65
+            cs.server_groups.delete(sg)
Jakub Ruzicka fcc2a65
+            print(_("Server group %s has been successfully deleted.") % sg)
Jakub Ruzicka fcc2a65
+        except Exception as e:
Jakub Ruzicka fcc2a65
+            failure_count += 1
Jakub Ruzicka fcc2a65
+            print(_("Delete for server group %(sg)s failed: %(e)s") %
Jakub Ruzicka fcc2a65
+                  {'sg': sg, 'e': e})
Jakub Ruzicka fcc2a65
+    if failure_count == len(args.id):
Jakub Ruzicka fcc2a65
+        raise exceptions.CommandError(_("Unable to delete any of the "
Jakub Ruzicka fcc2a65
+                                        "specified server groups."))
Jakub Ruzicka fcc2a65
 
Jakub Ruzicka fcc2a65
 
Jakub Ruzicka fcc2a65
 @utils.arg('id', metavar='<id>',