Skip to content

Commit 1fdf52c

Browse files
committed
Add functionality to role.py and refactor clusetr_role.py
- Refactor cluster_role.py. - Add common code to utils.py.
1 parent c824fee commit 1fdf52c

File tree

3 files changed

+78
-24
lines changed

3 files changed

+78
-24
lines changed

ocp_resources/cluster_role.py

Lines changed: 6 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# -*- coding: utf-8 -*-
22
from ocp_resources.constants import TIMEOUT_4MINUTES
33
from ocp_resources.resource import Resource
4+
from ocp_resources.utils import add_rule
45

56

67
class ClusterRole(Resource):
@@ -16,9 +17,9 @@ def __init__(
1617
client=None,
1718
api_groups=None,
1819
permissions_to_resources=None,
19-
verbs=None,
2020
teardown=True,
2121
yaml_file=None,
22+
verbs=None,
2223
delete_timeout=TIMEOUT_4MINUTES,
2324
**kwargs,
2425
):
@@ -38,31 +39,13 @@ def __init__(
3839
def to_dict(self):
3940
if not self.res:
4041
super().to_dict()
42+
if not self.verbs:
43+
self.verbs = [""]
4144

4245
if not self.yaml_file and self.permissions_to_resources:
43-
self.add_rule(
46+
add_rule(
47+
role_object=self,
4448
api_groups=self.api_groups,
4549
permissions_to_resources=self.permissions_to_resources,
4650
verbs=self.verbs,
4751
)
48-
49-
def add_rule(
50-
self,
51-
verbs,
52-
api_groups=None,
53-
permissions_to_resources=None,
54-
):
55-
if not self.res:
56-
super().to_dict()
57-
58-
rule = {"verbs": verbs}
59-
if api_groups:
60-
rule["apiGroups"] = api_groups
61-
if permissions_to_resources:
62-
rule["resources"] = permissions_to_resources
63-
if rule:
64-
self._set_rule(rule=rule)
65-
66-
def _set_rule(self, rule):
67-
self.desired_state["rules"].append(rule)
68-
self.res["rules"] = self.desired_state["rules"]

ocp_resources/role.py

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
# -*- coding: utf-8 -*-
2-
2+
# API reference:
3+
# https://docs.openshift.com/container-platform/4.11/rest_api/rbac_apis/role-rbac-authorization-k8s-io-v1.html
4+
from ocp_resources.constants import TIMEOUT_4MINUTES
35
from ocp_resources.resource import NamespacedResource
6+
from ocp_resources.utils import add_rule
47

58

69
class Role(NamespacedResource):
@@ -9,3 +12,50 @@ class Role(NamespacedResource):
912
"""
1013

1114
api_group = NamespacedResource.ApiGroup.RBAC_AUTHORIZATION_K8S_IO
15+
16+
def __init__(
17+
self,
18+
name=None,
19+
namespace=None,
20+
client=None,
21+
api_groups=None,
22+
permissions_to_resources=None,
23+
teardown=True,
24+
yaml_file=None,
25+
verbs=None,
26+
delete_timeout=TIMEOUT_4MINUTES,
27+
**kwargs,
28+
):
29+
"""
30+
Args:
31+
permissions_to_resources (list): List of string with resource/s to which you want to add permissions to.
32+
Verbs (list): Determine the action/s (permissions) applicable on a specific resource.
33+
Available verbs per resource can be seen with the command 'oc api-resources --sort-by name -o wide'
34+
"""
35+
super().__init__(
36+
client=client,
37+
namespace=namespace,
38+
name=name,
39+
teardown=teardown,
40+
yaml_file=yaml_file,
41+
delete_timeout=delete_timeout,
42+
**kwargs,
43+
)
44+
self.api_groups = api_groups
45+
self.permissions_to_resources = permissions_to_resources
46+
self.verbs = verbs
47+
self.desired_state = {"rules": []}
48+
49+
def to_dict(self):
50+
if not self.res:
51+
super().to_dict()
52+
if not self.verbs:
53+
self.verbs = [""]
54+
55+
if not self.yaml_file and self.permissions_to_resources:
56+
add_rule(
57+
role_object=self,
58+
api_groups=self.api_groups,
59+
permissions_to_resources=self.permissions_to_resources,
60+
verbs=self.verbs,
61+
)

ocp_resources/utils.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -276,3 +276,24 @@ def _return_resource(_resource, _check_exists, _msg):
276276
_check_exists=check_exists,
277277
_msg=skip_create_warn_msg,
278278
)
279+
280+
281+
def add_rule(
282+
role_object,
283+
verbs,
284+
api_groups=None,
285+
permissions_to_resources=None,
286+
):
287+
def _set_rule(rule_to_set):
288+
role_object.desired_state["rules"].append(rule_to_set)
289+
role_object.res["rules"] = role_object.desired_state["rules"]
290+
291+
if not role_object.res:
292+
role_object.super().to_dict()
293+
294+
rule = {"verbs": verbs}
295+
if api_groups:
296+
rule["apiGroups"] = api_groups
297+
if permissions_to_resources:
298+
rule["resources"] = permissions_to_resources
299+
_set_rule(rule_to_set=rule)

0 commit comments

Comments
 (0)