Support --all-projects in 'server list' command

Change-Id: I2ca747d67a7e5694ce704e0c210579a0214e98ee
This commit is contained in:
liusheng
2016-12-29 17:07:37 +08:00
parent bc5ec93642
commit 2494e1140f
3 changed files with 28 additions and 3 deletions

View File

@@ -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",

View File

@@ -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')

View File

@@ -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):