diff --git a/doc/source/cli/command-objects/port.rst b/doc/source/cli/command-objects/port.rst index cf29bb2cb..f8e88230f 100644 --- a/doc/source/cli/command-objects/port.rst +++ b/doc/source/cli/command-objects/port.rst @@ -170,7 +170,7 @@ List ports openstack port list [--device-owner ] - [--router | --server ] + [--router | --server | --device-id ] [--network ] [--mac-address ] [--fixed-ip subnet=,ip-address=] @@ -192,6 +192,10 @@ List ports List only ports attached to this server (name or ID) +.. option:: --device-id + + List only ports with the specified device ID + .. option:: --network List only ports attached to this network (name or ID) diff --git a/openstackclient/network/v2/port.py b/openstackclient/network/v2/port.py index 21f30c416..032e17874 100644 --- a/openstackclient/network/v2/port.py +++ b/openstackclient/network/v2/port.py @@ -499,6 +499,11 @@ class ListPort(command.Lister): metavar='', help=_("List only ports attached to this server (name or ID)"), ) + device_group.add_argument( + '--device-id', + metavar='', + help=_("List only ports with the specified device ID") + ) parser.add_argument( '--mac-address', metavar='', @@ -553,6 +558,8 @@ class ListPort(command.Lister): column_headers += ('Security Groups', 'Device Owner', 'Tags') if parsed_args.device_owner is not None: filters['device_owner'] = parsed_args.device_owner + if parsed_args.device_id is not None: + filters['device_id'] = parsed_args.device_id if parsed_args.router: _router = network_client.find_router(parsed_args.router, ignore_missing=False) diff --git a/openstackclient/tests/unit/network/v2/test_port.py b/openstackclient/tests/unit/network/v2/test_port.py index 3f751818b..908177ce6 100644 --- a/openstackclient/tests/unit/network/v2/test_port.py +++ b/openstackclient/tests/unit/network/v2/test_port.py @@ -759,6 +759,25 @@ class TestListPort(TestPort): self.assertEqual(self.columns, columns) self.assertEqual(self.data, list(data)) + def test_port_list_device_id_opt(self): + arglist = [ + '--device-id', self._ports[0].device_id, + ] + + verifylist = [ + ('device_id', self._ports[0].device_id) + ] + + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + columns, data = self.cmd.take_action(parsed_args) + + self.network.ports.assert_called_once_with(**{ + 'device_id': self._ports[0].device_id + }) + self.assertEqual(self.columns, columns) + self.assertEqual(self.data, list(data)) + def test_port_list_device_owner_opt(self): arglist = [ '--device-owner', self._ports[0].device_owner, diff --git a/releasenotes/notes/add-device_id-to-port-list-0c658db51ce43c9e.yaml b/releasenotes/notes/add-device_id-to-port-list-0c658db51ce43c9e.yaml new file mode 100644 index 000000000..05dae9e92 --- /dev/null +++ b/releasenotes/notes/add-device_id-to-port-list-0c658db51ce43c9e.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Add ``--device-id`` option to the ``port list`` command.