From 2494e1140f90660f73c8cb6a06e2dcd4531e86aa Mon Sep 17 00:00:00 2001 From: liusheng Date: Thu, 29 Dec 2016 17:07:37 +0800 Subject: [PATCH] Support --all-projects in 'server list' command Change-Id: I2ca747d67a7e5694ce704e0c210579a0214e98ee --- nimbleclient/osc/v1/server.py | 12 ++++++++++-- nimbleclient/tests/unit/osc/v1/test_server.py | 15 +++++++++++++++ nimbleclient/v1/server.py | 4 +++- 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/nimbleclient/osc/v1/server.py b/nimbleclient/osc/v1/server.py index e916747..e296daf 100644 --- a/nimbleclient/osc/v1/server.py +++ b/nimbleclient/osc/v1/server.py @@ -153,6 +153,13 @@ class ListServer(command.Lister): default=False, help=_("List additional with details.") ) + parser.add_argument( + '--all-projects', + action='store_true', + default=False, + help=_("List the baremetal servers of all projects, " + "only available for admin users.") + ) return parser @staticmethod @@ -169,7 +176,8 @@ class ListServer(command.Lister): bc_client = self.app.client_manager.baremetal_compute if parsed_args.detailed: - data = bc_client.server.list(detailed=True) + data = bc_client.server.list(detailed=True, + all_projects=parsed_args.all_projects) formatters = {'network_info': self._networks_formatter} # This is the easiest way to change column headers column_headers = ( @@ -193,7 +201,7 @@ class ListServer(command.Lister): "network_info" ) else: - data = bc_client.server.list() + data = bc_client.server.list(all_projects=parsed_args.all_projects) formatters = None column_headers = ( "UUID", diff --git a/nimbleclient/tests/unit/osc/v1/test_server.py b/nimbleclient/tests/unit/osc/v1/test_server.py index 9ad3141..f13715b 100644 --- a/nimbleclient/tests/unit/osc/v1/test_server.py +++ b/nimbleclient/tests/unit/osc/v1/test_server.py @@ -355,6 +355,21 @@ class TestServerList(test_base.TestBaremetalComputeV1): self.assertEqual(self.list_columns_detailed, columns) self.assertEqual(self.list_data_detailed, tuple(data)) + def test_server_list_with_all_projects(self, mock_list): + arglist = [ + '--all-projects', + ] + verifylist = [ + ('all_projects', True), + ] + mock_list.return_value = self.fake_servers + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + columns, data = self.cmd.take_action(parsed_args) + mock_list.assert_called_once_with('/instances?all_tenants=True', + response_key='instances') + self.assertEqual(self.list_columns, columns) + self.assertEqual(self.list_data, tuple(data)) + @mock.patch.object(utils, 'find_resource') @mock.patch.object(server_mgr.ServerManager, '_delete') diff --git a/nimbleclient/v1/server.py b/nimbleclient/v1/server.py index 1cd2c50..bfc8d3a 100644 --- a/nimbleclient/v1/server.py +++ b/nimbleclient/v1/server.py @@ -48,8 +48,10 @@ class ServerManager(base.ManagerWithFind): url = '/instances/%s' % base.getid(server_id) return self._get(url) - def list(self, detailed=False): + def list(self, detailed=False, all_projects=False): url = '/instances/detail' if detailed else '/instances' + if all_projects: + url = '%s?%s' % (url, 'all_tenants=True') return self._list(url, response_key='instances') def update(self, server_id, updates):