Skip to content

Commit bca6b2f

Browse files
committed
Read Network Segments
We can create provider networks, but we also need to be able to read them back out again, so OpenStack is the source of truth, rather than having to cache information, which can go wrong!
1 parent 707bc06 commit bca6b2f

File tree

6 files changed

+105
-8
lines changed

6 files changed

+105
-8
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ pip3 install build pylint
9393
9494
```bash
9595
python3 -m build
96-
pip3 install --force-reinstall dist/python_unikorn_openstack_policy-0.1.0-py3-none-any.whl
96+
pip3 install --force-reinstall --no-deps dist/python_unikorn_openstack_policy-0.1.0-py3-none-any.whl
9797
```
9898

9999
### Generating Policy Files

pyproject.toml

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,14 @@ classifiers = [
2323
"Programming Language :: Python :: 3.11",
2424
"Programming Language :: Python :: 3 :: Only",
2525
]
26+
27+
# Note this is based on Dalmation.
28+
# See: https://releases.openstack.org/
2629
dependencies = [
27-
"cinder",
28-
"neutron",
29-
"nova",
30-
"oslo.config",
30+
"cinder ~= 25.0",
31+
"neutron ~= 25.0",
32+
"nova ~= 30.0",
33+
"oslo.config ~= 9.5.0",
3134
]
3235

3336
[project.urls]

unikorn_openstack_policy/blockstorage.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
]
3636

3737

38+
# pylint: disable=R0801
3839
def list_rules():
3940
"""Implements the "oslo.policy.policies" entry point"""
4041

@@ -47,7 +48,10 @@ def list_rules():
4748
def get_enforcer():
4849
"""Implements the "oslo.policy.enforcer" entry point"""
4950

50-
enforcer = policy.Enforcer(conf=cfg.CONF)
51+
conf=cfg.CONF
52+
conf(args=[])
53+
54+
enforcer = policy.Enforcer(conf=conf)
5155
enforcer.register_defaults(list_rules())
5256

5357
return enforcer

unikorn_openstack_policy/compute.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
]
3535

3636

37+
# pylint: disable=R0801
3738
def list_rules():
3839
"""Implements the "oslo.policy.policies" entry point"""
3940

@@ -46,7 +47,10 @@ def list_rules():
4647
def get_enforcer():
4748
"""Implements the "oslo.policy.enforcer" entry point"""
4849

49-
enforcer = policy.Enforcer(conf=cfg.CONF)
50+
conf=cfg.CONF
51+
conf(args=[])
52+
53+
enforcer = policy.Enforcer(conf=conf)
5054
enforcer.register_defaults(list_rules())
5155

5256
return enforcer

unikorn_openstack_policy/network.py

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,26 @@
5858
check_str='rule:is_project_manager',
5959
description='Specify ``provider:segmentation_id`` when creating a network',
6060
),
61+
policy.RuleDefault(
62+
name='get_network:segments',
63+
check_str='rule:is_project_manager',
64+
description='Get ``segments`` attribute of a network',
65+
),
66+
policy.RuleDefault(
67+
name='get_network:provider:network_type',
68+
check_str='rule:is_project_manager',
69+
description='Get ``provider:network_type`` attribute of a network',
70+
),
71+
policy.RuleDefault(
72+
name='get_network:provider:physical_network',
73+
check_str='rule:is_project_manager',
74+
description='Get ``provider:physical_network`` attribute of a network',
75+
),
76+
policy.RuleDefault(
77+
name='get_network:provider:segmentation_id',
78+
check_str='rule:is_project_manager',
79+
description='Get ``provider:segmentation_id`` aattribute of a network',
80+
),
6181

6282
# The domain manager can update quotas.
6383
policy.RuleDefault(
@@ -68,6 +88,7 @@
6888
]
6989

7090

91+
# pylint: disable=R0801
7192
def list_rules():
7293
"""Implements the "oslo.policy.policies" entry point"""
7394

