@@ -19,6 +19,8 @@ package rbac
1919import (
2020 "context"
2121
22+ "go.bytebuilders.dev/license-proxyserver/pkg/common"
23+
2224 rbacv1 "k8s.io/api/rbac/v1"
2325 apierrors "k8s.io/apimachinery/pkg/api/errors"
2426 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -27,12 +29,14 @@ import (
2729 "k8s.io/utils/ptr"
2830 "open-cluster-management.io/addon-framework/pkg/agent"
2931 addonv1alpha1 "open-cluster-management.io/api/addon/v1alpha1"
32+ addonv1beta1 "open-cluster-management.io/api/addon/v1beta1"
3033 clusterv1 "open-cluster-management.io/api/cluster/v1"
34+ "sigs.k8s.io/controller-runtime/pkg/client"
3135)
3236
33- func SetupPermission (kubeConfig * rest.Config , agentName string ) agent.PermissionConfigFunc {
37+ func SetupPermission (restConfig * rest.Config , kc client. Client , agentName string ) agent.PermissionConfigFunc {
3438 return func (cluster * clusterv1.ManagedCluster , addon * addonv1alpha1.ManagedClusterAddOn ) error {
35- nativeClient , err := kubernetes .NewForConfig (kubeConfig )
39+ nativeClient , err := kubernetes .NewForConfig (restConfig )
3640 if err != nil {
3741 return err
3842 }
@@ -81,12 +85,28 @@ func SetupPermission(kubeConfig *rest.Config, agentName string) agent.Permission
8185 },
8286 Subjects : []rbacv1.Subject {
8387 {
84- Kind : rbacv1 . UserKind ,
85- Name : agentUser ,
88+ Kind : "ServiceAccount" ,
89+ Name : common . AddonName + "-agent" ,
8690 },
8791 },
8892 }
8993
94+ managedClusterAddon := & addonv1beta1.ManagedClusterAddOn {}
95+ if err := kc .Get (context .TODO (), client.ObjectKey {Namespace : namespace , Name : addon .Name }, managedClusterAddon ); err != nil {
96+ return err
97+ }
98+
99+ for _ , reg := range managedClusterAddon .Status .Registrations {
100+ if reg .Type == addonv1beta1 .KubeClient && reg .KubeClient .Driver == "csr" {
101+ roleBinding .Subjects = []rbacv1.Subject {
102+ {
103+ Kind : "User" ,
104+ Name : agentUser ,
105+ },
106+ }
107+ }
108+ }
109+
90110 _ , err = nativeClient .RbacV1 ().Roles (cluster .Name ).Get (context .TODO (), role .Name , metav1.GetOptions {})
91111 switch {
92112 case apierrors .IsNotFound (err ):
0 commit comments