File size: 2,106 Bytes
105b369
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
from typing import Dict, List, Optional

from phi.k8s.enums.api_group import ApiGroup
from phi.k8s.enums.api_version import ApiVersion
from phi.k8s.enums.kind import Kind
from phi.k8s.resource.rbac_authorization_k8s_io.v1.cluste_role_binding import (
    Subject,
    RoleRef,
    ClusterRoleBinding,
)
from phi.k8s.create.common.labels import create_component_labels_dict
from phi.k8s.resource.meta.v1.object_meta import ObjectMeta
from phi.utils.log import logger


def create_eks_admin_crb(
    name: str = "eks-admin-crb",
    cluster_role: str = "cluster-admin",
    users: Optional[List[str]] = None,
    groups: Optional[List[str]] = None,
    service_accounts: Optional[List[str]] = None,
    app_name: str = "eks-admin",
    labels: Optional[Dict[str, str]] = None,
    skip_create: bool = False,
    skip_delete: bool = False,
) -> Optional[ClusterRoleBinding]:
    crb_labels = create_component_labels_dict(
        component_name=name,
        app_name=app_name,
        labels=labels,
    )

    subjects: List[Subject] = []
    if service_accounts is not None and isinstance(service_accounts, list):
        for sa in service_accounts:
            subjects.append(Subject(kind=Kind.SERVICEACCOUNT, name=sa))
    if users is not None and isinstance(users, list):
        for user in users:
            subjects.append(Subject(kind=Kind.USER, name=user))
    if groups is not None and isinstance(groups, list):
        for group in groups:
            subjects.append(Subject(kind=Kind.GROUP, name=group))

    if len(subjects) == 0:
        logger.error(f"No subjects for ClusterRoleBinding: {name}")
        return None

    return ClusterRoleBinding(
        name=name,
        api_version=ApiVersion.RBAC_AUTH_V1,
        kind=Kind.CLUSTERROLEBINDING,
        metadata=ObjectMeta(
            name=name,
            labels=crb_labels,
        ),
        role_ref=RoleRef(
            api_group=ApiGroup.RBAC_AUTH,
            kind=Kind.CLUSTERROLE,
            name=cluster_role,
        ),
        subjects=subjects,
        skip_create=skip_create,
        skip_delete=skip_delete,
    )