Skip to content

Commit 9ca99b9

Browse files
committed
Network: Add supports rbac target-all-projects
Add a boolean option "target-all-projects", which allows creating rbac policy for all projects. Change-Id: Ie3af83a1bba7dd66e83b0595bb276bf8fd105831 Closes-Bug: #1728525 Closes-Bug: #1704834
1 parent a51ac0a commit 9ca99b9

4 files changed

Lines changed: 52 additions & 9 deletions

File tree

doc/source/cli/command-objects/network-rbac.rst

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ Create network RBAC policy
1919
openstack network rbac create
2020
--type <type>
2121
--action <action>
22-
--target-project <target-project> [--target-project-domain <target-project-domain>]
22+
[--target-project <target-project> | --target-all-projects]
23+
[--target-project-domain <target-project-domain>]
2324
[--project <project> [--project-domain <project-domain>]]
2425
<rbac-policy>
2526
@@ -33,7 +34,11 @@ Create network RBAC policy
3334
3435
.. option:: --target-project <target-project>
3536
36-
The project to which the RBAC policy will be enforced (name or ID) (required)
37+
The project to which the RBAC policy will be enforced (name or ID)
38+
39+
.. option:: --target-all-projects
40+
41+
Allow creating RBAC policy for all projects.
3742
3843
.. option:: --target-project-domain <target-project-domain>
3944

openstackclient/network/v2/network_rbac.py

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -51,11 +51,14 @@ def _get_attrs(client_manager, parsed_args):
5151
attrs['object_id'] = object_id
5252

5353
identity_client = client_manager.identity
54-
project_id = identity_common.find_project(
55-
identity_client,
56-
parsed_args.target_project,
57-
parsed_args.target_project_domain,
58-
).id
54+
if parsed_args.target_project is not None:
55+
project_id = identity_common.find_project(
56+
identity_client,
57+
parsed_args.target_project,
58+
parsed_args.target_project_domain,
59+
).id
60+
elif parsed_args.target_all_projects:
61+
project_id = '*'
5962
attrs['target_tenant'] = project_id
6063
if parsed_args.project is not None:
6164
project_id = identity_common.find_project(
@@ -96,13 +99,19 @@ def get_parser(self, prog_name):
9699
help=_('Action for the RBAC policy '
97100
'("access_as_external" or "access_as_shared")')
98101
)
99-
parser.add_argument(
102+
target_project_group = parser.add_mutually_exclusive_group(
103+
required=True)
104+
target_project_group.add_argument(
100105
'--target-project',
101-
required=True,
102106
metavar="<target-project>",
103107
help=_('The project to which the RBAC policy '
104108
'will be enforced (name or ID)')
105109
)
110+
target_project_group.add_argument(
111+
'--target-all-projects',
112+
action='store_true',
113+
help=_('Allow creating RBAC policy for all projects.')
114+
)
106115
parser.add_argument(
107116
'--target-project-domain',
108117
metavar='<target-project-domain>',

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

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,30 @@ def test_network_rbac_create(self):
163163
self.assertEqual(self.columns, columns)
164164
self.assertEqual(self.data, list(data))
165165

166+
def test_network_rbac_create_with_target_all_projects(self):
167+
arglist = [
168+
'--type', self.rbac_policy.object_type,
169+
'--action', self.rbac_policy.action,
170+
'--target-all-projects',
171+
self.rbac_policy.object_id,
172+
]
173+
verifylist = [
174+
('type', self.rbac_policy.object_type),
175+
('action', self.rbac_policy.action),
176+
('target_all_projects', True),
177+
('rbac_object', self.rbac_policy.object_id),
178+
]
179+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
180+
181+
columns, data = self.cmd.take_action(parsed_args)
182+
183+
self.network.create_rbac_policy.assert_called_with(**{
184+
'object_id': self.rbac_policy.object_id,
185+
'object_type': self.rbac_policy.object_type,
186+
'action': self.rbac_policy.action,
187+
'target_tenant': '*',
188+
})
189+
166190
def test_network_rbac_create_all_options(self):
167191
arglist = [
168192
'--type', self.rbac_policy.object_type,
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
fixes:
3+
- |
4+
Add ``target-all-projects`` option in ``rbac create`` command.
5+
[Bug `1728525 <https://bugs.launchpad.net/python-openstackclient/+bug/1728525>`_]

0 commit comments

Comments
 (0)