Skip to content

Commit ff3457d

Browse files
committed
Add access levels for model, controller, offer
1 parent 9d6dea6 commit ff3457d

2 files changed

Lines changed: 54 additions & 0 deletions

File tree

juju/access.py

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
2+
from .errors import JujuNotValid
3+
4+
# No permissions at all
5+
NO_ACCESS = ""
6+
7+
# Model permissions
8+
9+
READ_ACCESS = "read"
10+
WRITE_ACCESS = "write"
11+
CONSUME_ACCESS = "consume"
12+
ADMIN_ACCESS = "admin"
13+
MODEL_ACCESS_LEVELS = {READ_ACCESS, WRITE_ACCESS, CONSUME_ACCESS, ADMIN_ACCESS}
14+
15+
# Controller permissions
16+
17+
LOGIN_ACCESS = "login"
18+
ADD_MODEL_ACCESS = "add-model"
19+
SUPERUSER_ACCESS = "superuser"
20+
CONTROLLER_ACCESS_LEVELS = {LOGIN_ACCESS, ADD_MODEL_ACCESS, SUPERUSER_ACCESS}
21+
22+
OFFER_ACCESS_LEVELS = {READ_ACCESS, CONSUME_ACCESS, ADMIN_ACCESS}
23+
24+
ALL_ACCESS_LEVELS = MODEL_ACCESS_LEVELS.union(CONTROLLER_ACCESS_LEVELS)
25+
26+
27+
def validate_access_level(access):
28+
if access not in ALL_ACCESS_LEVELS:
29+
raise JujuNotValid("access level", access)
30+
31+
32+
def validate_offer_access(access):
33+
validate_access_level()
34+
if access not in OFFER_ACCESS_LEVELS:
35+
raise JujuNotValid("offer access level", access)
36+
37+
38+
def validate_model_access(access):
39+
validate_access_level(access)
40+
if access not in MODEL_ACCESS_LEVELS:
41+
raise JujuNotValid("model access level", access)
42+
43+
44+
def validate_controller_access(access):
45+
validate_access_level(access)
46+
if access not in CONTROLLER_ACCESS_LEVELS:
47+
raise JujuNotValid("controller access level", access)

juju/errors.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,13 @@ class JujuBackupError(JujuError):
8787
pass
8888

8989

90+
class JujuNotValid(JujuError):
91+
def __init__(self, entity_type, entity_name):
92+
self.entity_type = entity_type
93+
self.entity_name = entity_name
94+
super().__init__(f'Invalid {entity_type} : {entity_name}')
95+
96+
9097
class JujuConfigError(JujuError):
9198
"""Exception raised during processing a configuration key-value pair
9299
in a config set for an application.

0 commit comments

Comments
 (0)