Expand variables from the PodEnvironmentConfigMap (#4)
Inject PodEnvironmentConfigMap variables inline into the statefulset definition in order to be able to figure out changes to the statefulset when only PodEnvironmentConfigMap has changed.
This commit is contained in:
parent
1c5451cd7d
commit
da4b66210a
|
|
@ -281,7 +281,8 @@ func (c *Cluster) generatePodTemplate(resourceRequirements *v1.ResourceRequireme
|
||||||
pgParameters *spec.PostgresqlParam,
|
pgParameters *spec.PostgresqlParam,
|
||||||
patroniParameters *spec.Patroni,
|
patroniParameters *spec.Patroni,
|
||||||
cloneDescription *spec.CloneDescription,
|
cloneDescription *spec.CloneDescription,
|
||||||
dockerImage *string) *v1.PodTemplateSpec {
|
dockerImage *string,
|
||||||
|
extraEnv map[string]string) *v1.PodTemplateSpec {
|
||||||
spiloConfiguration := c.generateSpiloJSONConfiguration(pgParameters, patroniParameters)
|
spiloConfiguration := c.generateSpiloJSONConfiguration(pgParameters, patroniParameters)
|
||||||
|
|
||||||
envVars := []v1.EnvVar{
|
envVars := []v1.EnvVar{
|
||||||
|
|
@ -363,10 +364,23 @@ func (c *Cluster) generatePodTemplate(resourceRequirements *v1.ResourceRequireme
|
||||||
envVars = append(envVars, c.generateCloneEnvironment(cloneDescription)...)
|
envVars = append(envVars, c.generateCloneEnvironment(cloneDescription)...)
|
||||||
}
|
}
|
||||||
|
|
||||||
envFromSource := []v1.EnvFromSource{}
|
var names []string
|
||||||
if c.OpConfig.PodEnvironmentConfigMap != "" {
|
// handle environment variables from the PodEnvironmentConfigMap. We don't use envSource here as it is impossible
|
||||||
configMapRef := v1.ConfigMapEnvSource{LocalObjectReference: v1.LocalObjectReference{Name: c.OpConfig.PodEnvironmentConfigMap}}
|
// to track any changes to the object envSource points to. In order to emulate the envSource behavior, however, we
|
||||||
envFromSource = append(envFromSource, v1.EnvFromSource{ConfigMapRef: &configMapRef})
|
// need to make sure that PodConfigMap variables doesn't override those we set explicitely from the configuration
|
||||||
|
// parameters
|
||||||
|
envVarsMap := make(map[string]string)
|
||||||
|
for _, envVar := range envVars {
|
||||||
|
envVarsMap[envVar.Name] = envVar.Value
|
||||||
|
}
|
||||||
|
for name := range extraEnv {
|
||||||
|
if _, ok := envVarsMap[name]; !ok {
|
||||||
|
names = append(names, name)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sort.Strings(names)
|
||||||
|
for _, name := range names {
|
||||||
|
envVars = append(envVars, v1.EnvVar{Name: name, Value: extraEnv[name]})
|
||||||
}
|
}
|
||||||
|
|
||||||
privilegedMode := true
|
privilegedMode := true
|
||||||
|
|
@ -400,7 +414,6 @@ func (c *Cluster) generatePodTemplate(resourceRequirements *v1.ResourceRequireme
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Env: envVars,
|
Env: envVars,
|
||||||
EnvFrom: envFromSource,
|
|
||||||
SecurityContext: &v1.SecurityContext{
|
SecurityContext: &v1.SecurityContext{
|
||||||
Privileged: &privilegedMode,
|
Privileged: &privilegedMode,
|
||||||
},
|
},
|
||||||
|
|
@ -434,8 +447,15 @@ func (c *Cluster) generateStatefulSet(spec *spec.PostgresSpec) (*v1beta1.Statefu
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("could not generate resource requirements: %v", err)
|
return nil, fmt.Errorf("could not generate resource requirements: %v", err)
|
||||||
}
|
}
|
||||||
|
var extraEnv map[string]string
|
||||||
podTemplate := c.generatePodTemplate(resourceRequirements, &spec.Tolerations, &spec.PostgresqlParam, &spec.Patroni, &spec.Clone, &spec.DockerImage)
|
if c.OpConfig.PodEnvironmentConfigMap != "" {
|
||||||
|
if cm, err := c.KubeClient.ConfigMaps(c.Namespace).Get(c.OpConfig.PodEnvironmentConfigMap, metav1.GetOptions{}); err != nil {
|
||||||
|
return nil, fmt.Errorf("could not read PodEnvironmentConfigMap: %v", err)
|
||||||
|
} else {
|
||||||
|
extraEnv = cm.Data
|
||||||
|
}
|
||||||
|
}
|
||||||
|
podTemplate := c.generatePodTemplate(resourceRequirements, &spec.Tolerations, &spec.PostgresqlParam, &spec.Patroni, &spec.Clone, &spec.DockerImage, extraEnv)
|
||||||
volumeClaimTemplate, err := generatePersistentVolumeClaimTemplate(spec.Volume.Size, spec.Volume.StorageClass)
|
volumeClaimTemplate, err := generatePersistentVolumeClaimTemplate(spec.Volume.Size, spec.Volume.StorageClass)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("could not generate volume claim template: %v", err)
|
return nil, fmt.Errorf("could not generate volume claim template: %v", err)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue