Format the output image uuid to name

For user friendliness, it is better to show image name than image uuid in
CLI.

Change-Id: I17767d56d99e10f59de0a3c15be5f6e98add98eb
This commit is contained in:
liusheng 2017-08-29 17:43:34 +08:00
parent 2faea31cb6
commit 5ea2e2df4d
2 changed files with 27 additions and 8 deletions

View File

@ -337,7 +337,7 @@ class ListServer(command.Lister):
"Status",
"Power State",
"Networks",
"Image",
"Image Name",
"Flavor",
"Availability Zone",
'Properties',
@ -359,7 +359,7 @@ class ListServer(command.Lister):
"Name",
"Status",
"Networks",
"Image",
"Image Name",
)
columns = (
"uuid",
@ -371,9 +371,11 @@ class ListServer(command.Lister):
data = bc_client.server.list(detailed=True,
all_projects=parsed_args.all_projects)
image_client = self.app.client_manager.image
formatters = {'addresses': self._addresses_formatter,
'metadata': utils.format_dict}
'metadata': utils.format_dict,
'image_uuid': lambda img: image_client.images.get(
img).name}
return (column_headers,
(utils.get_item_properties(
s, columns, formatters=formatters
@ -392,6 +394,12 @@ class ShowServer(command.ShowOne):
)
return parser
def _format_image_field(self, data):
image_client = self.app.client_manager.image
image_uuid = data._info.pop('image_uuid')
image = image_client.images.get(image_uuid)
return '%s (%s)' % (image.name, image_uuid)
def take_action(self, parsed_args):
bc_client = self.app.client_manager.baremetal_compute
data = utils.find_resource(
@ -407,6 +415,7 @@ class ShowServer(command.ShowOne):
'addresses': _addresses_formatter(
network_client,
data._info.pop('addresses')),
'image': self._format_image_field(data)
},
)

View File

@ -277,6 +277,11 @@ class TestServerList(test_base.TestBaremetalComputeV1):
self.app.client_manager.network = mock.Mock()
self.app.client_manager.network.find_network = \
mock.Mock(return_value=network_obj)
mocked_img = mock.Mock()
mocked_img.name = 'test-img'
image_mock = mock.MagicMock()
image_mock.images.get.return_value = mocked_img
self.app.client_manager.image = image_mock
fake_return_net = {
"private": [
{
@ -298,7 +303,7 @@ class TestServerList(test_base.TestBaremetalComputeV1):
"Name",
"Status",
'Networks',
'Image'
'Image Name'
)
self.list_columns_long = (
@ -307,7 +312,7 @@ class TestServerList(test_base.TestBaremetalComputeV1):
"Status",
"Power State",
"Networks",
"Image",
"Image Name",
"Flavor",
"Availability Zone",
"Properties"
@ -318,7 +323,7 @@ class TestServerList(test_base.TestBaremetalComputeV1):
self.fake_servers[i].name,
self.fake_servers[i].status,
'private=172.24.4.4, 2001:db8::a',
self.fake_servers[i].image_uuid,
'test-img',
) for i in range(3))
self.list_data_long = tuple((
@ -327,7 +332,7 @@ class TestServerList(test_base.TestBaremetalComputeV1):
self.fake_servers[i].status,
self.fake_servers[i].power_state,
'private=172.24.4.4, 2001:db8::a',
self.fake_servers[i].image_uuid,
'test-img',
self.fake_servers[i].flavor_uuid,
self.fake_servers[i].availability_zone,
'',
@ -421,6 +426,11 @@ class TestServerShow(test_base.TestBaremetalComputeV1):
super(TestServerShow, self).setUp()
self.cmd = server.ShowServer(self.app, None)
self.fake_server = fakes.FakeServer.create_one_server()
mocked_img = mock.Mock()
mocked_img.name = 'test-img'
image_mock = mock.MagicMock()
image_mock.images.get.return_value = mocked_img
self.app.client_manager.image = image_mock
def test_server_show_with_uuid_specified(self, mock_get):
args = [self.fake_server.uuid]