Skip to content

Commit 719c5d7

Browse files
Jenkinsopenstack-gerrit
authored andcommitted
Merge ""server list": "Image Name", "Image ID" columns"
2 parents d2cb96a + b74be57 commit 719c5d7

2 files changed

Lines changed: 56 additions & 12 deletions

File tree

openstackclient/compute/v2/server.py

Lines changed: 42 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -833,6 +833,8 @@ def take_action(self, parsed_args):
833833
'OS-EXT-STS:task_state',
834834
'OS-EXT-STS:power_state',
835835
'Networks',
836+
'Image Name',
837+
'Image ID',
836838
'OS-EXT-AZ:availability_zone',
837839
'OS-EXT-SRV-ATTR:host',
838840
'Metadata',
@@ -844,6 +846,8 @@ def take_action(self, parsed_args):
844846
'Task State',
845847
'Power State',
846848
'Networks',
849+
'Image Name',
850+
'Image ID',
847851
'Availability Zone',
848852
'Host',
849853
'Properties',
@@ -860,12 +864,14 @@ def take_action(self, parsed_args):
860864
'Name',
861865
'Status',
862866
'Networks',
867+
'Image Name',
863868
)
864869
column_headers = (
865870
'ID',
866871
'Name',
867872
'Status',
868873
'Networks',
874+
'Image Name',
869875
)
870876
mixed_case_fields = []
871877

@@ -877,17 +883,42 @@ def take_action(self, parsed_args):
877883
data = compute_client.servers.list(search_opts=search_opts,
878884
marker=marker_id,
879885
limit=parsed_args.limit)
880-
return (column_headers,
881-
(utils.get_item_properties(
882-
s, columns,
883-
mixed_case_fields=mixed_case_fields,
884-
formatters={
885-
'OS-EXT-STS:power_state':
886-
_format_servers_list_power_state,
887-
'Networks': _format_servers_list_networks,
888-
'Metadata': utils.format_dict,
889-
},
890-
) for s in data))
886+
887+
images = {}
888+
# Create a dict that maps image_id to image object.
889+
# Needed so that we can display the "Image Name" column.
890+
# "Image Name" is not crucial, so we swallow any exceptions.
891+
try:
892+
images_list = self.app.client_manager.image.images.list()
893+
for i in images_list:
894+
images[i.id] = i
895+
except Exception:
896+
pass
897+
898+
# Populate image_name and image_id attributes of server objects
899+
# so that we can display "Image Name" and "Image ID" columns.
900+
for s in data:
901+
if 'id' in s.image:
902+
image = images.get(s.image['id'])
903+
if image:
904+
s.image_name = image.name
905+
s.image_id = s.image['id']
906+
else:
907+
s.image_name = ''
908+
s.image_id = ''
909+
910+
table = (column_headers,
911+
(utils.get_item_properties(
912+
s, columns,
913+
mixed_case_fields=mixed_case_fields,
914+
formatters={
915+
'OS-EXT-STS:power_state':
916+
_format_servers_list_power_state,
917+
'Networks': _format_servers_list_networks,
918+
'Metadata': utils.format_dict,
919+
},
920+
) for s in data))
921+
return table
891922

892923

893924
class LockServer(command.Command):

openstackclient/tests/compute/v2/test_server.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
# License for the specific language governing permissions and limitations
1313
# under the License.
1414
#
15+
import collections
1516
import getpass
1617
import mock
1718
from mock import call
@@ -598,6 +599,7 @@ class TestServerList(TestServer):
598599
'Name',
599600
'Status',
600601
'Networks',
602+
'Image Name',
601603
)
602604
columns_long = (
603605
'ID',
@@ -606,6 +608,8 @@ class TestServerList(TestServer):
606608
'Task State',
607609
'Power State',
608610
'Networks',
611+
'Image Name',
612+
'Image ID',
609613
'Availability Zone',
610614
'Host',
611615
'Properties',
@@ -668,12 +672,19 @@ def setUp(self):
668672
self.data = []
669673
self.data_long = []
670674

675+
Image = collections.namedtuple('Image', 'id name')
676+
self.images_mock.list.return_value = [
677+
Image(id=s.image['id'], name=self.image.name)
678+
for s in self.servers
679+
]
680+
671681
for s in self.servers:
672682
self.data.append((
673683
s.id,
674684
s.name,
675685
s.status,
676686
server._format_servers_list_networks(s.networks),
687+
self.image.name,
677688
))
678689
self.data_long.append((
679690
s.id,
@@ -684,6 +695,8 @@ def setUp(self):
684695
getattr(s, 'OS-EXT-STS:power_state')
685696
),
686697
server._format_servers_list_networks(s.networks),
698+
self.image.name,
699+
s.image['id'],
687700
getattr(s, 'OS-EXT-AZ:availability_zone'),
688701
getattr(s, 'OS-EXT-SRV-ATTR:host'),
689702
s.Metadata,
@@ -731,7 +744,7 @@ def test_server_list_with_image(self):
731744
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
732745
columns, data = self.cmd.take_action(parsed_args)
733746

734-
self.cimages_mock.get.assert_called_with(self.image.id)
747+
self.cimages_mock.get.assert_any_call(self.image.id)
735748

736749
self.search_opts['image'] = self.image.id
737750
self.servers_mock.list.assert_called_with(**self.kwargs)

0 commit comments

Comments
 (0)