Skip to content

Commit 807ff82

Browse files
Jenkinsopenstack-gerrit
authored andcommitted
Merge "Support listing specified server's ports"
2 parents 3b0e648 + 96a8ed4 commit 807ff82

4 files changed

Lines changed: 48 additions & 6 deletions

File tree

doc/source/command-objects/port.rst

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ List ports
115115
116116
os port list
117117
[--device-owner <device-owner>]
118-
[--router <router>]
118+
[--router <router> | --server <server>]
119119
120120
.. option:: --device-owner <device-owner>
121121
@@ -126,6 +126,10 @@ List ports
126126
127127
List only ports attached to this router (name or ID)
128128
129+
.. option:: --server <server>
130+
131+
List only ports attached to this server (name or ID)
132+
129133
port set
130134
--------
131135

openstackclient/network/v2/port.py

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -345,16 +345,23 @@ 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(
348+
device_group = parser.add_mutually_exclusive_group()
349+
device_group.add_argument(
349350
'--router',
350351
metavar='<router>',
351352
dest='router',
352353
help=_("List only ports attached to this router (name or ID)")
353354
)
355+
device_group.add_argument(
356+
'--server',
357+
metavar='<server>',
358+
help=_("List only ports attached to this server (name or ID)"),
359+
)
354360
return parser
355361

356362
def take_action(self, parsed_args):
357-
client = self.app.client_manager.network
363+
network_client = self.app.client_manager.network
364+
compute_client = self.app.client_manager.compute
358365

359366
columns = (
360367
'id',
@@ -373,11 +380,15 @@ def take_action(self, parsed_args):
373380
if parsed_args.device_owner is not None:
374381
filters['device_owner'] = parsed_args.device_owner
375382
if parsed_args.router:
376-
_router = client.find_router(parsed_args.router,
377-
ignore_missing=False)
383+
_router = network_client.find_router(parsed_args.router,
384+
ignore_missing=False)
378385
filters['device_id'] = _router.id
386+
if parsed_args.server:
387+
server = utils.find_resource(compute_client.servers,
388+
parsed_args.server)
389+
filters['device_id'] = server.id
379390

380-
data = client.ports(**filters)
391+
data = network_client.ports(**filters)
381392

382393
return (column_headers,
383394
(utils.get_item_properties(

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

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
from osc_lib import utils
2020

2121
from openstackclient.network.v2 import port
22+
from openstackclient.tests.unit.compute.v2 import fakes as compute_fakes
2223
from openstackclient.tests.unit.network.v2 import fakes as network_fakes
2324
from openstackclient.tests.unit import utils as tests_utils
2425

@@ -337,6 +338,7 @@ def setUp(self):
337338
'id': 'fake-router-id',
338339
})
339340
self.network.find_router = mock.Mock(return_value=fake_router)
341+
self.app.client_manager.compute = mock.Mock()
340342

341343
def test_port_list_no_options(self):
342344
arglist = []
@@ -369,6 +371,26 @@ def test_port_list_router_opt(self):
369371
self.assertEqual(self.columns, columns)
370372
self.assertEqual(self.data, list(data))
371373

374+
@mock.patch.object(utils, 'find_resource')
375+
def test_port_list_with_server_option(self, mock_find):
376+
fake_server = compute_fakes.FakeServer.create_one_server()
377+
mock_find.return_value = fake_server
378+
379+
arglist = [
380+
'--server', 'fake-server-name',
381+
]
382+
verifylist = [
383+
('server', 'fake-server-name'),
384+
]
385+
386+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
387+
columns, data = self.cmd.take_action(parsed_args)
388+
self.network.ports.assert_called_once_with(
389+
device_id=fake_server.id)
390+
mock_find.assert_called_once_with(mock.ANY, 'fake-server-name')
391+
self.assertEqual(self.columns, columns)
392+
self.assertEqual(self.data, list(data))
393+
372394
def test_port_list_device_owner_opt(self):
373395
arglist = [
374396
'--device-owner', self._ports[0].device_owner,
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
features:
3+
- Support listing the specified server's ports by new option ``--server`` of
4+
``port list`` command.
5+
[Bug `1614385 <https://bugs.launchpad.net/python-openstackclient/+bug/1614385>`_]

0 commit comments

Comments
 (0)