Skip to content

Commit a05bdb5

Browse files
authored
Add Network Quota Policies (#6)
Also the role names sucked a bit so I simplified them a lot.
1 parent 5ceafcc commit a05bdb5

File tree

4 files changed

+57
-12
lines changed

4 files changed

+57
-12
lines changed

unikorn_openstack_policy/base.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,16 +27,16 @@
2727
# The domain manager has the role 'manager', as defined by
2828
# https://docs.scs.community/standards/scs-0302-v1-domain-manager-role/
2929
policy.RuleDefault(
30-
name='is_domain_manager',
30+
name='is_manager',
3131
check_str='role:manager',
3232
description='Rule for manager access',
3333
),
3434

3535
# A common helper to define that the user is a manager and the resource
3636
# target is in the same domain as the user is scoped to.
3737
policy.RuleDefault(
38-
name='is_project_manager_owner',
39-
check_str='rule:is_domain_manager and project_id:%(project_id)s',
38+
name='is_project_manager',
39+
check_str='rule:is_manager and project_id:%(project_id)s',
4040
description='Rule for domain manager ownership',
4141
),
4242
]

unikorn_openstack_policy/compute.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
# or it won't we able to fulfill any cluster creation requests.
2929
policy.RuleDefault(
3030
name='os_compute_api:os-quota-sets:update',
31-
check_str='rule:is_project_manager_owner',
31+
check_str='rule:is_project_manager',
3232
description='Update the quotas',
3333
)
3434
]

unikorn_openstack_policy/network.py

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,34 +30,41 @@
3030
# allow provider networks, if the prior rule changes, then we can open up a security hole.
3131
policy.RuleDefault(
3232
name='create_network',
33-
check_str='rule:is_project_manager_owner',
33+
check_str='rule:is_project_manager',
3434
description='Create a network',
3535
),
3636
policy.RuleDefault(
3737
name='delete_network',
38-
check_str='rule:is_project_manager_owner',
38+
check_str='rule:is_project_manager',
3939
description='Delete a network',
4040
),
4141
policy.RuleDefault(
4242
name='create_network:segments',
43-
check_str='rule:is_project_manager_owner',
43+
check_str='rule:is_project_manager',
4444
description='Specify ``segments`` attribute when creating a network',
4545
),
4646
policy.RuleDefault(
4747
name='create_network:provider:network_type',
48-
check_str='rule:is_project_manager_owner',
48+
check_str='rule:is_project_manager',
4949
description='Specify ``provider:network_type`` when creating a network',
5050
),
5151
policy.RuleDefault(
5252
name='create_network:provider:physical_network',
53-
check_str='rule:is_project_manager_owner',
53+
check_str='rule:is_project_manager',
5454
description='Specify ``provider:physical_network`` when creating a network',
5555
),
5656
policy.RuleDefault(
5757
name='create_network:provider:segmentation_id',
58-
check_str='rule:is_project_manager_owner',
58+
check_str='rule:is_project_manager',
5959
description='Specify ``provider:segmentation_id`` when creating a network',
6060
),
61+
62+
# The domain manager can update quotas.
63+
policy.RuleDefault(
64+
name='update_quota',
65+
check_str='rule:is_project_manager',
66+
description='Update a resource quota',
67+
)
6168
]
6269

6370

unikorn_openstack_policy/tests/test_network.py

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,11 @@ def test_delete_network(self):
7272
self.assertTrue(self.enforce('delete_network', self.target, self.context))
7373
self.assertTrue(self.enforce('delete_network', self.alt_target, self.context))
7474

75+
def test_update_quotas(self):
76+
"""Admin can update quotas"""
77+
self.assertTrue(self.enforce('update_quota', self.target, self.context))
78+
self.assertTrue(self.enforce('update_quota', self.alt_target, self.context))
79+
7580

7681
class DomainAdminNetworkPolicyTests(ProjectAdminNetworkPolicyTests):
7782
"""
@@ -140,13 +145,21 @@ def test_create_network_provider_segmentation_id(self):
140145
'create_network:provider:segmentation_id', self.alt_target, self.context)
141146

142147
def test_delete_network(self):
143-
"""Project manager cannot create networks"""
148+
"""Project manager can create networks"""
144149
self.assertTrue(self.enforce('delete_network', self.target, self.context))
145150
self.assertRaises(
146151
policy.PolicyNotAuthorized,
147152
self.enforce,
148153
'delete_network', self.alt_target, self.context)
149154

155+
def test_update_quotas(self):
156+
"""Project manager can update quotas"""
157+
self.assertTrue(self.enforce('update_quota', self.target, self.context))
158+
self.assertRaises(
159+
policy.PolicyNotAuthorized,
160+
self.enforce,
161+
'update_quota', self.alt_target, self.context)
162+
150163

151164
class DomainManagerNetworkPolicyTests(base.PolicyTestsBase):
152165
"""
@@ -224,6 +237,17 @@ def test_delete_network(self):
224237
self.enforce,
225238
'delete_network', self.alt_target, self.context)
226239

240+
def test_update_quotas(self):
241+
"""Domain manager cannot update quotas"""
242+
self.assertRaises(
243+
policy.PolicyNotAuthorized,
244+
self.enforce,
245+
'update_quota', self.target, self.context)
246+
self.assertRaises(
247+
policy.PolicyNotAuthorized,
248+
self.enforce,
249+
'update_quota', self.alt_target, self.context)
250+
227251

228252
class ProjectMemberNetworkPolicyTests(base.PolicyTestsBase):
229253
"""
@@ -279,6 +303,13 @@ def test_delete_network(self):
279303
self.enforce,
280304
'delete_network', self.alt_target, self.context)
281305

306+
def test_update_quotas(self):
307+
"""Project member cannot update quotas"""
308+
self.assertRaises(
309+
policy.PolicyNotAuthorized,
310+
self.enforce,
311+
'update_quota', self.target, self.context)
312+
282313

283314
class DomainMemberNetworkPolicyTests(base.PolicyTestsBase):
284315
"""
@@ -326,10 +357,17 @@ def test_create_network_provider_segmentation_id(self):
326357
'create_network:provider:segmentation_id', self.target, self.context)
327358

328359
def test_delete_network(self):
329-
"""Project member can delete networks"""
360+
"""Domain member cannot delete networks"""
330361
self.assertRaises(
331362
policy.PolicyNotAuthorized,
332363
self.enforce,
333364
'delete_network', self.target, self.context)
334365

366+
def test_update_quotas(self):
367+
"""Domain member cannot update quotas"""
368+
self.assertRaises(
369+
policy.PolicyNotAuthorized,
370+
self.enforce,
371+
'update_quota', self.target, self.context)
372+
335373
# vi: ts=4 et:

0 commit comments

Comments
 (0)