From 26576cc66503d16ac00b8ccca896ccfa0f179b78 Mon Sep 17 00:00:00 2001 From: Xinzhao Xu Date: Mon, 16 May 2022 16:14:33 +0800 Subject: [PATCH] Add get workspace API --- pkg/kapis/tenant/v1alpha3/handler.go | 16 ++++++++++++++++ pkg/kapis/tenant/v1alpha3/register.go | 8 ++++++++ pkg/models/tenant/tenant.go | 10 ++++++++++ 3 files changed, 34 insertions(+) diff --git a/pkg/kapis/tenant/v1alpha3/handler.go b/pkg/kapis/tenant/v1alpha3/handler.go index c1ea6d933..383c98268 100644 --- a/pkg/kapis/tenant/v1alpha3/handler.go +++ b/pkg/kapis/tenant/v1alpha3/handler.go @@ -20,6 +20,7 @@ import ( "fmt" "github.com/emicklei/go-restful" + "k8s.io/apimachinery/pkg/api/errors" "k8s.io/client-go/kubernetes" "k8s.io/klog" @@ -78,3 +79,18 @@ func (h *tenantHandler) ListWorkspaces(req *restful.Request, resp *restful.Respo resp.WriteEntity(result) } + +func (h *tenantHandler) GetWorkspace(request *restful.Request, response *restful.Response) { + workspace, err := h.tenant.GetWorkspace(request.PathParameter("workspace")) + if err != nil { + klog.Error(err) + if errors.IsNotFound(err) { + api.HandleNotFound(response, request, err) + return + } + api.HandleInternalError(response, request, err) + return + } + + response.WriteEntity(workspace) +} diff --git a/pkg/kapis/tenant/v1alpha3/register.go b/pkg/kapis/tenant/v1alpha3/register.go index 4dab916c4..ce2f7849e 100644 --- a/pkg/kapis/tenant/v1alpha3/register.go +++ b/pkg/kapis/tenant/v1alpha3/register.go @@ -23,6 +23,7 @@ import ( restfulspec "github.com/emicklei/go-restful-openapi" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/client-go/kubernetes" + tenantv1alpha1 "kubesphere.io/api/tenant/v1alpha1" "sigs.k8s.io/controller-runtime/pkg/cache" tenantv1alpha2 "kubesphere.io/api/tenant/v1alpha2" @@ -115,6 +116,13 @@ func AddToContainer(c *restful.Container, factory informers.InformerFactory, k8s Doc("List all workspaces that belongs to the current user"). Metadata(restfulspec.KeyOpenAPITags, []string{constants.WorkspaceTag})) + ws.Route(ws.GET("/workspaces/{workspace}"). + To(handler.GetWorkspace). + Param(ws.PathParameter("workspace", "workspace name")). + Returns(http.StatusOK, api.StatusOK, tenantv1alpha1.Workspace{}). + Doc("Get workspace."). + Metadata(restfulspec.KeyOpenAPITags, []string{constants.WorkspaceTag})) + c.Add(ws) return nil } diff --git a/pkg/models/tenant/tenant.go b/pkg/models/tenant/tenant.go index 47d5ce7f9..7d2c395c6 100644 --- a/pkg/models/tenant/tenant.go +++ b/pkg/models/tenant/tenant.go @@ -72,6 +72,7 @@ const orphanFinalizer = "orphan.finalizers.kubesphere.io" type Interface interface { ListWorkspaces(user user.Info, queryParam *query.Query) (*api.ListResult, error) + GetWorkspace(workspace string) (*tenantv1alpha1.Workspace, error) ListWorkspaceTemplates(user user.Info, query *query.Query) (*api.ListResult, error) CreateWorkspaceTemplate(workspace *tenantv1alpha2.WorkspaceTemplate) (*tenantv1alpha2.WorkspaceTemplate, error) DeleteWorkspaceTemplate(workspace string, opts metav1.DeleteOptions) error @@ -196,6 +197,15 @@ func (t *tenantOperator) ListWorkspaces(user user.Info, queryParam *query.Query) return result, nil } +func (t *tenantOperator) GetWorkspace(workspace string) (*tenantv1alpha1.Workspace, error) { + obj, err := t.resourceGetter.Get(tenantv1alpha1.ResourcePluralWorkspace, "", workspace) + if err != nil { + klog.Error(err) + return nil, err + } + return obj.(*tenantv1alpha1.Workspace), nil +} + func (t *tenantOperator) ListWorkspaceTemplates(user user.Info, queryParam *query.Query) (*api.ListResult, error) { listWS := authorizer.AttributesRecord{