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>',