Skip to content

Commit 7e98aae

Browse files
Zuulopenstack-gerrit
authored andcommitted
Merge "Add parent project filter for listing projects"
2 parents f873235 + 7c1b6a7 commit 7e98aae

4 files changed

Lines changed: 44 additions & 0 deletions

File tree

doc/source/cli/command-objects/project.rst

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@ List projects
102102
103103
openstack project list
104104
[--domain <domain>]
105+
[--parent <parent>]
105106
[--user <user>]
106107
[--my-projects]
107108
[--long]
@@ -115,6 +116,12 @@ List projects
115116
116117
.. versionadded:: 3
117118
119+
.. option:: --parent <parent>
120+
121+
Filter projects whose parent is :option:`\<parent\> <--parent>` (name or ID)
122+
123+
.. versionadded:: 3
124+
118125
.. option:: --user <user>
119126
120127
Filter projects by :option:`\<user\> <--user>` (name or ID)

openstackclient/identity/v3/project.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,11 @@ def get_parser(self, prog_name):
185185
metavar='<domain>',
186186
help=_('Filter projects by <domain> (name or ID)'),
187187
)
188+
parser.add_argument(
189+
'--parent',
190+
metavar='<parent>',
191+
help=_('Filter projects whose parent is <parent> (name or ID)'),
192+
)
188193
parser.add_argument(
189194
'--user',
190195
metavar='<user>',
@@ -226,6 +231,11 @@ def take_action(self, parsed_args):
226231
parsed_args.domain).id
227232
kwargs['domain'] = domain_id
228233

234+
if parsed_args.parent:
235+
parent_id = common.find_project(identity_client,
236+
parsed_args.parent).id
237+
kwargs['parent'] = parent_id
238+
229239
if parsed_args.user:
230240
if parsed_args.domain:
231241
user_id = utils.find_resource(identity_client.users,

openstackclient/tests/unit/identity/v3/test_project.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -645,6 +645,28 @@ def test_project_list_domain_no_perms(self):
645645
self.assertEqual(self.columns, columns)
646646
self.assertEqual(self.datalist, tuple(data))
647647

648+
def test_project_list_parent(self):
649+
self.parent = identity_fakes.FakeProject.create_one_project()
650+
self.project = identity_fakes.FakeProject.create_one_project(
651+
attrs={'domain_id': self.domain.id, 'parent_id': self.parent.id})
652+
653+
arglist = [
654+
'--parent', self.parent.id,
655+
]
656+
verifylist = [
657+
('parent', self.parent.id),
658+
]
659+
660+
self.projects_mock.get.return_value = self.parent
661+
662+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
663+
664+
columns, data = self.cmd.take_action(parsed_args)
665+
self.projects_mock.list.assert_called_with(parent=self.parent.id)
666+
667+
self.assertEqual(self.columns, columns)
668+
self.assertEqual(self.datalist, tuple(data))
669+
648670
def test_project_list_sort(self):
649671
self.projects_mock.list.return_value = self.projects
650672

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
features:
3+
- |
4+
Add ``--parent`` option to ``project list`` command to filter projects
5+
by the specified parent project.

0 commit comments

Comments
 (0)