ソースを参照

fix merge conflicts

Alexander Belanger 4 年 前
コミット
67a89982fe

+ 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
+}

+ 2 - 2
cmd/migrate/main.go

@@ -4,7 +4,7 @@ import (
 	"fmt"
 	"log"
 
-	"github.com/porter-dev/porter/api/server/shared/envloader"
+	"github.com/porter-dev/porter/api/server/shared/config/loader"
 	"github.com/porter-dev/porter/cmd/migrate/keyrotate"
 
 	adapter "github.com/porter-dev/porter/internal/adapter"
@@ -18,7 +18,7 @@ func main() {
 	logger := lr.NewConsole(true)
 	fmt.Println("running migrations...")
 
-	envConf, err := envloader.FromEnv()
+	envConf, err := loader.FromEnv()
 
 	if err != nil {
 		logger.Fatal().Err(err).Msg("")

+ 12 - 4
cmd/ready/main.go

@@ -5,19 +5,27 @@ import (
 	"net/http"
 	"os"
 
-	"github.com/porter-dev/porter/internal/config"
+	"github.com/porter-dev/porter/api/server/shared/config/loader"
+	lr "github.com/porter-dev/porter/internal/logger"
 )
 
 func main() {
-	appConf := config.FromEnv()
+	logger := lr.NewConsole(true)
 
-	resp, err := http.Get(fmt.Sprintf("http://localhost:%d/api/livez", appConf.Server.Port))
+	envConf, err := loader.FromEnv()
+
+	if err != nil {
+		logger.Fatal().Err(err).Msg("")
+		return
+	}
+
+	resp, err := http.Get(fmt.Sprintf("http://localhost:%d/api/livez", envConf.ServerConf.Port))
 
 	if err != nil || resp.StatusCode >= http.StatusBadRequest {
 		os.Exit(1)
 	}
 
-	resp, err = http.Get(fmt.Sprintf("http://localhost:%d/api/readyz", appConf.Server.Port))
+	resp, err = http.Get(fmt.Sprintf("http://localhost:%d/api/readyz", envConf.ServerConf.Port))
 
 	if err != nil || resp.StatusCode >= http.StatusBadRequest {
 		os.Exit(1)

+ 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<

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

@@ -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`                                                               |             |                 |             |                  |

+ 2 - 2
go.mod

@@ -5,7 +5,7 @@ go 1.16
 require (
 	cloud.google.com/go v0.65.0
 	github.com/AlecAivazis/survey/v2 v2.2.9
-	github.com/DATA-DOG/go-sqlmock v1.5.0
+	github.com/DATA-DOG/go-sqlmock v1.5.0 // indirect
 	github.com/Masterminds/semver/v3 v3.1.1
 	github.com/aws/aws-sdk-go v1.35.4
 	github.com/bradleyfalzon/ghinstallation v1.1.1
@@ -37,7 +37,7 @@ require (
 	github.com/gorilla/websocket v1.4.2
 	github.com/hashicorp/golang-lru v0.5.3 // indirect
 	github.com/itchyny/gojq v0.12.1
-	github.com/jinzhu/gorm v1.9.16
+	github.com/jinzhu/gorm v1.9.16 // indirect
 	github.com/joeshaw/envdecode v0.0.0-20200121155833-099f1fc765bd
 	github.com/josharian/impl v1.1.0 // indirect
 	github.com/kris-nova/logger v0.0.0-20181127235838-fd0d87064b06

+ 11 - 15
server/api/helpers_test.go

@@ -7,9 +7,11 @@ import (
 	"time"
 
 	"github.com/go-chi/chi"
-	"github.com/porter-dev/porter/api/server/shared"
+
+	"github.com/porter-dev/porter/api/server/shared/config"
+	"github.com/porter-dev/porter/api/server/shared/config/loader"
 	"github.com/porter-dev/porter/internal/adapter"
-	"github.com/porter-dev/porter/internal/config"
+	"github.com/porter-dev/porter/internal/auth/sessionstore"
 	"github.com/porter-dev/porter/internal/helm"
 	"github.com/porter-dev/porter/internal/kubernetes"
 	lr "github.com/porter-dev/porter/internal/logger"
@@ -19,8 +21,6 @@ import (
 	"github.com/porter-dev/porter/internal/repository/gorm"
 	"github.com/porter-dev/porter/server/api"
 	"github.com/porter-dev/porter/server/router"
-
-	"github.com/porter-dev/porter/internal/auth/sessionstore"
 )
 
 type tester struct {
@@ -64,9 +64,9 @@ func (t *tester) createUserSession(email string, pw string) {
 }
 
 func newTester(canQuery bool) *tester {
-	appConf := config.Conf{
-		Debug: true,
-		Server: config.ServerConf{
+	appConf := loader.EnvConf{
+		ServerConf: &config.ServerConf{
+			Debug:                true,
 			Port:                 8080,
 			CookieName:           "porter",
 			CookieSecrets:        []string{"secret"},
@@ -78,16 +78,12 @@ func newTester(canQuery bool) *tester {
 			BasicLoginEnabled:    true,
 		},
 		// unimportant here
-		Db: config.DBConf{},
-		// set the helm config to testing
-		K8s: config.K8sConf{
-			IsTesting: true,
-		},
+		DBConf: &config.DBConf{},
 	}
 
-	logger := lr.NewConsole(appConf.Debug)
+	logger := lr.NewConsole(appConf.ServerConf.Debug)
 
-	db, _ := adapter.New(&shared.DBConf{
+	db, _ := adapter.New(&config.DBConf{
 		EncryptionKey: "__random_strong_encryption_key__",
 		SQLLite:       true,
 		SQLLitePath:   "api_test.db",
@@ -138,7 +134,7 @@ func newTester(canQuery bool) *tester {
 	app, _ := api.New(&api.AppConfig{
 		Logger:     logger,
 		Repository: repo,
-		ServerConf: appConf.Server,
+		ServerConf: appConf.ServerConf,
 		TestAgents: &api.TestAgents{
 			HelmAgent:             helm.GetAgentTesting(&helm.Form{}, nil, logger, k8sAgent),
 			HelmTestStorageDriver: helm.StorageMap["memory"](nil, nil, ""),