From 8b189cb3c6c2a27933c8cb5430d938ea065ac41d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Bie=C5=84?= <michal1.bien@gmail.com> Date: Wed, 6 Mar 2019 15:25:27 +0100 Subject: [PATCH] Updated replace code for secrets --- Dockerfile | 7 ++--- pkg/service/v1/config-service.go | 45 +++++++++++++++++++-------- pkg/service/v1/config-service_test.go | 8 +++++ 3 files changed, 43 insertions(+), 17 deletions(-) diff --git a/Dockerfile b/Dockerfile index 81c8131..6df3030 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,17 +1,16 @@ FROM golang:1.11.4 as builder WORKDIR / RUN apt-get update && apt-get install unzip -RUN wget https://github.com/protocolbuffers/protobuf/releases/download/v3.6.0/protoc-3.6.0-linux-x86_64.zip -RUN unzip protoc-3.6.0-linux-x86_64.zip -d / +RUN wget https://github.com/protocolbuffers/protobuf/releases/download/v3.6.1/protoc-3.6.1-linux-x86_64.zip +RUN unzip protoc-3.6.1-linux-x86_64.zip -d / WORKDIR /build COPY api/ api COPY pkg/ pkg COPY third_party/ third_party COPY go.mod/ . -RUN go get -u github.com/golang/protobuf/protoc-gen-go +RUN go get github.com/golang/protobuf/protoc-gen-go RUN mkdir -p /build/pkg/api/v1 RUN protoc --proto_path=/build/api/proto/v1 --proto_path=/build/third_party --go_out=plugins=grpc:/build/pkg/api/v1 config-service.proto -RUN go test ./... WORKDIR /build/pkg/cmd/server RUN CGO_ENABLED=0 GOOS=linux go build diff --git a/pkg/service/v1/config-service.go b/pkg/service/v1/config-service.go index 99441aa..b81707f 100644 --- a/pkg/service/v1/config-service.go +++ b/pkg/service/v1/config-service.go @@ -306,22 +306,41 @@ func (s *basicAuthServiceServer) CreateOrReplace(ctx context.Context, req *v1.In return prepareResponse(v1.Status_FAILED, namespaceNotFound), err } - //create secret - secret := apiv1.Secret{} - secret.SetNamespace(depl.Namespace) - secret.SetName(getAuthSecretName(depl.Uid)) - secret.Data, err = s.PrepareSecretDataFromCredentials(req.Credentials) - if err != nil { - return prepareResponse(v1.Status_FAILED, "Error while preparing secret!"), err - } + secretName := getAuthSecretName(depl.Uid) - //commit secret - _, err = s.kubeAPI.CoreV1().Secrets(depl.Namespace).Create(&secret) + _, err = s.kubeAPI.CoreV1().Secrets(depl.Namespace).Get(secretName, metav1.GetOptions{}) + //Secret does not exist, we have to create it if err != nil { - return prepareResponse(v1.Status_FAILED, "Error while creating secret!"), err - } + //create secret + secret := apiv1.Secret{} + secret.SetNamespace(depl.Namespace) + secret.SetName(secretName) + secret.Data, err = s.PrepareSecretDataFromCredentials(req.Credentials) + if err != nil { + return prepareResponse(v1.Status_FAILED, "Error while preparing secret!"), err + } + + //commit secret + _, err = s.kubeAPI.CoreV1().Secrets(depl.Namespace).Create(&secret) + if err != nil { + return prepareResponse(v1.Status_FAILED, "Error while creating secret!"), err + } - return prepareResponse(v1.Status_OK, "Secret created successfully"), nil + return prepareResponse(v1.Status_OK, "Secret created successfully"), nil + } else { + patch, err := s.PrepareSecretJsonFromCredentials(req.Credentials) + if err != nil { + return prepareResponse(v1.Status_FAILED, "Error while parsing configuration data"), err + } + + //patch secret + _, err = s.kubeAPI.CoreV1().Secrets(depl.Namespace).Patch(depl.Uid, types.MergePatchType, patch) + if err != nil { + return prepareResponse(v1.Status_FAILED, "Error while patching configmap!"), err + } + + return prepareResponse(v1.Status_OK, "ConfigMap updated successfully"), nil + } } func (s *basicAuthServiceServer) DeleteIfExists(ctx context.Context, req *v1.InstanceRequest) (*v1.ServiceResponse, error) { diff --git a/pkg/service/v1/config-service_test.go b/pkg/service/v1/config-service_test.go index a6a3d56..cd9ef4d 100644 --- a/pkg/service/v1/config-service_test.go +++ b/pkg/service/v1/config-service_test.go @@ -23,4 +23,12 @@ func TestBasicAuthServiceServer_PrepareSecretDataFromCredentials(t *testing.T) { func TestBasicAuthServiceServer_PrepareSecretJsonFromCredentials(t *testing.T) { +} + +func TestConfigServiceServer_PrepareDataJsonFromRepository(t *testing.T) { + +} + +func TestConfigServiceServer_PrepareDataMapFromRepository(t *testing.T) { + } \ No newline at end of file -- GitLab