diff --git a/doc/source/command-objects/port.rst b/doc/source/command-objects/port.rst index e3e783ada..980f77b9a 100644 --- a/doc/source/command-objects/port.rst +++ b/doc/source/command-objects/port.rst @@ -117,6 +117,7 @@ List ports [--device-owner ] [--router | --server ] [--network ] + [--long] .. option:: --device-owner @@ -135,6 +136,10 @@ List ports List only ports attached to this network (name or ID) +.. option:: --long + + List additional fields in output + port set -------- diff --git a/openstackclient/network/v2/port.py b/openstackclient/network/v2/port.py index 92b286a9e..abdc5f059 100644 --- a/openstackclient/network/v2/port.py +++ b/openstackclient/network/v2/port.py @@ -360,6 +360,12 @@ class ListPort(command.Lister): metavar='', help=_("List only ports attached to this server (name or ID)"), ) + parser.add_argument( + '--long', + action='store_true', + default=False, + help=_("List additional fields in output") + ) return parser def take_action(self, parsed_args): @@ -371,15 +377,20 @@ class ListPort(command.Lister): 'name', 'mac_address', 'fixed_ips', + 'status', ) column_headers = ( 'ID', 'Name', 'MAC Address', 'Fixed IP Addresses', + 'Status', ) filters = {} + if parsed_args.long: + columns += ('security_groups', 'device_owner',) + column_headers += ('Security Groups', 'Device Owner',) if parsed_args.device_owner is not None: filters['device_owner'] = parsed_args.device_owner if parsed_args.router: diff --git a/openstackclient/tests/unit/network/v2/test_port.py b/openstackclient/tests/unit/network/v2/test_port.py index a2aceab17..bfc26bf42 100644 --- a/openstackclient/tests/unit/network/v2/test_port.py +++ b/openstackclient/tests/unit/network/v2/test_port.py @@ -317,6 +317,17 @@ class TestListPort(TestPort): 'Name', 'MAC Address', 'Fixed IP Addresses', + 'Status', + ) + + columns_long = ( + 'ID', + 'Name', + 'MAC Address', + 'Fixed IP Addresses', + 'Status', + 'Security Groups', + 'Device Owner', ) data = [] @@ -326,6 +337,19 @@ class TestListPort(TestPort): prt.name, prt.mac_address, utils.format_list_of_dicts(prt.fixed_ips), + prt.status, + )) + + data_long = [] + for prt in _ports: + data_long.append(( + prt.id, + prt.name, + prt.mac_address, + utils.format_list_of_dicts(prt.fixed_ips), + prt.status, + utils.format_list(prt.security_groups), + prt.device_owner, )) def setUp(self): @@ -439,6 +463,23 @@ class TestListPort(TestPort): self.assertEqual(self.columns, columns) self.assertEqual(self.data, list(data)) + def test_list_port_with_long(self): + arglist = [ + '--long', + ] + + verifylist = [ + ('long', True), + ] + + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + columns, data = self.cmd.take_action(parsed_args) + + self.network.ports.assert_called_once_with() + self.assertEqual(self.columns_long, columns) + self.assertEqual(self.data_long, list(data)) + class TestSetPort(TestPort): diff --git a/releasenotes/notes/bug-1613995-10bb3895d702c063.yaml b/releasenotes/notes/bug-1613995-10bb3895d702c063.yaml new file mode 100644 index 000000000..466f950a5 --- /dev/null +++ b/releasenotes/notes/bug-1613995-10bb3895d702c063.yaml @@ -0,0 +1,7 @@ +--- +features: + - | + Add a new column ``status`` and ``--long`` option to the result of the + ``os port list`` command. + [Bug `1613995 `_] + [Bug `1614321 `_]