Skip to content

Commit 780ce07

Browse files
committed
To support '--project' and '--project-domain' options
Include '--project' and '--project-domain' filtering options to 'port list' command. Change-Id: Ic7deae348f737c754b2f3e2113bd76d71a442400 Closes-Bug: #1648087
1 parent b829b21 commit 780ce07

4 files changed

Lines changed: 72 additions & 0 deletions

File tree

doc/source/command-objects/port.rst

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,7 @@ List ports
149149
[--network <network>]
150150
[--mac-address <mac-address>]
151151
[--long]
152+
[--project <project> [--project-domain <project-domain>]]
152153
153154
.. option:: --device-owner <device-owner>
154155
@@ -175,6 +176,15 @@ List ports
175176
176177
List additional fields in output
177178
179+
.. option:: --project <project>
180+
181+
List ports according to their project (name or ID)
182+
183+
.. option:: --project-domain <project-domain>
184+
185+
Domain the project belongs to (name or ID).
186+
This can be used in case collisions between project names exist.
187+
178188
port set
179189
--------
180190

openstackclient/network/v2/port.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -432,11 +432,18 @@ def get_parser(self, prog_name):
432432
default=False,
433433
help=_("List additional fields in output")
434434
)
435+
parser.add_argument(
436+
'--project',
437+
metavar='<project>',
438+
help=_("List ports according to their project (name or ID)")
439+
)
440+
identity_common.add_project_domain_option_to_parser(parser)
435441
return parser
436442

437443
def take_action(self, parsed_args):
438444
network_client = self.app.client_manager.network
439445
compute_client = self.app.client_manager.compute
446+
identity_client = self.app.client_manager.identity
440447

441448
columns = (
442449
'id',
@@ -473,6 +480,14 @@ def take_action(self, parsed_args):
473480
filters['network_id'] = network.id
474481
if parsed_args.mac_address:
475482
filters['mac_address'] = parsed_args.mac_address
483+
if parsed_args.project:
484+
project_id = identity_common.find_project(
485+
identity_client,
486+
parsed_args.project,
487+
parsed_args.project_domain,
488+
).id
489+
filters['tenant_id'] = project_id
490+
filters['project_id'] = project_id
476491

477492
data = network_client.ports(**filters)
478493

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

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
from openstackclient.network.v2 import port
2222
from openstackclient.tests.unit.compute.v2 import fakes as compute_fakes
23+
from openstackclient.tests.unit.identity.v3 import fakes as identity_fakes
2324
from openstackclient.tests.unit.network.v2 import fakes as network_fakes
2425
from openstackclient.tests.unit import utils as tests_utils
2526

@@ -31,6 +32,8 @@ def setUp(self):
3132

3233
# Get a shortcut to the network client
3334
self.network = self.app.client_manager.network
35+
# Get a shortcut to the ProjectManager Mock
36+
self.projects_mock = self.app.client_manager.identity.projects
3437

3538
def _get_common_cols_data(self, fake_port):
3639
columns = (
@@ -673,6 +676,44 @@ def test_list_port_with_long(self):
673676
self.assertEqual(self.columns_long, columns)
674677
self.assertEqual(self.data_long, list(data))
675678

679+
def test_port_list_project(self):
680+
project = identity_fakes.FakeProject.create_one_project()
681+
self.projects_mock.get.return_value = project
682+
arglist = [
683+
'--project', project.id,
684+
]
685+
verifylist = [
686+
('project', project.id),
687+
]
688+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
689+
690+
columns, data = self.cmd.take_action(parsed_args)
691+
filters = {'tenant_id': project.id, 'project_id': project.id}
692+
693+
self.network.ports.assert_called_once_with(**filters)
694+
self.assertEqual(self.columns, columns)
695+
self.assertEqual(self.data, list(data))
696+
697+
def test_port_list_project_domain(self):
698+
project = identity_fakes.FakeProject.create_one_project()
699+
self.projects_mock.get.return_value = project
700+
arglist = [
701+
'--project', project.id,
702+
'--project-domain', project.domain_id,
703+
]
704+
verifylist = [
705+
('project', project.id),
706+
('project_domain', project.domain_id),
707+
]
708+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
709+
710+
columns, data = self.cmd.take_action(parsed_args)
711+
filters = {'tenant_id': project.id, 'project_id': project.id}
712+
713+
self.network.ports.assert_called_once_with(**filters)
714+
self.assertEqual(self.columns, columns)
715+
self.assertEqual(self.data, list(data))
716+
676717

677718
class TestSetPort(TestPort):
678719

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
features:
3+
- |
4+
Add ``--project`` and ``--project-domain`` filtering options
5+
to ``port list`` command.
6+
[Bug `1648087 <https://bugs.launchpad.net/bugs/1648087>`_]

0 commit comments

Comments
 (0)