Jelajahi Sumber

add NewGetConfigMapHandler

Anukul Sangwan 4 tahun lalu
induk
melakukan
f40e455454

+ 60 - 0
api/server/handlers/namespace/get_configmap.go

@@ -0,0 +1,60 @@
+package namespace
+
+import (
+	"net/http"
+
+	"github.com/porter-dev/porter/api/server/authz"
+	"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/server/shared/config"
+	"github.com/porter-dev/porter/api/types"
+	"github.com/porter-dev/porter/internal/models"
+)
+
+type GetConfigMapHandler struct {
+	handlers.PorterHandlerReadWriter
+	authz.KubernetesAgentGetter
+}
+
+func NewGetConfigMapHandler(
+	config *config.Config,
+	decoderValidator shared.RequestDecoderValidator,
+	writer shared.ResultWriter,
+) *GetConfigMapHandler {
+	return &GetConfigMapHandler{
+		PorterHandlerReadWriter: handlers.NewDefaultPorterHandler(config, decoderValidator, writer),
+		KubernetesAgentGetter:   authz.NewOutOfClusterAgentGetter(config),
+	}
+}
+
+func (c *GetConfigMapHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
+	request := &types.GetConfigMapRequest{}
+
+	if ok := c.DecodeAndValidate(w, r, request); !ok {
+		return
+	}
+
+	namespace := r.Context().Value(types.NamespaceScope).(string)
+	cluster, _ := r.Context().Value(types.ClusterScope).(*models.Cluster)
+
+	agent, err := c.GetAgent(r, cluster)
+
+	if err != nil {
+		c.HandleAPIError(w, r, apierrors.NewErrInternal(err))
+		return
+	}
+
+	configMap, err := agent.GetConfigMap(request.Name, namespace)
+
+	if err != nil {
+		c.HandleAPIError(w, r, apierrors.NewErrInternal(err))
+		return
+	}
+
+	var res = types.GetConfigMapResponse{
+		ConfigMap: configMap,
+	}
+
+	c.WriteResult(w, r, res)
+}

+ 34 - 4
api/server/router/namespace.go

@@ -53,8 +53,38 @@ func getNamespaceRoutes(
 
 	routes := make([]*Route, 0)
 
+	// GET /api/projects/{project_id}/clusters/{cluster_id}/namespaces/{namespace}/configmap -> namespace.NewGetConfigMapHandler
+	getConfigMapEndpoint := factory.NewAPIEndpoint(
+		&types.APIRequestMetadata{
+			Verb:   types.APIVerbGet,
+			Method: types.HTTPVerbGet,
+			Path: &types.Path{
+				Parent:       basePath,
+				RelativePath: relPath + "/configmap",
+			},
+			Scopes: []types.PermissionScope{
+				types.UserScope,
+				types.ProjectScope,
+				types.ClusterScope,
+				types.NamespaceScope,
+			},
+		},
+	)
+
+	getConfigMapHandler := namespace.NewGetConfigMapHandler(
+		config,
+		factory.GetDecoderValidator(),
+		factory.GetResultWriter(),
+	)
+
+	routes = append(routes, &Route{
+		Endpoint: getConfigMapEndpoint,
+		Handler:  getConfigMapHandler,
+		Router:   r,
+	})
+
 	// GET /api/projects/{project_id}/clusters/{cluster_id}/namespaces/{namespace}/releases -> namespace.NewListReleasesHandler
-	getEndpoint := factory.NewAPIEndpoint(
+	listReleasesEndpoint := factory.NewAPIEndpoint(
 		&types.APIRequestMetadata{
 			Verb:   types.APIVerbGet,
 			Method: types.HTTPVerbGet,
@@ -71,15 +101,15 @@ func getNamespaceRoutes(
 		},
 	)
 
-	getHandler := namespace.NewListReleasesHandler(
+	listReleasesHandler := namespace.NewListReleasesHandler(
 		config,
 		factory.GetDecoderValidator(),
 		factory.GetResultWriter(),
 	)
 
 	routes = append(routes, &Route{
-		Endpoint: getEndpoint,
-		Handler:  getHandler,
+		Endpoint: listReleasesEndpoint,
+		Handler:  listReleasesHandler,
 		Router:   r,
 	})
 

+ 9 - 0
api/types/namespace.go

@@ -3,6 +3,7 @@ package types
 import (
 	"helm.sh/helm/v3/pkg/action"
 	"helm.sh/helm/v3/pkg/release"
+	v1 "k8s.io/api/core/v1"
 )
 
 // ReleaseListFilter is a struct that represents the various filter options used for
@@ -53,3 +54,11 @@ type ListReleasesRequest struct {
 }
 
 type ListReleasesResponse []*release.Release
+
+type GetConfigMapRequest struct {
+	Name string `schema:"name,required"`
+}
+
+type GetConfigMapResponse struct {
+	*v1.ConfigMap
+}

+ 5 - 3
dashboard/src/shared/api.tsx

@@ -888,12 +888,14 @@ const listConfigMaps = baseApi<
 const getConfigMap = baseApi<
   {
     name: string;
+  },
+  {
+    id: number;
     namespace: string;
     cluster_id: number;
-  },
-  { id: number }
+  }
 >("GET", (pathParams) => {
-  return `/api/projects/${pathParams.id}/k8s/configmap`;
+  return `/api/projects/${pathParams.id}/clusters/${pathParams.cluster_id}/namespaces/${pathParams.namespace}/configmap`;
 });
 
 const createConfigMap = baseApi<

+ 3 - 3
docs/developing/backend-refactor-status.md

@@ -1,5 +1,5 @@
-| Path                                                                                                                    | Assigned To | Changed schema? | CLI Updated | Frontend Updated |
-|-------------------------------------------------------------------------------------------------------------------------|-------------|-----------------|-------------|------------------|
+| Path                                                                                                                        | Assigned To | Changed schema? | CLI Updated | Frontend Updated |
+|-----------------------------------------------------------------------------------------------------------------------------|-------------|-----------------|-------------|------------------|
 | <li>- [x] `GET /api/auth/check`                                                                                             |             | yes             |             | yes              |
 | <li>- [x] `GET /api/capabilities`                                                                                           |             |                 |             | yes              |
 | <li>- [x] `GET /api/cli/login`                                                                                              |             |                 | yes         |                  |
@@ -77,7 +77,7 @@
 | <li>- [ ] `POST /api/projects/{project_id}/invites/{invite_id}`                                                             |             |                 |             |                  |
 | <li>- [ ] `DELETE /api/projects/{project_id}/invites/{invite_id}`                                                           |             |                 |             |                  |
 | <li>- [ ] `GET /api/projects/{project_id}/invites/{token}`                                                                  |             |                 |             |                  |
-| <li>- [ ] `GET /api/projects/{project_id}/k8s/configmap`                                                                    |             |                 |             |                  |
+| <li>- [x] `GET /api/projects/{project_id}/k8s/configmap`                                                                    |             | yes             |             | yes              |
 | <li>- [ ] `POST /api/projects/{project_id}/k8s/configmap/create`                                                            |             |                 |             |                  |
 | <li>- [ ] `DELETE /api/projects/{project_id}/k8s/configmap/delete`                                                          |             |                 |             |                  |
 | <li>- [ ] `GET /api/projects/{project_id}/k8s/configmap/list`                                                               |             |                 |             |                  |