diff --git a/generator/main.go b/generator/main.go index 882188e..dd09adc 100644 --- a/generator/main.go +++ b/generator/main.go @@ -31,7 +31,6 @@ const ( ICON_CRON = "🕒" ) -// Values is kept in memory to create a values.yaml file. var ( EmptyDirs = []string{} servicesMap = make(map[string]int) @@ -267,8 +266,6 @@ func buildCommandProbe(s *types.ServiceConfig) *helm.Probe { } func setSecretVar(name string, s *types.ServiceConfig, c *helm.Container) *helm.Secret { - locker.Lock() - defer locker.Unlock() // get the list of secret vars secretvars, ok := s.Labels[helm.LABEL_SECRETVARS] if !ok { @@ -285,14 +282,23 @@ func setSecretVar(name string, s *types.ServiceConfig, c *helm.Container) *helm. } // add the secret store.AddEnv(secretvar, ".Values."+name+".environment."+secretvar) - for i, env := range c.Env { - if env.Name == secretvar { - c.Env = append(c.Env[:i], c.Env[i+1:]...) - i-- + AddEnvironment(name, secretvar, *s.Environment[secretvar]) + + // Finally remove the secret var from the environment on the service + // and the helm container definition. + defer func(secretvar string) { // defered because AddEnvironment locks the memory + locker.Lock() + defer locker.Unlock() + + for i, env := range c.Env { + if env.Name == secretvar { + c.Env = append(c.Env[:i], c.Env[i+1:]...) + i-- + } } - } - // remove env from ServiceConfig - delete(s.Environment, secretvar) + + delete(s.Environment, secretvar) + }(secretvar) } return store } diff --git a/generator/values.go b/generator/values.go index f69ad04..02b2861 100644 --- a/generator/values.go +++ b/generator/values.go @@ -7,6 +7,11 @@ import ( "github.com/compose-spec/compose-go/types" ) +var ( + // Values is kept in memory to create a values.yaml file. + Values = make(map[string]map[string]interface{}) +) + // AddValues adds values to the values.yaml map. func AddValues(servicename string, values map[string]EnvVal) { locker.Lock() @@ -21,15 +26,19 @@ func AddValues(servicename string, values map[string]EnvVal) { } } -// AddVolumeValues add a volume to the values.yaml map for the given deployment name. -func AddVolumeValues(deployment string, volname string, values map[string]EnvVal) { +func AddEnvironment(servicename string, key string, val EnvVal) { locker.Lock() defer locker.Unlock() - if _, ok := VolumeValues[deployment]; !ok { - VolumeValues[deployment] = make(map[string]map[string]EnvVal) + if _, ok := Values[servicename]; !ok { + Values[servicename] = make(map[string]interface{}) } - VolumeValues[deployment][volname] = values + + if _, ok := Values[servicename]["environment"]; !ok { + Values[servicename]["environment"] = make(map[string]EnvVal) + } + Values[servicename]["environment"].(map[string]EnvVal)[key] = val + } // setEnvToValues will set the environment variables to the values.yaml map. @@ -44,13 +53,12 @@ func setEnvToValues(name string, s *types.ServiceConfig, c *helm.Container) { return } - valuesEnv := make(map[string]interface{}) for k, v := range env { k = strings.ReplaceAll(k, ".", "_") - valuesEnv[k] = v + AddEnvironment(name, k, v) } - AddValues(name, map[string]EnvVal{"environment": valuesEnv}) + //AddValues(name, map[string]EnvVal{"environment": valuesEnv}) for k := range env { fixedK := strings.ReplaceAll(k, ".", "_") v := "{{ tpl .Values." + name + ".environment." + fixedK + " . }}" diff --git a/generator/volumes.go b/generator/volumes.go index a4a996d..28975ce 100644 --- a/generator/volumes.go +++ b/generator/volumes.go @@ -13,10 +13,22 @@ import ( ) var ( - Values = make(map[string]map[string]interface{}) + // VolumeValues is the map of volumes for each deployment + // containing volume configuration VolumeValues = make(map[string]map[string]map[string]EnvVal) ) +// AddVolumeValues add a volume to the values.yaml map for the given deployment name. +func AddVolumeValues(deployment string, volname string, values map[string]EnvVal) { + locker.Lock() + defer locker.Unlock() + + if _, ok := VolumeValues[deployment]; !ok { + VolumeValues[deployment] = make(map[string]map[string]EnvVal) + } + VolumeValues[deployment][volname] = values +} + // addVolumeFrom takes the LABEL_VOLUMEFROM to get volumes from another container. This can only work with // container that has got LABEL_SAMEPOD as we need to get the volumes from another container in the same deployment. func addVolumeFrom(deployment *helm.Deployment, container *helm.Container, s *types.ServiceConfig) { @@ -86,7 +98,11 @@ func addVolumeFrom(deployment *helm.Deployment, container *helm.Container, s *ty } // prepareVolumes add the volumes of a service. -func prepareVolumes(deployment, name string, s *types.ServiceConfig, container *helm.Container, fileGeneratorChan HelmFileGenerator) []map[string]interface{} { +func prepareVolumes( + deployment, name string, + s *types.ServiceConfig, + container *helm.Container, + fileGeneratorChan HelmFileGenerator) []map[string]interface{} { volumes := make([]map[string]interface{}, 0) mountPoints := make([]interface{}, 0)