Allow port list to shown undefined attributes

At now, OSC command implementation extracts resource attributes based on
a predefined column list, so if a user specifies an unknown attribute
not defined in the column lists, such attribute will be ignored.

In case of 'port list', the neutron port defines many attributes and
it is not a good idea to show all attributes even in the long mode
from the perspective of user experience.

This commit consumes osc_lib.utils.calculate_headers_and_attrs()
function to show undefined port attributes if requested in -c option.

Closes-Bug: #1707848
Depends-On: I6c6bc3c6e3c769c96869fd76b9d9c1661280850e
Change-Id: I130a6aed41d80603698b6cab0c9a1d1dc59df743
This commit is contained in:
Akihiro Motoki 2017-11-24 22:01:06 +00:00
parent c47b1ff063
commit 0626f95579
2 changed files with 14 additions and 2 deletions

View File

@ -584,9 +584,11 @@ class ListPort(command.Lister):
data = network_client.ports(**filters)
return (column_headers,
headers, attrs = utils.calculate_header_and_attrs(
column_headers, columns, parsed_args)
return (headers,
(utils.get_item_properties(
s, columns,
s, attrs,
formatters=_formatters,
) for s in data))

View File

@ -131,6 +131,16 @@ class PortTests(common.NetworkTagTests):
self.assertNotIn(mac1, item_map.values())
self.assertIn(mac2, item_map.values())
# Test list with unknown fields
json_output = json.loads(self.openstack(
'port list -f json -c ID -c Name -c device_id'
))
id_list = [p['ID'] for p in json_output]
self.assertIn(id1, id_list)
self.assertIn(id2, id_list)
# Check an unknown field exists
self.assertIn('device_id', json_output[0])
def test_port_set(self):
"""Test create, set, show, delete"""
name = uuid.uuid4().hex