diff --git a/moganclient/osc/v1/server.py b/moganclient/osc/v1/server.py index 11c7935..ffeab34 100644 --- a/moganclient/osc/v1/server.py +++ b/moganclient/osc/v1/server.py @@ -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) }, ) diff --git a/moganclient/tests/unit/osc/v1/test_server.py b/moganclient/tests/unit/osc/v1/test_server.py index 9ae186d..ee5b639 100644 --- a/moganclient/tests/unit/osc/v1/test_server.py +++ b/moganclient/tests/unit/osc/v1/test_server.py @@ -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]