@@ -80,7 +101,10 @@ def list_rules():
80101
def get_enforcer():
81102
"""Implements the "oslo.policy.enforcer" entry point"""
82103

83-
enforcer = policy.Enforcer(conf=cfg.CONF)
104+
conf=cfg.CONF
105+
conf(args=[])
106+
107+
enforcer = policy.Enforcer(conf=conf)
84108
enforcer.register_defaults(list_rules())
85109

86110
return enforcer

unikorn_openstack_policy/tests/test_network.py

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,34 @@ def test_create_network_provider_segmentation_id(self):
6767
self.enforce(
6868
'create_network:provider:segmentation_id', self.alt_target, self.context))
6969

70+
def test_get_network_segments(self):
71+
"""Admin can get network segments"""
72+
self.assertTrue(self.enforce('get_network:segments', self.target, self.context))
73+
self.assertTrue(self.enforce('get_network:segments', self.alt_target, self.context))
74+
75+
def test_get_network_provider_network_type(self):
76+
"""Admin can get provider network types"""
77+
self.assertTrue(
78+
self.enforce('create_network:provider:network_type', self.target, self.context))
79+
self.assertTrue(
80+
self.enforce('create_network:provider:network_type', self.alt_target, self.context))
81+
82+
def test_get_network_provider_physical_network(self):
83+
"""Admin can get provider physical networks"""
84+
self.assertTrue(
85+
self.enforce('create_network:provider:physical_network', self.target, self.context))
86+
self.assertTrue(
87+
self.enforce(
88+
'create_network:provider:physical_network', self.alt_target, self.context))
89+
90+
def test_get_network_provider_segmentation_id(self):
91+
"""Admin can get provider segmentation IDs"""
92+
self.assertTrue(
93+
self.enforce('create_network:provider:segmentation_id', self.target, self.context))
94+
self.assertTrue(
95+
self.enforce(
96+
'create_network:provider:segmentation_id', self.alt_target, self.context))
97+
7098
def test_delete_network(self):
7199
"""Admin can delete networks"""
72100
self.assertTrue(self.enforce('delete_network', self.target, self.context))
@@ -144,6 +172,40 @@ def test_create_network_provider_segmentation_id(self):
144172
self.enforce,
145173
'create_network:provider:segmentation_id', self.alt_target, self.context)
146174

175+
def test_get_network_segments(self):
176+
"""Admin can get network segments"""
177+
self.assertTrue(self.enforce('get_network:segments', self.target, self.context))
178+
self.assertRaises(
179+
policy.PolicyNotAuthorized,
180+
self.enforce, 'get_network:segments', self.alt_target, self.context)
181+
182+
def test_get_network_provider_network_type(self):
183+
"""Admin can get provider network types"""
184+
self.assertTrue(
185+
self.enforce('create_network:provider:network_type', self.target, self.context))
186+
self.assertRaises(
187+
policy.PolicyNotAuthorized,
188+
self.enforce,
189+
'create_network:provider:network_type', self.alt_target, self.context)
190+
191+
def test_get_network_provider_physical_network(self):
192+
"""Admin can get provider physical networks"""
193+
self.assertTrue(
194+
self.enforce('create_network:provider:physical_network', self.target, self.context))
195+
self.assertRaises(
196+
policy.PolicyNotAuthorized,
197+
self.enforce,
198+
'create_network:provider:physical_network', self.alt_target, self.context)
199+
200+
def test_get_network_provider_segmentation_id(self):
201+
"""Admin can get provider segmentation IDs"""
202+
self.assertTrue(
203+
self.enforce('create_network:provider:segmentation_id', self.target, self.context))
204+
self.assertRaises(
205+
policy.PolicyNotAuthorized,
206+
self.enforce,
207+
'create_network:provider:segmentation_id', self.alt_target, self.context)
208+
147209
def test_delete_network(self):
148210
"""Project manager can create networks"""
149211
self.assertTrue(self.enforce('delete_network', self.target, self.context))

0 commit comments

Comments
 (0)