Skip to content

Commit a51406d

Browse files
Jenkinsopenstack-gerrit
authored andcommitted
Merge "Provide support to list ports by network"
2 parents 5ec435e + 554607e commit a51406d

4 files changed

Lines changed: 29 additions & 2 deletions

File tree

doc/source/command-objects/port.rst

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ List ports
116116
os port list
117117
[--device-owner <device-owner>]
118118
[--router <router> | --server <server>]
119+
[--network <network>]
119120
120121
.. option:: --device-owner <device-owner>
121122
@@ -130,6 +131,10 @@ List ports
130131
131132
List only ports attached to this server (name or ID)
132133
134+
.. option:: --network <network>
135+
136+
List only ports attached to this network (name or ID)
137+
133138
port set
134139
--------
135140

openstackclient/network/v2/port.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -345,6 +345,10 @@ def get_parser(self, prog_name):
345345
"This is the entity that uses the port (for example, "
346346
"network:dhcp).")
347347
)
348+
parser.add_argument(
349+
'--network',
350+
metavar='<network>',
351+
help=_("List only ports connected to this network (name or ID)"))
348352
device_group = parser.add_mutually_exclusive_group()
349353
device_group.add_argument(
350354
'--router',
@@ -387,6 +391,10 @@ def take_action(self, parsed_args):
387391
server = utils.find_resource(compute_client.servers,
388392
parsed_args.server)
389393
filters['device_id'] = server.id
394+
if parsed_args.network:
395+
network = network_client.find_network(parsed_args.network,
396+
ignore_missing=False)
397+
filters['network_id'] = network.id
390398

391399
data = network_client.ports(**filters)
392400

openstackclient/tests/unit/network/v2/test_port.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -337,7 +337,11 @@ def setUp(self):
337337
fake_router = network_fakes.FakeRouter.create_one_router({
338338
'id': 'fake-router-id',
339339
})
340+
fake_network = network_fakes.FakeNetwork.create_one_network({
341+
'id': 'fake-network-id',
342+
})
340343
self.network.find_router = mock.Mock(return_value=fake_router)
344+
self.network.find_network = mock.Mock(return_value=fake_network)
341345
self.app.client_manager.compute = mock.Mock()
342346

343347
def test_port_list_no_options(self):
@@ -414,11 +418,13 @@ def test_port_list_all_opt(self):
414418
arglist = [
415419
'--device-owner', self._ports[0].device_owner,
416420
'--router', 'fake-router-name',
421+
'--network', 'fake-network-name',
417422
]
418423

419424
verifylist = [
420425
('device_owner', self._ports[0].device_owner),
421-
('router', 'fake-router-name')
426+
('router', 'fake-router-name'),
427+
('network', 'fake-network-name')
422428
]
423429

424430
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -427,7 +433,8 @@ def test_port_list_all_opt(self):
427433

428434
self.network.ports.assert_called_once_with(**{
429435
'device_owner': self._ports[0].device_owner,
430-
'device_id': 'fake-router-id'
436+
'device_id': 'fake-router-id',
437+
'network_id': 'fake-network-id'
431438
})
432439
self.assertEqual(self.columns, columns)
433440
self.assertEqual(self.data, list(data))
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
features:
3+
- |
4+
Ports can now be listed as per the networks they are
5+
connected to by using the ``--network`` option with
6+
the ``port list`` CLI.
7+
[ Blueprint `network-commands-options <https://blueprints.launchpad.net/python-openstackclient/+spec/network-commands-options>`_]

0 commit comments

Comments
 (0)