diff --git a/pkg/apiserver/apiserver.go b/pkg/apiserver/apiserver.go index 89ba01c6f..40d4511c5 100644 --- a/pkg/apiserver/apiserver.go +++ b/pkg/apiserver/apiserver.go @@ -215,7 +215,8 @@ func (s *APIServer) installKubeSphereAPIs() { s.Config.AuthenticationOptions) amOperator := am.NewOperator(s.KubernetesClient.KubeSphere(), s.KubernetesClient.Kubernetes(), - s.InformerFactory) + s.InformerFactory, + s.DevopsClient) rbacAuthorizer := rbac.NewRBACAuthorizer(amOperator) urlruntime.Must(configv1alpha2.AddToContainer(s.container, s.Config)) @@ -439,7 +440,6 @@ func (s *APIServer) waitForResourceSync(ctx context.Context) error { {Group: "iam.kubesphere.io", Version: "v1alpha2", Resource: "workspacerolebindings"}, {Group: "iam.kubesphere.io", Version: "v1alpha2", Resource: "loginrecords"}, {Group: "cluster.kubesphere.io", Version: "v1alpha1", Resource: "clusters"}, - {Group: "devops.kubesphere.io", Version: "v1alpha3", Resource: "devopsprojects"}, {Group: "network.kubesphere.io", Version: "v1alpha1", Resource: "ippools"}, {Group: "notification.kubesphere.io", Version: "v2beta1", Resource: v2beta1.ResourcesPluralConfig}, {Group: "notification.kubesphere.io", Version: "v2beta1", Resource: v2beta1.ResourcesPluralReceiver}, diff --git a/pkg/models/iam/am/am.go b/pkg/models/iam/am/am.go index 41a596ce5..12929507c 100644 --- a/pkg/models/iam/am/am.go +++ b/pkg/models/iam/am/am.go @@ -20,6 +20,8 @@ import ( "encoding/json" "fmt" + "kubesphere.io/kubesphere/pkg/simple/client/devops" + rbacv1 "k8s.io/api/rbac/v1" "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -122,15 +124,18 @@ func NewReadOnlyOperator(factory informers.InformerFactory) AccessManagementInte workspaceRoleGetter: workspacerole.New(factory.KubeSphereSharedInformerFactory()), clusterRoleGetter: clusterrole.New(factory.KubernetesSharedInformerFactory()), roleGetter: role.New(factory.KubernetesSharedInformerFactory()), - devopsProjectLister: factory.KubeSphereSharedInformerFactory().Devops().V1alpha3().DevOpsProjects().Lister(), namespaceLister: factory.KubernetesSharedInformerFactory().Core().V1().Namespaces().Lister(), } } -func NewOperator(ksClient kubesphere.Interface, k8sClient kubernetes.Interface, factory informers.InformerFactory) AccessManagementInterface { +func NewOperator(ksClient kubesphere.Interface, k8sClient kubernetes.Interface, factory informers.InformerFactory, devopsClient devops.Interface) AccessManagementInterface { amOperator := NewReadOnlyOperator(factory).(*amOperator) amOperator.ksclient = ksClient amOperator.k8sclient = k8sClient + // no more CRDs of devopsprojects if the DevOps module was disabled + if devopsClient != nil { + amOperator.devopsProjectLister = factory.KubeSphereSharedInformerFactory().Devops().V1alpha3().DevOpsProjects().Lister() + } return amOperator } diff --git a/pkg/models/tenant/tenent_test.go b/pkg/models/tenant/tenent_test.go index 6fa83cc01..cfb5163fc 100644 --- a/pkg/models/tenant/tenent_test.go +++ b/pkg/models/tenant/tenent_test.go @@ -541,7 +541,7 @@ func prepare() Interface { RoleBindings().Informer().GetIndexer().Add(roleBinding) } - amOperator := am.NewOperator(ksClient, k8sClient, fakeInformerFactory) + amOperator := am.NewOperator(ksClient, k8sClient, fakeInformerFactory, nil) authorizer := rbac.NewRBACAuthorizer(amOperator) return New(fakeInformerFactory, k8sClient, ksClient, nil, nil, nil, amOperator, authorizer, nil, nil)