Skip to content

Commit 2cc679e

Browse files
Jenkinsopenstack-gerrit
authored andcommitted
Merge "Add support to inherited project role grant calls"
2 parents c307b6b + ed241ef commit 2cc679e

4 files changed

Lines changed: 62 additions & 0 deletions

File tree

‎doc/source/command-objects/role_assignment.rst‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ List role assignments
1919
[--domain <domain>]
2020
[--project <project>]
2121
[--effective]
22+
[--inherited]
2223
2324
.. option:: --role <role>
2425

@@ -43,3 +44,7 @@ List role assignments
4344
.. option:: --effective
4445

4546
Returns only effective role assignments (defaults to False)
47+
48+
.. option:: --inherited
49+
50+
Specifies if the role grant is inheritable to the sub projects

‎openstackclient/identity/common.py‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,3 +139,12 @@ def add_project_domain_option_to_parser(parser):
139139
'This can be used in case collisions between project names '
140140
'exist.')
141141
)
142+
143+
144+
def add_inherited_option_to_parser(parser):
145+
parser.add_argument(
146+
'--inherited',
147+
action='store_true',
148+
default=False,
149+
help=('Specifies if the role grant is inheritable to the sub projects')
150+
)

‎openstackclient/identity/v3/role.py‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ def _add_identity_and_resource_options_to_parser(parser):
5555
common.add_group_domain_option_to_parser(parser)
5656
common.add_project_domain_option_to_parser(parser)
5757
common.add_user_domain_option_to_parser(parser)
58+
common.add_inherited_option_to_parser(parser)
5859

5960

6061
def _process_identity_and_resource_options(parsed_args,
@@ -102,6 +103,7 @@ def _process_identity_and_resource_options(parsed_args,
102103
parsed_args.project,
103104
parsed_args.group_domain,
104105
).id
106+
kwargs['inherited'] = parsed_args.inherited
105107
return kwargs
106108

107109

‎openstackclient/tests/identity/v3/test_role.py‎

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,15 @@ def setUp(self):
4545
self.roles_mock = self.app.client_manager.identity.roles
4646
self.roles_mock.reset_mock()
4747

48+
def _is_inheritance_testcase(self):
49+
return False
50+
51+
52+
class TestRoleInherited(TestRole):
53+
54+
def _is_inheritance_testcase(self):
55+
return True
56+
4857

4958
class TestRoleAdd(TestRole):
5059

@@ -95,12 +104,15 @@ def test_role_add_user_domain(self):
95104
'--domain', identity_fakes.domain_name,
96105
identity_fakes.role_name,
97106
]
107+
if self._is_inheritance_testcase():
108+
arglist.append('--inherited')
98109
verifylist = [
99110
('user', identity_fakes.user_name),
100111
('group', None),
101112
('domain', identity_fakes.domain_name),
102113
('project', None),
103114
('role', identity_fakes.role_name),
115+
('inherited', self._is_inheritance_testcase()),
104116
]
105117
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
106118

@@ -111,6 +123,7 @@ def test_role_add_user_domain(self):
111123
kwargs = {
112124
'user': identity_fakes.user_id,
113125
'domain': identity_fakes.domain_id,
126+
'inherited': self._is_inheritance_testcase(),
114127
}
115128
# RoleManager.grant(role, user=, group=, domain=, project=)
116129
self.roles_mock.grant.assert_called_with(
@@ -124,12 +137,15 @@ def test_role_add_user_project(self):
124137
'--project', identity_fakes.project_name,
125138
identity_fakes.role_name,
126139
]
140+
if self._is_inheritance_testcase():
141+
arglist.append('--inherited')
127142
verifylist = [
128143
('user', identity_fakes.user_name),
129144
('group', None),
130145
('domain', None),
131146
('project', identity_fakes.project_name),
132147
('role', identity_fakes.role_name),
148+
('inherited', self._is_inheritance_testcase()),
133149
]
134150
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
135151

@@ -140,6 +156,7 @@ def test_role_add_user_project(self):
140156
kwargs = {
141157
'user': identity_fakes.user_id,
142158
'project': identity_fakes.project_id,
159+
'inherited': self._is_inheritance_testcase(),
143160
}
144161
# RoleManager.grant(role, user=, group=, domain=, project=)
145162
self.roles_mock.grant.assert_called_with(
@@ -153,12 +170,15 @@ def test_role_add_group_domain(self):
153170
'--domain', identity_fakes.domain_name,
154171
identity_fakes.role_name,
155172
]
173+
if self._is_inheritance_testcase():
174+
arglist.append('--inherited')
156175
verifylist = [
157176
('user', None),
158177
('group', identity_fakes.group_name),
159178
('domain', identity_fakes.domain_name),
160179
('project', None),
161180
('role', identity_fakes.role_name),
181+
('inherited', self._is_inheritance_testcase()),
162182
]
163183
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
164184

