summaryrefslogtreecommitdiff
path: root/openstackclient
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2016-07-22 20:38:19 +0000
committerGerrit Code Review <review@openstack.org>2016-07-22 20:38:20 +0000
commit719c5d79ced34687944eb0bf458f36070817a7b9 (patch)
tree425387570e6fbf70259facca5aa1a93ed5bbd0bd /openstackclient
parentd2cb96a2efe530037aa5bab7fd8ba4a9f430bc46 (diff)
parentb74be57300badc97b93f77ad6288b2a5a0b0523e (diff)
downloadpython-openstackclient-719c5d79ced34687944eb0bf458f36070817a7b9.tar.gz
Merge ""server list": "Image Name", "Image ID" columns"
Diffstat (limited to 'openstackclient')
-rw-r--r--openstackclient/compute/v2/server.py53
-rw-r--r--openstackclient/tests/compute/v2/test_server.py15
2 files changed, 56 insertions, 12 deletions
diff --git a/openstackclient/compute/v2/server.py b/openstackclient/compute/v2/server.py
index a317c11d..16c86bd9 100644
--- a/openstackclient/compute/v2/server.py
+++ b/openstackclient/compute/v2/server.py
@@ -833,6 +833,8 @@ class ListServer(command.Lister):
'OS-EXT-STS:task_state',
'OS-EXT-STS:power_state',
'Networks',
+ 'Image Name',
+ 'Image ID',
'OS-EXT-AZ:availability_zone',
'OS-EXT-SRV-ATTR:host',
'Metadata',
@@ -844,6 +846,8 @@ class ListServer(command.Lister):
'Task State',
'Power State',
'Networks',
+ 'Image Name',
+ 'Image ID',
'Availability Zone',
'Host',
'Properties',
@@ -860,12 +864,14 @@ class ListServer(command.Lister):
'Name',
'Status',
'Networks',
+ 'Image Name',
)
column_headers = (
'ID',
'Name',
'Status',
'Networks',
+ 'Image Name',
)
mixed_case_fields = []
@@ -877,17 +883,42 @@ class ListServer(command.Lister):
data = compute_client.servers.list(search_opts=search_opts,
marker=marker_id,
limit=parsed_args.limit)
- return (column_headers,
- (utils.get_item_properties(
- s, columns,
- mixed_case_fields=mixed_case_fields,
- formatters={
- 'OS-EXT-STS:power_state':
- _format_servers_list_power_state,
- 'Networks': _format_servers_list_networks,
- 'Metadata': utils.format_dict,
- },
- ) for s in data))
+
+ images = {}
+ # Create a dict that maps image_id to image object.
+ # Needed so that we can display the "Image Name" column.
+ # "Image Name" is not crucial, so we swallow any exceptions.
+ try:
+ images_list = self.app.client_manager.image.images.list()
+ for i in images_list:
+ images[i.id] = i
+ except Exception:
+ pass
+
+ # Populate image_name and image_id attributes of server objects
+ # so that we can display "Image Name" and "Image ID" columns.
+ for s in data:
+ if 'id' in s.image:
+ image = images.get(s.image['id'])
+ if image:
+ s.image_name = image.name
+ s.image_id = s.image['id']
+ else:
+ s.image_name = ''
+ s.image_id = ''
+
+ table = (column_headers,
+ (utils.get_item_properties(
+ s, columns,
+ mixed_case_fields=mixed_case_fields,
+ formatters={
+ 'OS-EXT-STS:power_state':
+ _format_servers_list_power_state,
+ 'Networks': _format_servers_list_networks,
+ 'Metadata': utils.format_dict,
+ },
+ ) for s in data))
+ return table
class LockServer(command.Command):
diff --git a/openstackclient/tests/compute/v2/test_server.py b/openstackclient/tests/compute/v2/test_server.py
index 1c5a5fe4..9c89c6af 100644
--- a/openstackclient/tests/compute/v2/test_server.py
+++ b/openstackclient/tests/compute/v2/test_server.py
@@ -12,6 +12,7 @@
# License for the specific language governing permissions and limitations
# under the License.
#
+import collections
import getpass
import mock
from mock import call
@@ -598,6 +599,7 @@ class TestServerList(TestServer):
'Name',
'Status',
'Networks',
+ 'Image Name',
)
columns_long = (
'ID',
@@ -606,6 +608,8 @@ class TestServerList(TestServer):
'Task State',
'Power State',
'Networks',
+ 'Image Name',
+ 'Image ID',
'Availability Zone',
'Host',
'Properties',
@@ -668,12 +672,19 @@ class TestServerList(TestServer):
self.data = []
self.data_long = []
+ Image = collections.namedtuple('Image', 'id name')
+ self.images_mock.list.return_value = [
+ Image(id=s.image['id'], name=self.image.name)
+ for s in self.servers
+ ]
+
for s in self.servers:
self.data.append((
s.id,
s.name,
s.status,
server._format_servers_list_networks(s.networks),
+ self.image.name,
))
self.data_long.append((
s.id,
@@ -684,6 +695,8 @@ class TestServerList(TestServer):
getattr(s, 'OS-EXT-STS:power_state')
),
server._format_servers_list_networks(s.networks),
+ self.image.name,
+ s.image['id'],
getattr(s, 'OS-EXT-AZ:availability_zone'),
getattr(s, 'OS-EXT-SRV-ATTR:host'),
s.Metadata,
@@ -731,7 +744,7 @@ class TestServerList(TestServer):
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
columns, data = self.cmd.take_action(parsed_args)
- self.cimages_mock.get.assert_called_with(self.image.id)
+ self.cimages_mock.get.assert_any_call(self.image.id)
self.search_opts['image'] = self.image.id
self.servers_mock.list.assert_called_with(**self.kwargs)