Sfoglia il codice sorgente

add delete namespace endpoint

Anukul Sangwan 4 anni fa
parent
commit
331d092200

+ 48 - 0
api/server/handlers/cluster/delete_namespace.go

@@ -0,0 +1,48 @@
+package cluster
+
+import (
+	"net/http"
+
+	"github.com/porter-dev/porter/api/server/handlers"
+	"github.com/porter-dev/porter/api/server/shared"
+	"github.com/porter-dev/porter/api/server/shared/apierrors"
+	"github.com/porter-dev/porter/api/types"
+	"github.com/porter-dev/porter/internal/models"
+)
+
+type DeleteNamespaceHandler struct {
+	handlers.PorterHandlerReader
+	KubernetesAgentGetter
+}
+
+func NewDeleteNamespaceHandler(
+	config *shared.Config,
+	decoderValidator shared.RequestDecoderValidator,
+) *DeleteNamespaceHandler {
+	return &DeleteNamespaceHandler{
+		PorterHandlerReader:   handlers.NewDefaultPorterHandler(config, decoderValidator, nil),
+		KubernetesAgentGetter: NewDefaultKubernetesAgentGetter(config),
+	}
+}
+
+func (c *DeleteNamespaceHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
+	request := &types.DeleteNamespaceRequest{}
+
+	if ok := c.DecodeAndValidate(w, r, request); !ok {
+		return
+	}
+
+	cluster, _ := r.Context().Value(types.ClusterScope).(*models.Cluster)
+
+	agent, err := c.GetAgent(cluster)
+
+	if err != nil {
+		c.HandleAPIError(w, apierrors.NewErrInternal(err))
+		return
+	}
+
+	if err := agent.DeleteNamespace(request.Name); err != nil {
+		c.HandleAPIError(w, apierrors.NewErrInternal(err))
+		return
+	}
+}

+ 28 - 0
api/server/router/cluster.go

@@ -136,5 +136,33 @@ func getClusterRoutes(
 		Router:   r,
 	})
 
+	// DELETE /api/projects/{project_id}/clusters/{cluster_id}/namespaces/delete -> cluster.NewDeleteNamespaceHandler
+	deleteNamespaceEndpoint := factory.NewAPIEndpoint(
+		&types.APIRequestMetadata{
+			Verb:   types.APIVerbDelete,
+			Method: types.HTTPVerbDelete,
+			Path: &types.Path{
+				Parent:       basePath,
+				RelativePath: relPath + "/namespaces/delete",
+			},
+			Scopes: []types.PermissionScope{
+				types.UserScope,
+				types.ProjectScope,
+				types.ClusterScope,
+			},
+		},
+	)
+
+	deleteNamespaceHandler := cluster.NewDeleteNamespaceHandler(
+		config,
+		factory.GetDecoderValidator(),
+	)
+
+	routes = append(routes, &Route{
+		Endpoint: deleteNamespaceEndpoint,
+		Handler:  deleteNamespaceHandler,
+		Router:   r,
+	})
+
 	return routes, newPath
 }

+ 4 - 0
api/types/cluster.go

@@ -54,3 +54,7 @@ type CreateNamespaceRequest struct {
 type CreateNamespaceResponse struct {
 	*v1.Namespace
 }
+
+type DeleteNamespaceRequest struct {
+	Name string `json:"name" form:"required"`
+}

+ 2 - 1
dashboard/src/main/home/modals/DeleteNamespaceModal.tsx

@@ -27,9 +27,10 @@ const DeleteNamespaceModal = () => {
     api
       .deleteNamespace(
         "<token>",
-        { name: currentModalData.metadata.name, cluster_id: currentCluster.id },
+        { name: currentModalData.metadata.name },
         {
           id: currentProject.id,
+          cluster_id: currentCluster.id,
         }
       )
       .then((res) => {

+ 6 - 4
dashboard/src/shared/api.tsx

@@ -953,12 +953,14 @@ const createNamespace = baseApi<
 const deleteNamespace = baseApi<
   {
     name: string;
-    cluster_id: number;
   },
-  { id: number }
+  {
+    id: number;
+    cluster_id: number;
+  }
 >("DELETE", (pathParams) => {
-  let { id } = pathParams;
-  return `/api/projects/${id}/k8s/namespaces/delete`;
+  let { id, cluster_id } = pathParams;
+  return `/api/projects/${id}/clusters/${cluster_id}/namespaces/delete`;
 });
 
 const deleteJob = baseApi<