@@ -169,6 +189,7 @@ def test_role_add_group_domain(self):
169189
kwargs = {
170190
'group': identity_fakes.group_id,
171191
'domain': identity_fakes.domain_id,
192+
'inherited': self._is_inheritance_testcase(),
172193
}
173194
# RoleManager.grant(role, user=, group=, domain=, project=)
174195
self.roles_mock.grant.assert_called_with(
@@ -182,12 +203,15 @@ def test_role_add_group_project(self):
182203
'--project', identity_fakes.project_name,
183204
identity_fakes.role_name,
184205
]
206+
if self._is_inheritance_testcase():
207+
arglist.append('--inherited')
185208
verifylist = [
186209
('user', None),
187210
('group', identity_fakes.group_name),
188211
('domain', None),
189212
('project', identity_fakes.project_name),
190213
('role', identity_fakes.role_name),
214+
('inherited', self._is_inheritance_testcase()),
191215
]
192216
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
193217

@@ -198,6 +222,7 @@ def test_role_add_group_project(self):
198222
kwargs = {
199223
'group': identity_fakes.group_id,
200224
'project': identity_fakes.project_id,
225+
'inherited': self._is_inheritance_testcase(),
201226
}
202227
# RoleManager.grant(role, user=, group=, domain=, project=)
203228
self.roles_mock.grant.assert_called_with(
@@ -206,6 +231,10 @@ def test_role_add_group_project(self):
206231
)
207232

208233

234+
class TestRoleAddInherited(TestRoleAdd, TestRoleInherited):
235+
pass
236+
237+
209238
class TestRoleCreate(TestRole):
210239

211240
def setUp(self):
@@ -550,12 +579,15 @@ def test_role_remove_user_domain(self):
550579
'--domain', identity_fakes.domain_name,
551580
identity_fakes.role_name,
552581
]
582+
if self._is_inheritance_testcase():
583+
arglist.append('--inherited')
553584
verifylist = [
554585
('user', identity_fakes.user_name),
555586
('group', None),
556587
('domain', identity_fakes.domain_name),
557588
('project', None),
558589
('role', identity_fakes.role_name),
590+
('inherited', self._is_inheritance_testcase()),
559591
]
560592
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
561593

@@ -566,6 +598,7 @@ def test_role_remove_user_domain(self):
566598
kwargs = {
567599
'user': identity_fakes.user_id,
568600
'domain': identity_fakes.domain_id,
601+
'inherited': self._is_inheritance_testcase(),
569602
}
570603
# RoleManager.revoke(role, user=, group=, domain=, project=)
571604
self.roles_mock.revoke.assert_called_with(
@@ -579,12 +612,15 @@ def test_role_remove_user_project(self):
579612
'--project', identity_fakes.project_name,
580613
identity_fakes.role_name,
581614
]
615+
if self._is_inheritance_testcase():
616+
arglist.append('--inherited')
582617
verifylist = [
583618
('user', identity_fakes.user_name),
584619
('group', None),
585620
('domain', None),
586621
('project', identity_fakes.project_name),
587622
('role', identity_fakes.role_name),
623+
('inherited', self._is_inheritance_testcase()),
588624
]
589625
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
590626

@@ -595,6 +631,7 @@ def test_role_remove_user_project(self):
595631
kwargs = {
596632
'user': identity_fakes.user_id,
597633
'project': identity_fakes.project_id,
634+
'inherited': self._is_inheritance_testcase(),
598635
}
599636
# RoleManager.revoke(role, user=, group=, domain=, project=)
600637
self.roles_mock.revoke.assert_called_with(
@@ -608,12 +645,16 @@ def test_role_remove_group_domain(self):
608645
'--domain', identity_fakes.domain_name,
609646
identity_fakes.role_name,
610647
]
648+
if self._is_inheritance_testcase():
649+
arglist.append('--inherited')
611650
verifylist = [
612651
('user', None),
613652
('group', identity_fakes.group_name),
614653
('domain', identity_fakes.domain_name),
615654
('project', None),
616655
('role', identity_fakes.role_name),
656+
('role', identity_fakes.role_name),
657+
('inherited', self._is_inheritance_testcase()),
617658
]
618659
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
619660

@@ -624,6 +665,7 @@ def test_role_remove_group_domain(self):
624665
kwargs = {
625666
'group': identity_fakes.group_id,
626667
'domain': identity_fakes.domain_id,
668+
'inherited': self._is_inheritance_testcase(),
627669
}
628670
# RoleManager.revoke(role, user=, group=, domain=, project=)
629671
self.roles_mock.revoke.assert_called_with(
@@ -637,12 +679,15 @@ def test_role_remove_group_project(self):
637679
'--project', identity_fakes.project_name,
638680
identity_fakes.role_name,
639681
]
682+
if self._is_inheritance_testcase():
683+
arglist.append('--inherited')
640684
verifylist = [
641685
('user', None),
642686
('group', identity_fakes.group_name),
643687
('domain', None),
644688
('project', identity_fakes.project_name),
645689
('role', identity_fakes.role_name),
690+
('inherited', self._is_inheritance_testcase()),
646691
]
647692
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
648693

@@ -653,6 +698,7 @@ def test_role_remove_group_project(self):
653698
kwargs = {
654699
'group': identity_fakes.group_id,
655700
'project': identity_fakes.project_id,
701+
'inherited': self._is_inheritance_testcase(),
656702
}
657703
# RoleManager.revoke(role, user=, group=, domain=, project=)
658704
self.roles_mock.revoke.assert_called_with(

0 commit comments

Comments
 (0)