Expand variables from the PodEnvironmentConfigMap
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
							
								
									100caff802
								
							
						
					
					
						commit
						4f8de90e2f
					
				|  | @ -262,7 +262,7 @@ func (c *Cluster) tolerations(tolerationsSpec *[]v1.Toleration) []v1.Toleration | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	podToleration := c.Config.OpConfig.PodToleration | 	podToleration := c.Config.OpConfig.PodToleration | ||||||
| 	if (len(podToleration["key"]) > 0 || len(podToleration["operator"]) > 0 || len(podToleration["value"]) > 0 || len(podToleration["effect"]) > 0) { | 	if len(podToleration["key"]) > 0 || len(podToleration["operator"]) > 0 || len(podToleration["value"]) > 0 || len(podToleration["effect"]) > 0 { | ||||||
| 		return []v1.Toleration{ | 		return []v1.Toleration{ | ||||||
| 			{ | 			{ | ||||||
| 				Key:      podToleration["key"], | 				Key:      podToleration["key"], | ||||||
|  | @ -280,7 +280,8 @@ func (c *Cluster) generatePodTemplate(resourceRequirements *v1.ResourceRequireme | ||||||
| 	tolerationsSpec *[]v1.Toleration, | 	tolerationsSpec *[]v1.Toleration, | ||||||
| 	pgParameters *spec.PostgresqlParam, | 	pgParameters *spec.PostgresqlParam, | ||||||
| 	patroniParameters *spec.Patroni, | 	patroniParameters *spec.Patroni, | ||||||
| 	cloneDescription *spec.CloneDescription) *v1.PodTemplateSpec { | 	cloneDescription *spec.CloneDescription, | ||||||
|  | 	extraEnv map[string]string) *v1.PodTemplateSpec { | ||||||
| 	spiloConfiguration := c.generateSpiloJSONConfiguration(pgParameters, patroniParameters) | 	spiloConfiguration := c.generateSpiloJSONConfiguration(pgParameters, patroniParameters) | ||||||
| 
 | 
 | ||||||
| 	envVars := []v1.EnvVar{ | 	envVars := []v1.EnvVar{ | ||||||
|  | @ -362,10 +363,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 | ||||||
|  | @ -395,7 +409,6 @@ func (c *Cluster) generatePodTemplate(resourceRequirements *v1.ResourceRequireme | ||||||
| 			}, | 			}, | ||||||
| 		}, | 		}, | ||||||
| 		Env: envVars, | 		Env: envVars, | ||||||
| 		EnvFrom: envFromSource, |  | ||||||
| 		SecurityContext: &v1.SecurityContext{ | 		SecurityContext: &v1.SecurityContext{ | ||||||
| 			Privileged: &privilegedMode, | 			Privileged: &privilegedMode, | ||||||
| 		}, | 		}, | ||||||
|  | @ -429,8 +442,16 @@ 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 | ||||||
|  | 	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) | 	} | ||||||
|  | 	podTemplate := c.generatePodTemplate(resourceRequirements, &spec.Tolerations, &spec.PostgresqlParam, &spec.Patroni, &spec.Clone, 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