From 9cfecf922a27703f05f220c1cacd6e5d71733453 Mon Sep 17 00:00:00 2001 From: Rui Chen Date: Wed, 13 May 2015 16:06:21 +0800 Subject: [PATCH] server-group-list support 'all_projects' parameter Supporting 'all_projects' in server-group-list so that admin users can list other tenant's server groups. Change-Id: Ie50288464ebc6585590a1a74efa8804584771ebc Closes-Bug: #1454523 --- novaclient/tests/unit/v2/test_server_groups.py | 7 +++++++ novaclient/tests/unit/v2/test_shell.py | 8 ++++++++ novaclient/v2/server_groups.py | 5 +++-- novaclient/v2/shell.py | 8 +++++++- 4 files changed, 25 insertions(+), 3 deletions(-) diff --git a/novaclient/tests/unit/v2/test_server_groups.py b/novaclient/tests/unit/v2/test_server_groups.py index fcda2dec7..20b3f4f43 100644 --- a/novaclient/tests/unit/v2/test_server_groups.py +++ b/novaclient/tests/unit/v2/test_server_groups.py @@ -31,6 +31,13 @@ class ServerGroupsTest(utils.FixturedTestCase): self.assertTrue(isinstance(server_group, server_groups.ServerGroup)) + def test_list_server_groups_with_all_projects(self): + result = self.cs.server_groups.list(all_projects=True) + self.assert_called('GET', '/os-server-groups?all_projects') + for server_group in result: + self.assertTrue(isinstance(server_group, + server_groups.ServerGroup)) + def test_create_server_group(self): kwargs = {'name': 'ig1', 'policies': ['anti-affinity']} diff --git a/novaclient/tests/unit/v2/test_shell.py b/novaclient/tests/unit/v2/test_shell.py index 14bb14959..91f0e27e4 100644 --- a/novaclient/tests/unit/v2/test_shell.py +++ b/novaclient/tests/unit/v2/test_shell.py @@ -2405,6 +2405,14 @@ class ShellTest(utils.TestCase): self.assert_called('DELETE', '/os-server-groups/56789') self.assert_called('DELETE', '/os-server-groups/12345', pos=-2) + def test_list_server_group(self): + self.run_command('server-group-list') + self.assert_called('GET', '/os-server-groups') + + def test_list_server_group_with_all_projects(self): + self.run_command('server-group-list --all-projects') + self.assert_called('GET', '/os-server-groups?all_projects') + class ShellTestV11(ShellTest): FAKE_ENV = { diff --git a/novaclient/v2/server_groups.py b/novaclient/v2/server_groups.py index a5205e772..c699c65a7 100644 --- a/novaclient/v2/server_groups.py +++ b/novaclient/v2/server_groups.py @@ -39,12 +39,13 @@ class ServerGroupsManager(base.ManagerWithFind): """ resource_class = ServerGroup - def list(self): + def list(self, all_projects=False): """Get a list of all server groups. :rtype: list of :class:`ServerGroup`. """ - return self._list('/os-server-groups', 'server_groups') + all = '?all_projects' if all_projects else '' + return self._list('/os-server-groups%s' % all, 'server_groups') def get(self, id): """Get a specific server group. diff --git a/novaclient/v2/shell.py b/novaclient/v2/shell.py index 39278f812..f304988be 100644 --- a/novaclient/v2/shell.py +++ b/novaclient/v2/shell.py @@ -4350,9 +4350,15 @@ def _print_server_group_details(server_group): utils.print_list(server_group, columns) +@cliutils.arg( + '--all-projects', + dest='all_projects', + action='store_true', + default=False, + help=_('Display server groups from all projects (Admin only).')) def do_server_group_list(cs, args): """Print a list of all server groups.""" - server_groups = cs.server_groups.list() + server_groups = cs.server_groups.list(args.all_projects) _print_server_group_details(server_groups)