github.com/caos/orbos@v1.5.14-0.20221103111702-e6cd0cea7ad4/pkg/kubernetes/resources/clusterrolebinding/adapt.go (about)

     1  package clusterrolebinding
     2  
     3  import (
     4  	"github.com/caos/orbos/pkg/kubernetes"
     5  	"github.com/caos/orbos/pkg/kubernetes/resources"
     6  	"github.com/caos/orbos/pkg/labels"
     7  	rbac "k8s.io/api/rbac/v1"
     8  	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
     9  )
    10  
    11  type Subject struct {
    12  	Kind      string
    13  	Name      string
    14  	Namespace string
    15  }
    16  
    17  func AdaptFuncToEnsure(nameLabels *labels.Name, subjects []Subject, clusterrole string) (resources.QueryFunc, error) {
    18  	subjectsList := make([]rbac.Subject, 0)
    19  	for _, subject := range subjects {
    20  		subjectsList = append(subjectsList, rbac.Subject{
    21  			Name:      subject.Name,
    22  			Namespace: subject.Namespace,
    23  			Kind:      subject.Kind,
    24  		})
    25  	}
    26  
    27  	crb := &rbac.ClusterRoleBinding{
    28  		ObjectMeta: metav1.ObjectMeta{
    29  			Name:   nameLabels.Name(),
    30  			Labels: labels.MustK8sMap(nameLabels),
    31  		},
    32  		Subjects: subjectsList,
    33  		RoleRef: rbac.RoleRef{
    34  			APIGroup: "rbac.authorization.k8s.io",
    35  			Name:     clusterrole,
    36  			Kind:     "ClusterRole",
    37  		},
    38  	}
    39  	return func(_ kubernetes.ClientInt, _ map[string]interface{}) (resources.EnsureFunc, error) {
    40  		return func(k8sClient kubernetes.ClientInt) error {
    41  			return k8sClient.ApplyClusterRoleBinding(crb)
    42  		}, nil
    43  	}, nil
    44  }
    45  
    46  func AdaptFuncToDestroy(name string) (resources.DestroyFunc, error) {
    47  	return func(client kubernetes.ClientInt) error {
    48  		return client.DeleteClusterRoleBinding(name)
    49  	}, nil
    50  }