From ea1b3c336727f6f7af89afb903afaeaab0511244 Mon Sep 17 00:00:00 2001 From: Tedi Mitiku Date: Mon, 7 Oct 2024 21:07:50 +0900 Subject: [PATCH] finish override --- kontrol-service/api/server.go | 14 +++++++++-- kontrol-service/engine/docker.go | 31 ++++++++++++++++++++++++- kontrol-service/go.mod | 2 ++ kontrol-service/go.sum | 2 -- kontrol-service/types/flow_spec/spec.go | 6 +++-- 5 files changed, 48 insertions(+), 7 deletions(-) diff --git a/kontrol-service/api/server.go b/kontrol-service/api/server.go index 3783e6f..9de868e 100644 --- a/kontrol-service/api/server.go +++ b/kontrol-service/api/server.go @@ -189,9 +189,19 @@ func (sv *Server) PostTenantUuidFlowCreate(_ context.Context, request api.PostTe patches := []flow_spec.ServicePatchSpec{} for _, serviceUpdate := range serviceUpdates { + envVarOverrides := map[string]string{} + if serviceUpdate.EnvVarOverrides != nil { + envVarOverrides = *serviceUpdate.EnvVarOverrides + } + secretEnvVarOverrides := map[string]string{} + if serviceUpdate.SecretEnvVarOverrides != nil { + secretEnvVarOverrides = *serviceUpdate.SecretEnvVarOverrides + } patch := flow_spec.ServicePatchSpec{ - Service: serviceUpdate.ServiceName, - Image: serviceUpdate.ImageLocator, + Service: serviceUpdate.ServiceName, + Image: serviceUpdate.ImageLocator, + SecretEnvVarOverrides: envVarOverrides, + EnvVarOverrides: secretEnvVarOverrides, } logrus.Infof("starting new dev flow for service %v on image %v", patch.Service, patch.Image) patches = append(patches, patch) diff --git a/kontrol-service/engine/docker.go b/kontrol-service/engine/docker.go index d35ae61..c84cca6 100644 --- a/kontrol-service/engine/docker.go +++ b/kontrol-service/engine/docker.go @@ -6,7 +6,6 @@ import ( "github.com/kurtosis-tech/stacktrace" "github.com/sirupsen/logrus" "gopkg.in/yaml.v2" - corev1 "k8s.io/api/core/v1" net "k8s.io/api/networking/v1" gateway "sigs.k8s.io/gateway-api/apis/v1" @@ -51,6 +50,36 @@ func GenerateProdDevCluster(baseClusterTopologyMaybeWithTemplateOverrides *resol // TODO: find a better way to update deploymentSpec, this assumes there is only container in the pod deploymentSpec.Template.Spec.Containers[0].Image = item.Image + // merge environment variables and env var overrides + envVarOverrides := map[string]corev1.EnvVar{} + for k, v := range item.EnvVarOverrides { + envVarOverrides[k] = corev1.EnvVar{ + Name: k, + Value: v, + ValueFrom: nil, + } + } + for k, v := range item.SecretEnvVarOverrides { + envVarOverrides[k] = corev1.EnvVar{ + Name: k, + ValueFrom: &corev1.EnvVarSource{ + SecretKeyRef: &corev1.SecretKeySelector{ + LocalObjectReference: corev1.LocalObjectReference{Name: v}, // assume v is the secret name + Key: k, + Optional: nil, + }, + }, + } + } + envVars := []corev1.EnvVar{} + for _, envVar := range deploymentSpec.Template.Spec.Containers[0].Env { + if override, ok := envVarOverrides[envVar.Name]; ok { + envVars = append(envVars, override) + } else { + envVars = append(envVars, envVar) + } + } + patches = append(patches, flow_spec.ServicePatch{ Service: devServiceName, DeploymentSpec: deploymentSpec, diff --git a/kontrol-service/go.mod b/kontrol-service/go.mod index 2053b88..5306bce 100644 --- a/kontrol-service/go.mod +++ b/kontrol-service/go.mod @@ -4,6 +4,8 @@ go 1.22.0 toolchain go1.22.3 +replace github.com/kurtosis-tech/kardinal/libs/cli-kontrol-api => ../../kardinal/libs/cli-kontrol-api + require ( github.com/DATA-DOG/go-sqlmock v1.5.2 github.com/dominikbraun/graph v0.23.0 diff --git a/kontrol-service/go.sum b/kontrol-service/go.sum index 7070f7d..92b7aa3 100644 --- a/kontrol-service/go.sum +++ b/kontrol-service/go.sum @@ -77,8 +77,6 @@ github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/kurtosis-tech/kardinal/libs/cli-kontrol-api v0.0.0-20240930151959-22270454aa6b h1:pJlgnXZCdSVl1ts0gDagES1TRWXzA/WOrKjl0SCSES0= -github.com/kurtosis-tech/kardinal/libs/cli-kontrol-api v0.0.0-20240930151959-22270454aa6b/go.mod h1:dQ+ZYcpSrex3FlfyYAvGuhIFHim+oJuJvslNp8rwuFo= github.com/kurtosis-tech/kardinal/libs/manager-kontrol-api v0.0.0-20240926004715-b5a991623aeb h1:rMT8EvgX+dFL0Aq2Ea1lBeIFxCPHPDSF59FktBnKhRs= github.com/kurtosis-tech/kardinal/libs/manager-kontrol-api v0.0.0-20240926004715-b5a991623aeb/go.mod h1:uUIEjxgSYw58hJgD1AwGOBE3LGPwLDiYtNmLGmnO8vI= github.com/kurtosis-tech/stacktrace v0.0.0-20211028211901-1c67a77b5409 h1:YQTATifMUwZEtZYb0LVA7DK2pj8s71iY8rzweuUQ5+g= diff --git a/kontrol-service/types/flow_spec/spec.go b/kontrol-service/types/flow_spec/spec.go index ef7ebb8..ec98657 100644 --- a/kontrol-service/types/flow_spec/spec.go +++ b/kontrol-service/types/flow_spec/spec.go @@ -6,6 +6,8 @@ type FlowPatchSpec struct { } type ServicePatchSpec struct { - Service string - Image string + Service string + Image string + EnvVarOverrides map[string]string + SecretEnvVarOverrides map[string]string }