From 35027a346bfba2c83285fb1ccf89df042b4e646a Mon Sep 17 00:00:00 2001 From: LiHui Date: Fri, 20 May 2022 14:44:23 +0800 Subject: [PATCH] add openpitrix Client to apiserver --- cmd/ks-apiserver/app/options/options.go | 6 +- pkg/apiserver/apiserver.go | 16 +++-- pkg/kapis/metering/v1alpha1/handler.go | 11 ++- pkg/kapis/metering/v1alpha1/register.go | 9 +-- pkg/kapis/monitoring/v1alpha3/handler.go | 26 ++------ pkg/kapis/monitoring/v1alpha3/helper_test.go | 2 +- pkg/kapis/monitoring/v1alpha3/register.go | 11 ++- pkg/kapis/openpitrix/v1/handler.go | 9 ++- pkg/kapis/openpitrix/v1/register.go | 7 +- pkg/kapis/tenant/v1alpha2/handler.go | 7 +- pkg/kapis/tenant/v1alpha2/register.go | 7 +- pkg/kapis/tenant/v1alpha3/handler.go | 7 +- pkg/kapis/tenant/v1alpha3/register.go | 9 +-- pkg/models/openpitrix/applications_test.go | 4 +- pkg/models/openpitrix/interface.go | 70 +++++++++----------- pkg/models/openpitrix/release_test.go | 4 +- pkg/models/openpitrix/repo_test.go | 4 +- pkg/models/tenant/tenant.go | 10 +-- tools/cmd/doc-gen/main.go | 8 +-- 19 files changed, 100 insertions(+), 127 deletions(-) diff --git a/cmd/ks-apiserver/app/options/options.go b/cmd/ks-apiserver/app/options/options.go index bb14c5012..a8e8905a5 100644 --- a/cmd/ks-apiserver/app/options/options.go +++ b/cmd/ks-apiserver/app/options/options.go @@ -20,6 +20,8 @@ import ( "crypto/tls" "flag" "fmt" + + openpitrixv1 "kubesphere.io/kubesphere/pkg/kapis/openpitrix/v1" "kubesphere.io/kubesphere/pkg/utils/clusterclient" "kubesphere.io/kubesphere/pkg/apiserver/authentication/token" @@ -215,6 +217,8 @@ func (s *ServerRunOptions) NewAPIServer(stopCh <-chan struct{}) (*apiserver.APIS apiServer.ClusterClient = cc } + apiServer.OpenpitrixClient = openpitrixv1.NewOpenpitrixClient(informerFactory, apiServer.KubernetesClient.KubeSphere(), s.OpenPitrixOptions, apiServer.ClusterClient, stopCh) + server := &http.Server{ Addr: fmt.Sprintf(":%d", s.GenericServerRunOptions.InsecurePort), } @@ -246,8 +250,6 @@ func (s *ServerRunOptions) NewAPIServer(stopCh <-chan struct{}) (*apiserver.APIS klog.Fatalf("unable to create controller runtime client: %v", err) } - //apiServer.ClusterClients = - apiServer.Issuer, err = token.NewIssuer(s.AuthenticationOptions) if err != nil { klog.Fatalf("unable to create issuer: %v", err) diff --git a/pkg/apiserver/apiserver.go b/pkg/apiserver/apiserver.go index 29207e03e..d6f14a54c 100644 --- a/pkg/apiserver/apiserver.go +++ b/pkg/apiserver/apiserver.go @@ -20,13 +20,15 @@ import ( "bytes" "context" "fmt" - "kubesphere.io/kubesphere/pkg/utils/clusterclient" "net/http" rt "runtime" "strconv" "sync" "time" + "kubesphere.io/kubesphere/pkg/models/openpitrix" + "kubesphere.io/kubesphere/pkg/utils/clusterclient" + "k8s.io/apimachinery/pkg/api/errors" "k8s.io/client-go/discovery" @@ -167,6 +169,8 @@ type APIServer struct { RuntimeClient runtimeclient.Client ClusterClient clusterclient.ClusterClients + + OpenpitrixClient openpitrix.Interface } func (s *APIServer) PrepareRun(stopCh <-chan struct{}) error { @@ -226,17 +230,17 @@ func (s *APIServer) installKubeSphereAPIs(stopCh <-chan struct{}) { urlruntime.Must(configv1alpha2.AddToContainer(s.container, s.Config)) urlruntime.Must(resourcev1alpha3.AddToContainer(s.container, s.InformerFactory, s.RuntimeCache)) - urlruntime.Must(monitoringv1alpha3.AddToContainer(s.container, s.KubernetesClient.Kubernetes(), s.MonitoringClient, s.MetricsClient, s.InformerFactory, s.KubernetesClient.KubeSphere(), s.Config.OpenPitrixOptions, s.RuntimeClient, s.ClusterClient, stopCh)) - urlruntime.Must(meteringv1alpha1.AddToContainer(s.container, s.KubernetesClient.Kubernetes(), s.MonitoringClient, s.InformerFactory, s.KubernetesClient.KubeSphere(), s.RuntimeCache, s.Config.MeteringOptions, nil, s.RuntimeClient, s.ClusterClient, stopCh)) - urlruntime.Must(openpitrixv1.AddToContainer(s.container, s.InformerFactory, s.KubernetesClient.KubeSphere(), s.Config.OpenPitrixOptions, s.ClusterClient, stopCh)) + urlruntime.Must(monitoringv1alpha3.AddToContainer(s.container, s.KubernetesClient.Kubernetes(), s.MonitoringClient, s.MetricsClient, s.InformerFactory, s.OpenpitrixClient, s.RuntimeClient)) + urlruntime.Must(meteringv1alpha1.AddToContainer(s.container, s.KubernetesClient.Kubernetes(), s.MonitoringClient, s.InformerFactory, s.RuntimeCache, s.Config.MeteringOptions, s.OpenpitrixClient, s.RuntimeClient)) + urlruntime.Must(openpitrixv1.AddToContainer(s.container, s.InformerFactory, s.KubernetesClient.KubeSphere(), s.Config.OpenPitrixOptions, s.OpenpitrixClient)) urlruntime.Must(openpitrixv2alpha1.AddToContainer(s.container, s.InformerFactory, s.KubernetesClient.KubeSphere(), s.Config.OpenPitrixOptions)) urlruntime.Must(operationsv1alpha2.AddToContainer(s.container, s.KubernetesClient.Kubernetes())) urlruntime.Must(resourcesv1alpha2.AddToContainer(s.container, s.KubernetesClient.Kubernetes(), s.InformerFactory, s.KubernetesClient.Master())) urlruntime.Must(tenantv1alpha2.AddToContainer(s.container, s.InformerFactory, s.KubernetesClient.Kubernetes(), - s.KubernetesClient.KubeSphere(), s.EventsClient, s.LoggingClient, s.AuditingClient, amOperator, rbacAuthorizer, s.MonitoringClient, s.RuntimeCache, s.Config.MeteringOptions, s.ClusterClient, stopCh)) + s.KubernetesClient.KubeSphere(), s.EventsClient, s.LoggingClient, s.AuditingClient, amOperator, rbacAuthorizer, s.MonitoringClient, s.RuntimeCache, s.Config.MeteringOptions, s.OpenpitrixClient)) urlruntime.Must(tenantv1alpha3.AddToContainer(s.container, s.InformerFactory, s.KubernetesClient.Kubernetes(), - s.KubernetesClient.KubeSphere(), s.EventsClient, s.LoggingClient, s.AuditingClient, amOperator, rbacAuthorizer, s.MonitoringClient, s.RuntimeCache, s.Config.MeteringOptions, s.ClusterClient, stopCh)) + s.KubernetesClient.KubeSphere(), s.EventsClient, s.LoggingClient, s.AuditingClient, amOperator, rbacAuthorizer, s.MonitoringClient, s.RuntimeCache, s.Config.MeteringOptions, s.OpenpitrixClient)) urlruntime.Must(terminalv1alpha2.AddToContainer(s.container, s.KubernetesClient.Kubernetes(), rbacAuthorizer, s.KubernetesClient.Config(), s.Config.TerminalOptions)) urlruntime.Must(clusterkapisv1alpha1.AddToContainer(s.container, s.KubernetesClient.KubeSphere(), diff --git a/pkg/kapis/metering/v1alpha1/handler.go b/pkg/kapis/metering/v1alpha1/handler.go index 61946db04..6a5ed8d3e 100644 --- a/pkg/kapis/metering/v1alpha1/handler.go +++ b/pkg/kapis/metering/v1alpha1/handler.go @@ -21,13 +21,10 @@ package v1alpha1 import ( "github.com/emicklei/go-restful" "k8s.io/client-go/kubernetes" - "kubesphere.io/kubesphere/pkg/utils/clusterclient" - - openpitrixoptions "kubesphere.io/kubesphere/pkg/simple/client/openpitrix" - runtimeclient "sigs.k8s.io/controller-runtime/pkg/client" - "kubesphere.io/kubesphere/pkg/client/clientset/versioned" + "kubesphere.io/kubesphere/pkg/models/openpitrix" + "kubesphere.io/kubesphere/pkg/informers" monitorhle "kubesphere.io/kubesphere/pkg/kapis/monitoring/v1alpha3" resourcev1alpha3 "kubesphere.io/kubesphere/pkg/models/resources/v1alpha3/resource" @@ -48,6 +45,6 @@ type meterHandler interface { HandlePVCMeterQuery(req *restful.Request, resp *restful.Response) } -func newHandler(k kubernetes.Interface, m monitoring.Interface, f informers.InformerFactory, ksClient versioned.Interface, resourceGetter *resourcev1alpha3.ResourceGetter, meteringOptions *meteringclient.Options, opOptions *openpitrixoptions.Options, rtClient runtimeclient.Client, cc clusterclient.ClusterClients, stopCh <-chan struct{}) meterHandler { - return monitorhle.NewHandler(k, m, nil, f, ksClient, resourceGetter, meteringOptions, opOptions, rtClient, cc, stopCh) +func newHandler(k kubernetes.Interface, m monitoring.Interface, f informers.InformerFactory, resourceGetter *resourcev1alpha3.ResourceGetter, meteringOptions *meteringclient.Options, opClient openpitrix.Interface, rtClient runtimeclient.Client) meterHandler { + return monitorhle.NewHandler(k, m, nil, f, resourceGetter, meteringOptions, opClient, rtClient) } diff --git a/pkg/kapis/metering/v1alpha1/register.go b/pkg/kapis/metering/v1alpha1/register.go index 639c5998c..ca29d2558 100644 --- a/pkg/kapis/metering/v1alpha1/register.go +++ b/pkg/kapis/metering/v1alpha1/register.go @@ -18,12 +18,9 @@ package v1alpha1 import ( - "kubesphere.io/kubesphere/pkg/utils/clusterclient" "net/http" - openpitrixoptions "kubesphere.io/kubesphere/pkg/simple/client/openpitrix" - - "kubesphere.io/kubesphere/pkg/client/clientset/versioned" + "kubesphere.io/kubesphere/pkg/models/openpitrix" "github.com/emicklei/go-restful" restfulspec "github.com/emicklei/go-restful-openapi" @@ -50,10 +47,10 @@ const ( var GroupVersion = schema.GroupVersion{Group: groupName, Version: "v1alpha1"} -func AddToContainer(c *restful.Container, k8sClient kubernetes.Interface, meteringClient monitoring.Interface, factory informers.InformerFactory, ksClient versioned.Interface, cache cache.Cache, meteringOptions *meteringclient.Options, opOptions *openpitrixoptions.Options, rtClient runtimeclient.Client, cc clusterclient.ClusterClients, stopCh <-chan struct{}) error { +func AddToContainer(c *restful.Container, k8sClient kubernetes.Interface, meteringClient monitoring.Interface, factory informers.InformerFactory, cache cache.Cache, meteringOptions *meteringclient.Options, opClient openpitrix.Interface, rtClient runtimeclient.Client) error { ws := runtime.NewWebService(GroupVersion) - h := newHandler(k8sClient, meteringClient, factory, ksClient, resourcev1alpha3.NewResourceGetter(factory, cache), meteringOptions, opOptions, rtClient, cc, stopCh) + h := newHandler(k8sClient, meteringClient, factory, resourcev1alpha3.NewResourceGetter(factory, cache), meteringOptions, opClient, rtClient) ws.Route(ws.GET("/cluster"). To(h.HandleClusterMeterQuery). diff --git a/pkg/kapis/monitoring/v1alpha3/handler.go b/pkg/kapis/monitoring/v1alpha3/handler.go index c2bb7a288..442f9a08a 100644 --- a/pkg/kapis/monitoring/v1alpha3/handler.go +++ b/pkg/kapis/monitoring/v1alpha3/handler.go @@ -22,20 +22,13 @@ import ( "context" "errors" "io/ioutil" - "kubesphere.io/kubesphere/pkg/utils/clusterclient" "net/http" "net/url" "regexp" "strings" - "k8s.io/klog" - converter "kubesphere.io/monitoring-dashboard/tools/converter" - openpitrixoptions "kubesphere.io/kubesphere/pkg/simple/client/openpitrix" - "kubesphere.io/kubesphere/pkg/simple/client/s3" - - "kubesphere.io/kubesphere/pkg/client/clientset/versioned" "kubesphere.io/kubesphere/pkg/models/openpitrix" "github.com/emicklei/go-restful" @@ -61,27 +54,16 @@ type handler struct { rtClient runtimeclient.Client } -func NewHandler(k kubernetes.Interface, monitoringClient monitoring.Interface, metricsClient monitoring.Interface, f informers.InformerFactory, ksClient versioned.Interface, resourceGetter *resourcev1alpha3.ResourceGetter, meteringOptions *meteringclient.Options, opOptions *openpitrixoptions.Options, rtClient runtimeclient.Client, cc clusterclient.ClusterClients, stopCh <-chan struct{}) *handler { - var opRelease openpitrix.Interface - var s3Client s3.Interface - if opOptions != nil && opOptions.S3Options != nil && len(opOptions.S3Options.Endpoint) != 0 { - var err error - s3Client, err = s3.NewS3Client(opOptions.S3Options) - if err != nil { - klog.Errorf("failed to connect to storage, please check storage service status, error: %v", err) - } - } - if ksClient != nil { - opRelease = openpitrix.NewOpenpitrixOperator(f, ksClient, s3Client, cc, stopCh) - } +func NewHandler(k kubernetes.Interface, monitoringClient monitoring.Interface, metricsClient monitoring.Interface, f informers.InformerFactory, resourceGetter *resourcev1alpha3.ResourceGetter, meteringOptions *meteringclient.Options, opClient openpitrix.Interface, rtClient runtimeclient.Client) *handler { + if meteringOptions == nil || meteringOptions.RetentionDay == "" { meteringOptions = &meteringclient.DefaultMeteringOption } return &handler{ k: k, - mo: model.NewMonitoringOperator(monitoringClient, metricsClient, k, f, resourceGetter, opRelease), - opRelease: opRelease, + mo: model.NewMonitoringOperator(monitoringClient, metricsClient, k, f, resourceGetter, opClient), + opRelease: opClient, meteringOptions: meteringOptions, rtClient: rtClient, } diff --git a/pkg/kapis/monitoring/v1alpha3/helper_test.go b/pkg/kapis/monitoring/v1alpha3/helper_test.go index 7cadc261d..180537609 100644 --- a/pkg/kapis/monitoring/v1alpha3/helper_test.go +++ b/pkg/kapis/monitoring/v1alpha3/helper_test.go @@ -373,7 +373,7 @@ func TestParseRequestParams(t *testing.T) { fakeInformerFactory.KubeSphereSharedInformerFactory() - handler := NewHandler(client, nil, nil, fakeInformerFactory, ksClient, nil, nil, nil, nil, nil) + handler := NewHandler(client, nil, nil, fakeInformerFactory, nil, nil, nil, nil) result, err := handler.makeQueryOptions(tt.params, tt.lvl) if err != nil { diff --git a/pkg/kapis/monitoring/v1alpha3/register.go b/pkg/kapis/monitoring/v1alpha3/register.go index 870262628..28c7061ad 100644 --- a/pkg/kapis/monitoring/v1alpha3/register.go +++ b/pkg/kapis/monitoring/v1alpha3/register.go @@ -18,15 +18,12 @@ package v1alpha3 import ( - "kubesphere.io/kubesphere/pkg/utils/clusterclient" "net/http" + "kubesphere.io/kubesphere/pkg/models/openpitrix" + monitoringdashboardv1alpha2 "kubesphere.io/monitoring-dashboard/api/v1alpha2" - openpitrixoptions "kubesphere.io/kubesphere/pkg/simple/client/openpitrix" - - "kubesphere.io/kubesphere/pkg/client/clientset/versioned" - "github.com/emicklei/go-restful" restfulspec "github.com/emicklei/go-restful-openapi" "k8s.io/apimachinery/pkg/runtime/schema" @@ -48,10 +45,10 @@ const ( var GroupVersion = schema.GroupVersion{Group: groupName, Version: "v1alpha3"} -func AddToContainer(c *restful.Container, k8sClient kubernetes.Interface, monitoringClient monitoring.Interface, metricsClient monitoring.Interface, factory informers.InformerFactory, ksClient versioned.Interface, opOptions *openpitrixoptions.Options, rtClient runtimeclient.Client, cc clusterclient.ClusterClients, stopCh <-chan struct{}) error { +func AddToContainer(c *restful.Container, k8sClient kubernetes.Interface, monitoringClient monitoring.Interface, metricsClient monitoring.Interface, factory informers.InformerFactory, opClient openpitrix.Interface, rtClient runtimeclient.Client) error { ws := runtime.NewWebService(GroupVersion) - h := NewHandler(k8sClient, monitoringClient, metricsClient, factory, ksClient, nil, nil, opOptions, rtClient, cc, stopCh) + h := NewHandler(k8sClient, monitoringClient, metricsClient, factory, nil, nil, opClient, rtClient) ws.Route(ws.GET("/kubesphere"). To(h.handleKubeSphereMetricsQuery). diff --git a/pkg/kapis/openpitrix/v1/handler.go b/pkg/kapis/openpitrix/v1/handler.go index be2401d48..53ea5ceb0 100644 --- a/pkg/kapis/openpitrix/v1/handler.go +++ b/pkg/kapis/openpitrix/v1/handler.go @@ -17,13 +17,14 @@ import ( "encoding/json" "fmt" "io/ioutil" - "kubesphere.io/kubesphere/pkg/utils/clusterclient" "math" "net/url" "strconv" "strings" "time" + "kubesphere.io/kubesphere/pkg/utils/clusterclient" + restful "github.com/emicklei/go-restful" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" @@ -51,7 +52,7 @@ type openpitrixHandler struct { openpitrix openpitrix.Interface } -func newOpenpitrixHandler(ksInformers informers.InformerFactory, ksClient versioned.Interface, option *openpitrixoptions.Options, cc clusterclient.ClusterClients, stopCh <-chan struct{}) *openpitrixHandler { +func NewOpenpitrixClient(ksInformers informers.InformerFactory, ksClient versioned.Interface, option *openpitrixoptions.Options, cc clusterclient.ClusterClients, stopCh <-chan struct{}) openpitrix.Interface { var s3Client s3.Interface if option != nil && option.S3Options != nil && len(option.S3Options.Endpoint) != 0 { var err error @@ -61,9 +62,7 @@ func newOpenpitrixHandler(ksInformers informers.InformerFactory, ksClient versio } } - return &openpitrixHandler{ - openpitrix.NewOpenpitrixOperator(ksInformers, ksClient, s3Client, cc, stopCh), - } + return openpitrix.NewOpenpitrixOperator(ksInformers, ksClient, s3Client, cc, stopCh) } func (h *openpitrixHandler) CreateRepo(req *restful.Request, resp *restful.Response) { diff --git a/pkg/kapis/openpitrix/v1/register.go b/pkg/kapis/openpitrix/v1/register.go index 9da4f54d0..53b23c4ad 100644 --- a/pkg/kapis/openpitrix/v1/register.go +++ b/pkg/kapis/openpitrix/v1/register.go @@ -14,7 +14,6 @@ limitations under the License. package v1 import ( - "kubesphere.io/kubesphere/pkg/utils/clusterclient" "net/http" restful "github.com/emicklei/go-restful" @@ -39,11 +38,13 @@ const ( var GroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1"} -func AddToContainer(c *restful.Container, ksInfomrers informers.InformerFactory, ksClient versioned.Interface, options *openpitrixoptions.Options, cc clusterclient.ClusterClients, stopCh <-chan struct{}) error { +func AddToContainer(c *restful.Container, ksInfomrers informers.InformerFactory, ksClient versioned.Interface, options *openpitrixoptions.Options, opClient openpitrix.Interface) error { mimePatch := []string{restful.MIME_JSON, runtime.MimeJsonPatchJson, runtime.MimeMergePatchJson} webservice := runtime.NewWebService(GroupVersion) - handler := newOpenpitrixHandler(ksInfomrers, ksClient, options, cc, stopCh) + handler := &openpitrixHandler{ + opClient, + } webservice.Route(webservice.POST("/repos"). To(handler.CreateRepo). diff --git a/pkg/kapis/tenant/v1alpha2/handler.go b/pkg/kapis/tenant/v1alpha2/handler.go index 7bd32eeec..663a7af95 100644 --- a/pkg/kapis/tenant/v1alpha2/handler.go +++ b/pkg/kapis/tenant/v1alpha2/handler.go @@ -19,7 +19,6 @@ package v1alpha2 import ( "encoding/json" "fmt" - "kubesphere.io/kubesphere/pkg/utils/clusterclient" "github.com/emicklei/go-restful" corev1 "k8s.io/api/core/v1" @@ -29,6 +28,8 @@ import ( "k8s.io/client-go/kubernetes" "k8s.io/klog" + "kubesphere.io/kubesphere/pkg/models/openpitrix" + quotav1alpha2 "kubesphere.io/api/quota/v1alpha2" tenantv1alpha2 "kubesphere.io/api/tenant/v1alpha2" @@ -61,14 +62,14 @@ func NewTenantHandler(factory informers.InformerFactory, k8sclient kubernetes.In evtsClient events.Client, loggingClient logging.Client, auditingclient auditing.Client, am am.AccessManagementInterface, authorizer authorizer.Authorizer, monitoringclient monitoringclient.Interface, resourceGetter *resourcev1alpha3.ResourceGetter, - meteringOptions *meteringclient.Options, cc clusterclient.ClusterClients, stopCh <-chan struct{}) *tenantHandler { + meteringOptions *meteringclient.Options, opClient openpitrix.Interface) *tenantHandler { if meteringOptions == nil || meteringOptions.RetentionDay == "" { meteringOptions = &meteringclient.DefaultMeteringOption } return &tenantHandler{ - tenant: tenant.New(factory, k8sclient, ksclient, evtsClient, loggingClient, auditingclient, am, authorizer, monitoringclient, resourceGetter, cc, stopCh), + tenant: tenant.New(factory, k8sclient, ksclient, evtsClient, loggingClient, auditingclient, am, authorizer, monitoringclient, resourceGetter, opClient), meteringOptions: meteringOptions, } } diff --git a/pkg/kapis/tenant/v1alpha2/register.go b/pkg/kapis/tenant/v1alpha2/register.go index 85b75cd69..0d5061828 100644 --- a/pkg/kapis/tenant/v1alpha2/register.go +++ b/pkg/kapis/tenant/v1alpha2/register.go @@ -17,9 +17,10 @@ limitations under the License. package v1alpha2 import ( - "kubesphere.io/kubesphere/pkg/utils/clusterclient" "net/http" + "kubesphere.io/kubesphere/pkg/models/openpitrix" + "github.com/emicklei/go-restful" restfulspec "github.com/emicklei/go-restful-openapi" corev1 "k8s.io/api/core/v1" @@ -65,11 +66,11 @@ func Resource(resource string) schema.GroupResource { func AddToContainer(c *restful.Container, factory informers.InformerFactory, k8sclient kubernetes.Interface, ksclient kubesphere.Interface, evtsClient events.Client, loggingClient logging.Client, auditingclient auditing.Client, am am.AccessManagementInterface, authorizer authorizer.Authorizer, - monitoringclient monitoringclient.Interface, cache cache.Cache, meteringOptions *meteringclient.Options, cc clusterclient.ClusterClients, stopCh <-chan struct{}) error { + monitoringclient monitoringclient.Interface, cache cache.Cache, meteringOptions *meteringclient.Options, opClient openpitrix.Interface) error { mimePatch := []string{restful.MIME_JSON, runtime.MimeMergePatchJson, runtime.MimeJsonPatchJson} ws := runtime.NewWebService(GroupVersion) - handler := NewTenantHandler(factory, k8sclient, ksclient, evtsClient, loggingClient, auditingclient, am, authorizer, monitoringclient, resourcev1alpha3.NewResourceGetter(factory, cache), meteringOptions, cc, stopCh) + handler := NewTenantHandler(factory, k8sclient, ksclient, evtsClient, loggingClient, auditingclient, am, authorizer, monitoringclient, resourcev1alpha3.NewResourceGetter(factory, cache), meteringOptions, opClient) ws.Route(ws.GET("/clusters"). To(handler.ListClusters). diff --git a/pkg/kapis/tenant/v1alpha3/handler.go b/pkg/kapis/tenant/v1alpha3/handler.go index 70667d762..d67a36ad1 100644 --- a/pkg/kapis/tenant/v1alpha3/handler.go +++ b/pkg/kapis/tenant/v1alpha3/handler.go @@ -18,13 +18,14 @@ package v1alpha3 import ( "fmt" - "kubesphere.io/kubesphere/pkg/utils/clusterclient" "github.com/emicklei/go-restful" "k8s.io/apimachinery/pkg/api/errors" "k8s.io/client-go/kubernetes" "k8s.io/klog" + "kubesphere.io/kubesphere/pkg/models/openpitrix" + "kubesphere.io/kubesphere/pkg/api" "kubesphere.io/kubesphere/pkg/apiserver/authorization/authorizer" "kubesphere.io/kubesphere/pkg/apiserver/query" @@ -50,14 +51,14 @@ func newTenantHandler(factory informers.InformerFactory, k8sclient kubernetes.In evtsClient events.Client, loggingClient logging.Client, auditingclient auditing.Client, am am.AccessManagementInterface, authorizer authorizer.Authorizer, monitoringclient monitoringclient.Interface, resourceGetter *resourcev1alpha3.ResourceGetter, - meteringOptions *meteringclient.Options, cc clusterclient.ClusterClients, stopCh <-chan struct{}) *tenantHandler { + meteringOptions *meteringclient.Options, opClient openpitrix.Interface) *tenantHandler { if meteringOptions == nil || meteringOptions.RetentionDay == "" { meteringOptions = &meteringclient.DefaultMeteringOption } return &tenantHandler{ - tenant: tenant.New(factory, k8sclient, ksclient, evtsClient, loggingClient, auditingclient, am, authorizer, monitoringclient, resourceGetter, cc, stopCh), + tenant: tenant.New(factory, k8sclient, ksclient, evtsClient, loggingClient, auditingclient, am, authorizer, monitoringclient, resourceGetter, opClient), meteringOptions: meteringOptions, } } diff --git a/pkg/kapis/tenant/v1alpha3/register.go b/pkg/kapis/tenant/v1alpha3/register.go index 7503be6c0..09a3dc127 100644 --- a/pkg/kapis/tenant/v1alpha3/register.go +++ b/pkg/kapis/tenant/v1alpha3/register.go @@ -17,9 +17,10 @@ limitations under the License. package v1alpha3 import ( - "kubesphere.io/kubesphere/pkg/utils/clusterclient" "net/http" + "kubesphere.io/kubesphere/pkg/models/openpitrix" + "github.com/emicklei/go-restful" restfulspec "github.com/emicklei/go-restful-openapi" "k8s.io/apimachinery/pkg/runtime/schema" @@ -61,12 +62,12 @@ func AddToContainer(c *restful.Container, factory informers.InformerFactory, k8s ksclient kubesphere.Interface, evtsClient events.Client, loggingClient logging.Client, auditingclient auditing.Client, am am.AccessManagementInterface, authorizer authorizer.Authorizer, monitoringclient monitoringclient.Interface, cache cache.Cache, meteringOptions *meteringclient.Options, - cc clusterclient.ClusterClients, stopCh <-chan struct{}) error { + opClient openpitrix.Interface) error { mimePatch := []string{restful.MIME_JSON, runtime.MimeMergePatchJson, runtime.MimeJsonPatchJson} ws := runtime.NewWebService(GroupVersion) - v1alpha2Handler := v1alpha2.NewTenantHandler(factory, k8sclient, ksclient, evtsClient, loggingClient, auditingclient, am, authorizer, monitoringclient, resourcev1alpha3.NewResourceGetter(factory, cache), meteringOptions, cc, stopCh) - handler := newTenantHandler(factory, k8sclient, ksclient, evtsClient, loggingClient, auditingclient, am, authorizer, monitoringclient, resourcev1alpha3.NewResourceGetter(factory, cache), meteringOptions, cc, stopCh) + v1alpha2Handler := v1alpha2.NewTenantHandler(factory, k8sclient, ksclient, evtsClient, loggingClient, auditingclient, am, authorizer, monitoringclient, resourcev1alpha3.NewResourceGetter(factory, cache), meteringOptions, opClient) + handler := newTenantHandler(factory, k8sclient, ksclient, evtsClient, loggingClient, auditingclient, am, authorizer, monitoringclient, resourcev1alpha3.NewResourceGetter(factory, cache), meteringOptions, opClient) ws.Route(ws.POST("/workspacetemplates"). To(v1alpha2Handler.CreateWorkspaceTemplate). diff --git a/pkg/models/openpitrix/applications_test.go b/pkg/models/openpitrix/applications_test.go index b8227d1bd..2a86aeab5 100644 --- a/pkg/models/openpitrix/applications_test.go +++ b/pkg/models/openpitrix/applications_test.go @@ -21,6 +21,8 @@ import ( "encoding/base64" "testing" + "kubesphere.io/kubesphere/pkg/utils/reposcache" + "github.com/go-openapi/strfmt" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/kubernetes" @@ -172,5 +174,5 @@ func prepareAppOperator() ApplicationInterface { k8sClient = fakek8s.NewSimpleClientset() fakeInformerFactory = informers.NewInformerFactories(k8sClient, ksClient, nil, nil, nil, nil) - return newApplicationOperator(cachedReposData, fakeInformerFactory.KubeSphereSharedInformerFactory(), ksClient, fake.NewFakeS3()) + return newApplicationOperator(reposcache.NewReposCache(), fakeInformerFactory.KubeSphereSharedInformerFactory(), ksClient, fake.NewFakeS3()) } diff --git a/pkg/models/openpitrix/interface.go b/pkg/models/openpitrix/interface.go index e72e44c7b..7707f39e0 100644 --- a/pkg/models/openpitrix/interface.go +++ b/pkg/models/openpitrix/interface.go @@ -17,12 +17,11 @@ limitations under the License. package openpitrix import ( - "kubesphere.io/kubesphere/pkg/utils/clusterclient" - "sync" - "k8s.io/client-go/tools/cache" "k8s.io/klog" + "kubesphere.io/kubesphere/pkg/utils/clusterclient" + "kubesphere.io/api/application/v1alpha1" "kubesphere.io/kubesphere/pkg/client/clientset/versioned" @@ -47,46 +46,37 @@ type openpitrixOperator struct { CategoryInterface } -var cachedReposData reposcache.ReposCache -var helmReposInformer cache.SharedIndexInformer -var once sync.Once - -func init() { - cachedReposData = reposcache.NewReposCache() -} - func NewOpenpitrixOperator(ksInformers ks_informers.InformerFactory, ksClient versioned.Interface, s3Client s3.Interface, cc clusterclient.ClusterClients, stopCh <-chan struct{}) Interface { - once.Do(func() { - klog.Infof("start helm repo informer") - helmReposInformer = ksInformers.KubeSphereSharedInformerFactory().Application().V1alpha1().HelmRepos().Informer() - helmReposInformer.AddEventHandler(cache.ResourceEventHandlerFuncs{ - AddFunc: func(obj interface{}) { - r := obj.(*v1alpha1.HelmRepo) - cachedReposData.AddRepo(r) - }, - UpdateFunc: func(oldObj, newObj interface{}) { - oldRepo := oldObj.(*v1alpha1.HelmRepo) - newRepo := newObj.(*v1alpha1.HelmRepo) - cachedReposData.UpdateRepo(oldRepo, newRepo) - }, - DeleteFunc: func(obj interface{}) { - r := obj.(*v1alpha1.HelmRepo) - cachedReposData.DeleteRepo(r) - }, - }) - - ctgInformer := ksInformers.KubeSphereSharedInformerFactory().Application().V1alpha1().HelmCategories().Informer() - ctgInformer.AddIndexers(map[string]cache.IndexFunc{ - reposcache.CategoryIndexer: func(obj interface{}) ([]string, error) { - ctg, _ := obj.(*v1alpha1.HelmCategory) - return []string{ctg.Spec.Name}, nil - }, - }) - indexer := ctgInformer.GetIndexer() - - cachedReposData.SetCategoryIndexer(indexer) + klog.Infof("start helm repo informer") + cachedReposData := reposcache.NewReposCache() + helmReposInformer := ksInformers.KubeSphereSharedInformerFactory().Application().V1alpha1().HelmRepos().Informer() + helmReposInformer.AddEventHandler(cache.ResourceEventHandlerFuncs{ + AddFunc: func(obj interface{}) { + r := obj.(*v1alpha1.HelmRepo) + cachedReposData.AddRepo(r) + }, + UpdateFunc: func(oldObj, newObj interface{}) { + oldRepo := oldObj.(*v1alpha1.HelmRepo) + newRepo := newObj.(*v1alpha1.HelmRepo) + cachedReposData.UpdateRepo(oldRepo, newRepo) + }, + DeleteFunc: func(obj interface{}) { + r := obj.(*v1alpha1.HelmRepo) + cachedReposData.DeleteRepo(r) + }, }) + ctgInformer := ksInformers.KubeSphereSharedInformerFactory().Application().V1alpha1().HelmCategories().Informer() + ctgInformer.AddIndexers(map[string]cache.IndexFunc{ + reposcache.CategoryIndexer: func(obj interface{}) ([]string, error) { + ctg, _ := obj.(*v1alpha1.HelmCategory) + return []string{ctg.Spec.Name}, nil + }, + }) + indexer := ctgInformer.GetIndexer() + + cachedReposData.SetCategoryIndexer(indexer) + return &openpitrixOperator{ AttachmentInterface: newAttachmentOperator(s3Client), ApplicationInterface: newApplicationOperator(cachedReposData, ksInformers.KubeSphereSharedInformerFactory(), ksClient, s3Client), diff --git a/pkg/models/openpitrix/release_test.go b/pkg/models/openpitrix/release_test.go index 7cb03f19b..682d9ee27 100644 --- a/pkg/models/openpitrix/release_test.go +++ b/pkg/models/openpitrix/release_test.go @@ -21,6 +21,8 @@ import ( "encoding/base64" "testing" + "kubesphere.io/kubesphere/pkg/utils/reposcache" + "github.com/go-openapi/strfmt" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/klog" @@ -69,7 +71,7 @@ func TestOpenPitrixRelease(t *testing.T) { } } - rlsOperator := newReleaseOperator(cachedReposData, fakeInformerFactory.KubernetesSharedInformerFactory(), fakeInformerFactory.KubeSphereSharedInformerFactory(), ksClient) + rlsOperator := newReleaseOperator(reposcache.NewReposCache(), fakeInformerFactory.KubernetesSharedInformerFactory(), fakeInformerFactory.KubeSphereSharedInformerFactory(), ksClient, nil) req := CreateClusterRequest{ Name: "test-rls", diff --git a/pkg/models/openpitrix/repo_test.go b/pkg/models/openpitrix/repo_test.go index c44fe5666..eb3226b6d 100644 --- a/pkg/models/openpitrix/repo_test.go +++ b/pkg/models/openpitrix/repo_test.go @@ -20,6 +20,8 @@ import ( "context" "testing" + "kubesphere.io/kubesphere/pkg/utils/reposcache" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" fakek8s "k8s.io/client-go/kubernetes/fake" "k8s.io/klog" @@ -111,5 +113,5 @@ func prepareRepoOperator() RepoInterface { k8sClient = fakek8s.NewSimpleClientset() fakeInformerFactory = informers.NewInformerFactories(k8sClient, ksClient, nil, nil, nil, nil) - return newRepoOperator(cachedReposData, fakeInformerFactory.KubeSphereSharedInformerFactory(), ksClient) + return newRepoOperator(reposcache.NewReposCache(), fakeInformerFactory.KubeSphereSharedInformerFactory(), ksClient) } diff --git a/pkg/models/tenant/tenant.go b/pkg/models/tenant/tenant.go index bd11e859e..eea1a1392 100644 --- a/pkg/models/tenant/tenant.go +++ b/pkg/models/tenant/tenant.go @@ -21,7 +21,6 @@ import ( "encoding/json" "fmt" "io" - "kubesphere.io/kubesphere/pkg/utils/clusterclient" "strings" "time" @@ -115,12 +114,7 @@ type tenantOperator struct { opRelease openpitrix.ReleaseInterface } -func New(informers informers.InformerFactory, k8sclient kubernetes.Interface, ksclient kubesphere.Interface, evtsClient eventsclient.Client, loggingClient loggingclient.Client, auditingclient auditingclient.Client, am am.AccessManagementInterface, authorizer authorizer.Authorizer, monitoringclient monitoringclient.Interface, resourceGetter *resourcev1alpha3.ResourceGetter, cc clusterclient.ClusterClients, stopCh <-chan struct{}) Interface { - var openpitrixRelease openpitrix.ReleaseInterface - if ksclient != nil { - openpitrixRelease = openpitrix.NewOpenpitrixOperator(informers, ksclient, nil, cc, stopCh) - } - +func New(informers informers.InformerFactory, k8sclient kubernetes.Interface, ksclient kubesphere.Interface, evtsClient eventsclient.Client, loggingClient loggingclient.Client, auditingclient auditingclient.Client, am am.AccessManagementInterface, authorizer authorizer.Authorizer, monitoringclient monitoringclient.Interface, resourceGetter *resourcev1alpha3.ResourceGetter, opClient openpitrix.Interface) Interface { return &tenantOperator{ am: am, authorizer: authorizer, @@ -131,7 +125,7 @@ func New(informers informers.InformerFactory, k8sclient kubernetes.Interface, ks lo: logging.NewLoggingOperator(loggingClient), auditing: auditing.NewEventsOperator(auditingclient), mo: monitoring.NewMonitoringOperator(monitoringclient, nil, k8sclient, informers, resourceGetter, nil), - opRelease: openpitrixRelease, + opRelease: opClient, } } diff --git a/tools/cmd/doc-gen/main.go b/tools/cmd/doc-gen/main.go index eef53d1c6..58d27c1f0 100644 --- a/tools/cmd/doc-gen/main.go +++ b/tools/cmd/doc-gen/main.go @@ -121,14 +121,14 @@ func generateSwaggerJson() []byte { informerFactory.KubeSphereSharedInformerFactory(), "", "", "")) urlruntime.Must(kapisdevops.AddToContainer(container, "")) urlruntime.Must(iamv1alpha2.AddToContainer(container, nil, nil, group.New(informerFactory, clientsets.KubeSphere(), clientsets.Kubernetes()), nil)) - urlruntime.Must(monitoringv1alpha3.AddToContainer(container, clientsets.Kubernetes(), nil, nil, informerFactory, nil, nil, nil, nil, nil)) - urlruntime.Must(openpitrixv1.AddToContainer(container, informerFactory, fake.NewSimpleClientset(), nil, nil, nil)) + urlruntime.Must(monitoringv1alpha3.AddToContainer(container, clientsets.Kubernetes(), nil, nil, informerFactory, nil, nil)) + urlruntime.Must(openpitrixv1.AddToContainer(container, informerFactory, fake.NewSimpleClientset(), nil, nil)) urlruntime.Must(openpitrixv2.AddToContainer(container, informerFactory, fake.NewSimpleClientset(), nil)) urlruntime.Must(operationsv1alpha2.AddToContainer(container, clientsets.Kubernetes())) urlruntime.Must(resourcesv1alpha2.AddToContainer(container, clientsets.Kubernetes(), informerFactory, "")) urlruntime.Must(resourcesv1alpha3.AddToContainer(container, informerFactory, nil)) - urlruntime.Must(tenantv1alpha2.AddToContainer(container, informerFactory, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil)) - urlruntime.Must(tenantv1alpha3.AddToContainer(container, informerFactory, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil)) + urlruntime.Must(tenantv1alpha2.AddToContainer(container, informerFactory, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil)) + urlruntime.Must(tenantv1alpha3.AddToContainer(container, informerFactory, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil)) urlruntime.Must(terminalv1alpha2.AddToContainer(container, clientsets.Kubernetes(), nil, nil, nil)) urlruntime.Must(metricsv1alpha2.AddToContainer(nil, container, clientsets.Kubernetes(), nil)) urlruntime.Must(networkv1alpha2.AddToContainer(container, ""))