Add more columns to server list

Show more information to users when run server list.

Change-Id: I23843cc07bc2dde55e9a2047fe89151695495365
This commit is contained in:
Zhenguo Niu 2017-04-12 16:07:24 +08:00
parent 7fa12bda72
commit 59852bde2b
3 changed files with 30 additions and 23 deletions

View File

@ -18,6 +18,7 @@
import json import json
import logging import logging
import os
from osc_lib.cli import parseractions from osc_lib.cli import parseractions
from osc_lib.command import command from osc_lib.command import command
@ -207,9 +208,8 @@ class ListServer(command.Lister):
parser.add_argument( parser.add_argument(
'--all-projects', '--all-projects',
action='store_true', action='store_true',
default=False, default=bool(int(os.environ.get("ALL_PROJECTS", 0))),
help=_("List the baremetal servers of all projects, " help=_('Include all projects (admin only)'),
"only available for admin users.")
) )
return parser return parser
@ -227,46 +227,49 @@ class ListServer(command.Lister):
bc_client = self.app.client_manager.baremetal_compute bc_client = self.app.client_manager.baremetal_compute
if parsed_args.long: if parsed_args.long:
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 # This is the easiest way to change column headers
column_headers = ( column_headers = (
"UUID", "UUID",
"Name", "Name",
"Flavor",
"Status", "Status",
"Power State", "Power State",
"Networks",
"Image", "Image",
"Description", "Flavor",
"Availability Zone", "Availability Zone",
"Networks" 'Properties',
) )
columns = ( columns = (
"uuid", "uuid",
"name", "name",
"instance_type_uuid",
"status", "status",
"power_state", "power_state",
"network_info",
"image_uuid", "image_uuid",
"description", "instance_type_uuid",
"availability_zone", "availability_zone",
"network_info" 'extra',
) )
else: else:
data = bc_client.server.list(all_projects=parsed_args.all_projects)
formatters = None
column_headers = ( column_headers = (
"UUID", "UUID",
"Name", "Name",
"Status", "Status",
"Networks",
"Image",
) )
columns = ( columns = (
"uuid", "uuid",
"name", "name",
"status", "status",
"network_info",
"image_uuid",
) )
data = bc_client.server.list(detailed=True,
all_projects=parsed_args.all_projects)
formatters = {'network_info': self._networks_formatter,
'extra': utils.format_dict}
return (column_headers, return (column_headers,
(utils.get_item_properties( (utils.get_item_properties(
s, columns, formatters=formatters s, columns, formatters=formatters

View File

@ -260,7 +260,7 @@ class FakeServer(object):
dashed=False), dashed=False),
"availability_zone": "zone-name-" + uuidutils.generate_uuid( "availability_zone": "zone-name-" + uuidutils.generate_uuid(
dashed=False), dashed=False),
'extra': "fake_extra" 'extra': {}
} }
# Overwrite default attributes. # Overwrite default attributes.

View File

@ -309,36 +309,40 @@ class TestServerList(test_base.TestBaremetalComputeV1):
"UUID", "UUID",
"Name", "Name",
"Status", "Status",
'Networks',
'Image'
) )
self.list_columns_long = ( self.list_columns_long = (
"UUID", "UUID",
"Name", "Name",
"Flavor",
"Status", "Status",
"Power State", "Power State",
"Networks",
"Image", "Image",
"Description", "Flavor",
"Availability Zone", "Availability Zone",
"Networks" "Properties"
) )
self.list_data = tuple(( self.list_data = tuple((
self.fake_servers[i].uuid, self.fake_servers[i].uuid,
self.fake_servers[i].name, self.fake_servers[i].name,
self.fake_servers[i].status, self.fake_servers[i].status,
'172.24.4.4, 2001:db8::a',
self.fake_servers[i].image_uuid,
) for i in range(3)) ) for i in range(3))
self.list_data_long = tuple(( self.list_data_long = tuple((
self.fake_servers[i].uuid, self.fake_servers[i].uuid,
self.fake_servers[i].name, self.fake_servers[i].name,
self.fake_servers[i].instance_type_uuid,
self.fake_servers[i].status, self.fake_servers[i].status,
self.fake_servers[i].power_state, self.fake_servers[i].power_state,
'172.24.4.4, 2001:db8::a',
self.fake_servers[i].image_uuid, self.fake_servers[i].image_uuid,
self.fake_servers[i].description, self.fake_servers[i].instance_type_uuid,
self.fake_servers[i].availability_zone, self.fake_servers[i].availability_zone,
'172.24.4.4, 2001:db8::a' '',
) for i in range(3)) ) for i in range(3))
def test_server_list(self, mock_list): def test_server_list(self, mock_list):
@ -347,7 +351,7 @@ class TestServerList(test_base.TestBaremetalComputeV1):
mock_list.return_value = self.fake_servers mock_list.return_value = self.fake_servers
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
columns, data = self.cmd.take_action(parsed_args) columns, data = self.cmd.take_action(parsed_args)
mock_list.assert_called_once_with('/instances', mock_list.assert_called_once_with('/instances/detail',
response_key='instances') response_key='instances')
self.assertEqual(self.list_columns, columns) self.assertEqual(self.list_columns, columns)
self.assertEqual(self.list_data, tuple(data)) self.assertEqual(self.list_data, tuple(data))
@ -377,7 +381,7 @@ class TestServerList(test_base.TestBaremetalComputeV1):
mock_list.return_value = self.fake_servers mock_list.return_value = self.fake_servers
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
columns, data = self.cmd.take_action(parsed_args) columns, data = self.cmd.take_action(parsed_args)
mock_list.assert_called_once_with('/instances?all_tenants=True', mock_list.assert_called_once_with('/instances/detail?all_tenants=True',
response_key='instances') response_key='instances')
self.assertEqual(self.list_columns, columns) self.assertEqual(self.list_columns, columns)
self.assertEqual(self.list_data, tuple(data)) self.assertEqual(self.list_data, tuple(data))