From 55b72401b7cfce4c8b9edec827a96ab8b815ed30 Mon Sep 17 00:00:00 2001 From: Jay Lau 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='', - help="Unique ID of the server group to delete") +@utils.arg('id', metavar='', 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='',