Skip to content

Commit a05e276

Browse files
Jenkinsopenstack-gerrit
authored andcommitted
Merge "To support '--project' and '--project-domain' options"
2 parents 51c418f + 780ce07 commit a05e276

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
@@ -156,6 +156,7 @@ List ports
156156
[--network <network>]
157157
[--mac-address <mac-address>]
158158
[--long]
159+
[--project <project> [--project-domain <project-domain>]]
159160
160161
.. option:: --device-owner <device-owner>
161162
@@ -182,6 +183,15 @@ List ports
182183
183184
List additional fields in output
184185
186+
.. option:: --project <project>
187+
188+
List ports according to their project (name or ID)
189+
190+
.. option:: --project-domain <project-domain>
191+
192+
Domain the project belongs to (name or ID).
193+
This can be used in case collisions between project names exist.
194+
185195
port set
186196
--------
187197

openstackclient/network/v2/port.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -460,11 +460,18 @@ def get_parser(self, prog_name):
460460
default=False,
461461
help=_("List additional fields in output")
462462
)
463+
parser.add_argument(
464+
'--project',
465+
metavar='<project>',
466+
help=_("List ports according to their project (name or ID)")
467+
)
468+
identity_common.add_project_domain_option_to_parser(parser)
463469
return parser
464470

465471
def take_action(self, parsed_args):
466472
network_client = self.app.client_manager.network
467473
compute_client = self.app.client_manager.compute
474+
identity_client = self.app.client_manager.identity
468475

469476
columns = (
470477
'id',
@@ -501,6 +508,14 @@ def take_action(self, parsed_args):
501508
filters['network_id'] = network.id
502509
if parsed_args.mac_address:
503510
filters['mac_address'] = parsed_args.mac_address
511+
if parsed_args.project:
512+
project_id = identity_common.find_project(
513+
identity_client,
514+
parsed_args.project,
515+
parsed_args.project_domain,
516+
).id
517+
filters['tenant_id'] = project_id
518+
filters['project_id'] = project_id
504519

505520
data = network_client.ports(**filters)
506521

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 = (
@@ -741,6 +744,44 @@ def test_list_port_with_long(self):
741744
self.assertEqual(self.columns_long, columns)
742745
self.assertEqual(self.data_long, list(data))
743746

747+
def test_port_list_project(self):
748+
project = identity_fakes.FakeProject.create_one_project()
749+
self.projects_mock.get.return_value = project
750+
arglist = [
751+
'--project', project.id,
752+
]
753+
verifylist = [
754+
('project', project.id),
755+
]
756+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
757+
758+
columns, data = self.cmd.take_action(parsed_args)
759+
filters = {'tenant_id': project.id, 'project_id': project.id}
760+
761+
self.network.ports.assert_called_once_with(**filters)
762+
self.assertEqual(self.columns, columns)
763+
self.assertEqual(self.data, list(data))
764+
765+
def test_port_list_project_domain(self):
766+
project = identity_fakes.FakeProject.create_one_project()
767+
self.projects_mock.get.return_value = project
768+
arglist = [
769+
'--project', project.id,
770+
'--project-domain', project.domain_id,
771+
]
772+
verifylist = [
773+
('project', project.id),
774+
('project_domain', project.domain_id),
775+
]
776+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
777+
778+
columns, data = self.cmd.take_action(parsed_args)
779+
filters = {'tenant_id': project.id, 'project_id': project.id}
780+
781+
self.network.ports.assert_called_once_with(**filters)
782+
self.assertEqual(self.columns, columns)
783+
self.assertEqual(self.data, list(data))
784+
744785

745786
class TestSetPort(TestPort):
746787

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)