do not overwrite clone and standby variables
This commit is contained in:
		
							parent
							
								
									a8b264de29
								
							
						
					
					
						commit
						602e914028
					
				| 
						 | 
					@ -872,6 +872,14 @@ func (c *Cluster) generateSpiloPodEnvVars(
 | 
				
			||||||
		envVars = append(envVars, v1.EnvVar{Name: "KUBERNETES_USE_CONFIGMAPS", Value: "true"})
 | 
							envVars = append(envVars, v1.EnvVar{Name: "KUBERNETES_USE_CONFIGMAPS", Value: "true"})
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if cloneDescription != nil && cloneDescription.ClusterName != "" {
 | 
				
			||||||
 | 
							envVars = append(envVars, c.generateCloneEnvironment(cloneDescription)...)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if standbyDescription != nil {
 | 
				
			||||||
 | 
							envVars = append(envVars, c.generateStandbyEnvironment(standbyDescription)...)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// fetch cluster-specific variables that will override all subsequent global variables
 | 
						// fetch cluster-specific variables that will override all subsequent global variables
 | 
				
			||||||
	if len(c.Spec.Env) > 0 {
 | 
						if len(c.Spec.Env) > 0 {
 | 
				
			||||||
		envVars = appendEnvVars(envVars, c.Spec.Env...)
 | 
							envVars = appendEnvVars(envVars, c.Spec.Env...)
 | 
				
			||||||
| 
						 | 
					@ -923,14 +931,6 @@ func (c *Cluster) generateSpiloPodEnvVars(
 | 
				
			||||||
		opConfigEnvVars = append(opConfigEnvVars, v1.EnvVar{Name: "LOG_BUCKET_SCOPE_PREFIX", Value: ""})
 | 
							opConfigEnvVars = append(opConfigEnvVars, v1.EnvVar{Name: "LOG_BUCKET_SCOPE_PREFIX", Value: ""})
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if cloneDescription != nil && cloneDescription.ClusterName != "" {
 | 
					 | 
				
			||||||
		opConfigEnvVars = append(opConfigEnvVars, c.generateCloneEnvironment(cloneDescription)...)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if c.Spec.StandbyCluster != nil {
 | 
					 | 
				
			||||||
		opConfigEnvVars = append(opConfigEnvVars, c.generateStandbyEnvironment(standbyDescription)...)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	envVars = appendEnvVars(envVars, opConfigEnvVars...)
 | 
						envVars = appendEnvVars(envVars, opConfigEnvVars...)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	//sort.Slice(envVars,
 | 
						//sort.Slice(envVars,
 | 
				
			||||||
| 
						 | 
					@ -1823,6 +1823,7 @@ func (c *Cluster) generateCloneEnvironment(description *acidv1.CloneDescription)
 | 
				
			||||||
	cluster := description.ClusterName
 | 
						cluster := description.ClusterName
 | 
				
			||||||
	result = append(result, v1.EnvVar{Name: "CLONE_SCOPE", Value: cluster})
 | 
						result = append(result, v1.EnvVar{Name: "CLONE_SCOPE", Value: cluster})
 | 
				
			||||||
	if description.EndTimestamp == "" {
 | 
						if description.EndTimestamp == "" {
 | 
				
			||||||
 | 
							c.logger.Infof("cloning with basebackup from %s", cluster)
 | 
				
			||||||
		// cloning with basebackup, make a connection string to the cluster to clone from
 | 
							// cloning with basebackup, make a connection string to the cluster to clone from
 | 
				
			||||||
		host, port := c.getClusterServiceConnectionParameters(cluster)
 | 
							host, port := c.getClusterServiceConnectionParameters(cluster)
 | 
				
			||||||
		// TODO: make some/all of those constants
 | 
							// TODO: make some/all of those constants
 | 
				
			||||||
| 
						 | 
					@ -1844,67 +1845,48 @@ func (c *Cluster) generateCloneEnvironment(description *acidv1.CloneDescription)
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
			})
 | 
								})
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		// cloning with S3, find out the bucket to clone
 | 
							c.logger.Info("cloning from WAL location")
 | 
				
			||||||
		msg := "clone from S3 bucket"
 | 
					 | 
				
			||||||
		c.logger.Info(msg, description.S3WalPath)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		if description.S3WalPath == "" {
 | 
							if description.S3WalPath == "" {
 | 
				
			||||||
			msg := "figure out which S3 bucket to use from env"
 | 
								c.logger.Info("no S3 WAL path defined - taking value from global config", description.S3WalPath)
 | 
				
			||||||
			c.logger.Info(msg, description.S3WalPath)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if c.OpConfig.WALES3Bucket != "" {
 | 
								if c.OpConfig.WALES3Bucket != "" {
 | 
				
			||||||
				envs := []v1.EnvVar{
 | 
									c.logger.Debugf("found WALES3Bucket %s - will set CLONE_WAL_S3_BUCKET", c.OpConfig.WALES3Bucket)
 | 
				
			||||||
					{
 | 
									result = append(result, v1.EnvVar{Name: "CLONE_WAL_S3_BUCKET", Value: c.OpConfig.WALES3Bucket})
 | 
				
			||||||
						Name:  "CLONE_WAL_S3_BUCKET",
 | 
					 | 
				
			||||||
						Value: c.OpConfig.WALES3Bucket,
 | 
					 | 
				
			||||||
					},
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
				result = append(result, envs...)
 | 
					 | 
				
			||||||
			} else if c.OpConfig.WALGSBucket != "" {
 | 
								} else if c.OpConfig.WALGSBucket != "" {
 | 
				
			||||||
				envs := []v1.EnvVar{
 | 
									c.logger.Debugf("found WALGSBucket %s - will set CLONE_WAL_GS_BUCKET", c.OpConfig.WALGSBucket)
 | 
				
			||||||
					{
 | 
									result = append(result, v1.EnvVar{Name: "CLONE_WAL_GS_BUCKET", Value: c.OpConfig.WALGSBucket})
 | 
				
			||||||
						Name:  "CLONE_WAL_GS_BUCKET",
 | 
									if c.OpConfig.GCPCredentials != "" {
 | 
				
			||||||
						Value: c.OpConfig.WALGSBucket,
 | 
										result = append(result, v1.EnvVar{Name: "CLONE_GOOGLE_APPLICATION_CREDENTIALS", Value: c.OpConfig.GCPCredentials})
 | 
				
			||||||
					},
 | 
					 | 
				
			||||||
					{
 | 
					 | 
				
			||||||
						Name:  "CLONE_GOOGLE_APPLICATION_CREDENTIALS",
 | 
					 | 
				
			||||||
						Value: c.OpConfig.GCPCredentials,
 | 
					 | 
				
			||||||
					},
 | 
					 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				result = append(result, envs...)
 | 
					 | 
				
			||||||
			} else if c.OpConfig.WALAZStorageAccount != "" {
 | 
								} else if c.OpConfig.WALAZStorageAccount != "" {
 | 
				
			||||||
				envs := []v1.EnvVar{
 | 
									c.logger.Debugf("found WALAZStorageAccount %s - will set CLONE_AZURE_STORAGE_ACCOUNT", c.OpConfig.WALAZStorageAccount)
 | 
				
			||||||
					{
 | 
									result = append(result, v1.EnvVar{Name: "CLONE_AZURE_STORAGE_ACCOUNT", Value: c.OpConfig.WALAZStorageAccount})
 | 
				
			||||||
						Name:  "CLONE_AZURE_STORAGE_ACCOUNT",
 | 
					 | 
				
			||||||
						Value: c.OpConfig.WALAZStorageAccount,
 | 
					 | 
				
			||||||
					},
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
				result = append(result, envs...)
 | 
					 | 
				
			||||||
			} else {
 | 
								} else {
 | 
				
			||||||
				c.logger.Error("Cannot figure out S3 or GS bucket. Both are empty.")
 | 
									c.logger.Error("cannot figure out S3 or GS bucket or AZ storage account. All are empty in config.")
 | 
				
			||||||
 | 
									return result
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// append suffix because WAL location name is not the whole path
 | 
				
			||||||
 | 
								result = append(result, v1.EnvVar{Name: "CLONE_WAL_BUCKET_SCOPE_SUFFIX", Value: getBucketScopeSuffix(description.UID)})
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								c.logger.Debugf("use S3WalPath %s from the manifest", description.S3WalPath)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			envs := []v1.EnvVar{
 | 
								envs := []v1.EnvVar{
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					Name:  "CLONE_WAL_BUCKET_SCOPE_SUFFIX",
 | 
					 | 
				
			||||||
					Value: getBucketScopeSuffix(description.UID),
 | 
					 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			result = append(result, envs...)
 | 
					 | 
				
			||||||
		} else {
 | 
					 | 
				
			||||||
			msg := "use custom parsed S3WalPath %s from the manifest"
 | 
					 | 
				
			||||||
			c.logger.Warningf(msg, description.S3WalPath)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			result = append(result, v1.EnvVar{
 | 
					 | 
				
			||||||
					Name:  "CLONE_WALE_S3_PREFIX",
 | 
										Name:  "CLONE_WALE_S3_PREFIX",
 | 
				
			||||||
					Value: description.S3WalPath,
 | 
										Value: description.S3WalPath,
 | 
				
			||||||
			})
 | 
									},
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										Name:  "CLONE_WAL_BUCKET_SCOPE_SUFFIX",
 | 
				
			||||||
 | 
										Value: "",
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								result = append(result, envs...)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		result = append(result, v1.EnvVar{Name: "CLONE_METHOD", Value: "CLONE_WITH_WALE"})
 | 
							result = append(result, v1.EnvVar{Name: "CLONE_METHOD", Value: "CLONE_WITH_WALE"})
 | 
				
			||||||
		result = append(result, v1.EnvVar{Name: "CLONE_TARGET_TIME", Value: description.EndTimestamp})
 | 
							result = append(result, v1.EnvVar{Name: "CLONE_TARGET_TIME", Value: description.EndTimestamp})
 | 
				
			||||||
		result = append(result, v1.EnvVar{Name: "CLONE_WAL_BUCKET_SCOPE_PREFIX", Value: ""})
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if description.S3Endpoint != "" {
 | 
							if description.S3Endpoint != "" {
 | 
				
			||||||
			result = append(result, v1.EnvVar{Name: "CLONE_AWS_ENDPOINT", Value: description.S3Endpoint})
 | 
								result = append(result, v1.EnvVar{Name: "CLONE_AWS_ENDPOINT", Value: description.S3Endpoint})
 | 
				
			||||||
| 
						 | 
					@ -1937,7 +1919,7 @@ func (c *Cluster) generateStandbyEnvironment(description *acidv1.StandbyDescript
 | 
				
			||||||
	result := make([]v1.EnvVar, 0)
 | 
						result := make([]v1.EnvVar, 0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if description.StandbyHost != "" {
 | 
						if description.StandbyHost != "" {
 | 
				
			||||||
		// standby from remote primary
 | 
							c.logger.Info("preparing standby streaming from remote primary")
 | 
				
			||||||
		result = append(result, v1.EnvVar{
 | 
							result = append(result, v1.EnvVar{
 | 
				
			||||||
			Name:  "STANDBY_HOST",
 | 
								Name:  "STANDBY_HOST",
 | 
				
			||||||
			Value: description.StandbyHost,
 | 
								Value: description.StandbyHost,
 | 
				
			||||||
| 
						 | 
					@ -1949,30 +1931,20 @@ func (c *Cluster) generateStandbyEnvironment(description *acidv1.StandbyDescript
 | 
				
			||||||
			})
 | 
								})
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
 | 
							c.logger.Info("preparing standby streaming from WAL location")
 | 
				
			||||||
		if description.S3WalPath != "" {
 | 
							if description.S3WalPath != "" {
 | 
				
			||||||
			// standby with S3, find out the bucket to setup standby
 | 
					 | 
				
			||||||
			msg := "Standby from S3 bucket using custom parsed S3WalPath from the manifest %s "
 | 
					 | 
				
			||||||
			c.logger.Infof(msg, description.S3WalPath)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			result = append(result, v1.EnvVar{
 | 
								result = append(result, v1.EnvVar{
 | 
				
			||||||
				Name:  "STANDBY_WALE_S3_PREFIX",
 | 
									Name:  "STANDBY_WALE_S3_PREFIX",
 | 
				
			||||||
				Value: description.S3WalPath,
 | 
									Value: description.S3WalPath,
 | 
				
			||||||
			})
 | 
								})
 | 
				
			||||||
		} else if description.GSWalPath != "" {
 | 
							} else if description.GSWalPath != "" {
 | 
				
			||||||
			msg := "Standby from GS bucket using custom parsed GSWalPath from the manifest %s "
 | 
								result = append(result, v1.EnvVar{
 | 
				
			||||||
			c.logger.Infof(msg, description.GSWalPath)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			envs := []v1.EnvVar{
 | 
					 | 
				
			||||||
				{
 | 
					 | 
				
			||||||
				Name:  "STANDBY_WALE_GS_PREFIX",
 | 
									Name:  "STANDBY_WALE_GS_PREFIX",
 | 
				
			||||||
				Value: description.GSWalPath,
 | 
									Value: description.GSWalPath,
 | 
				
			||||||
				},
 | 
								})
 | 
				
			||||||
				{
 | 
							} else {
 | 
				
			||||||
					Name:  "STANDBY_GOOGLE_APPLICATION_CREDENTIALS",
 | 
								c.logger.Error("no WAL path specified in standby section")
 | 
				
			||||||
					Value: c.OpConfig.GCPCredentials,
 | 
								return result
 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
			result = append(result, envs...)
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		result = append(result, v1.EnvVar{Name: "STANDBY_METHOD", Value: "STANDBY_WITH_WALE"})
 | 
							result = append(result, v1.EnvVar{Name: "STANDBY_METHOD", Value: "STANDBY_WITH_WALE"})
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -185,9 +185,9 @@ func (c *mockSecret) Get(ctx context.Context, name string, options metav1.GetOpt
 | 
				
			||||||
	secret := &v1.Secret{}
 | 
						secret := &v1.Secret{}
 | 
				
			||||||
	secret.Name = testPodEnvironmentSecretName
 | 
						secret.Name = testPodEnvironmentSecretName
 | 
				
			||||||
	secret.Data = map[string][]byte{
 | 
						secret.Data = map[string][]byte{
 | 
				
			||||||
		"clone_s3_access_key_id": []byte("0123456789abcdef0123456789abcdef"),
 | 
							"clone_aws_access_key_id":                []byte("0123456789abcdef0123456789abcdef"),
 | 
				
			||||||
		"custom_variable":                        []byte("secret-test"),
 | 
							"custom_variable":                        []byte("secret-test"),
 | 
				
			||||||
		"s3_access_key_id":       []byte("0123456789abcdef0123456789abcdef"),
 | 
							"standby_google_application_credentials": []byte("0123456789abcdef0123456789abcdef"),
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return secret, nil
 | 
						return secret, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -199,14 +199,12 @@ func (c *mockConfigMap) Get(ctx context.Context, name string, options metav1.Get
 | 
				
			||||||
	configmap := &v1.ConfigMap{}
 | 
						configmap := &v1.ConfigMap{}
 | 
				
			||||||
	configmap.Name = testPodEnvironmentConfigMapName
 | 
						configmap.Name = testPodEnvironmentConfigMapName
 | 
				
			||||||
	configmap.Data = map[string]string{
 | 
						configmap.Data = map[string]string{
 | 
				
			||||||
		// hard-coded clone env variable, can be overridden
 | 
							// hard-coded clone env variable, can set when not specified in manifest
 | 
				
			||||||
		"clone_aws_endpoint": "s3.eu-west-1.amazonaws.com",
 | 
							"clone_aws_endpoint": "s3.eu-west-1.amazonaws.com",
 | 
				
			||||||
		// custom variable, can be overridden by c.Spec.Env
 | 
							// custom variable, can be overridden by c.Spec.Env
 | 
				
			||||||
		"custom_variable": "configmap-test",
 | 
							"custom_variable": "configmap-test",
 | 
				
			||||||
		// hard-coded env variable, can not be overridden
 | 
							// hard-coded env variable, can not be overridden
 | 
				
			||||||
		"kubernetes_scope_label": "pgaas",
 | 
							"kubernetes_scope_label": "pgaas",
 | 
				
			||||||
		// hard-coded standby env variable, can be overridden
 | 
					 | 
				
			||||||
		"standby_wal_bucket_scope_prefix": "my-prefix",
 | 
					 | 
				
			||||||
		// hard-coded env variable, can be overridden
 | 
							// hard-coded env variable, can be overridden
 | 
				
			||||||
		"wal_s3_bucket": "global-s3-bucket-configmap",
 | 
							"wal_s3_bucket": "global-s3-bucket-configmap",
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					@ -288,10 +286,6 @@ func TestPodEnvironmentConfigMapVariables(t *testing.T) {
 | 
				
			||||||
					Name:  "kubernetes_scope_label",
 | 
										Name:  "kubernetes_scope_label",
 | 
				
			||||||
					Value: "pgaas",
 | 
										Value: "pgaas",
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				{
 | 
					 | 
				
			||||||
					Name:  "standby_wal_bucket_scope_prefix",
 | 
					 | 
				
			||||||
					Value: "my-prefix",
 | 
					 | 
				
			||||||
				},
 | 
					 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					Name:  "wal_s3_bucket",
 | 
										Name:  "wal_s3_bucket",
 | 
				
			||||||
					Value: "global-s3-bucket-configmap",
 | 
										Value: "global-s3-bucket-configmap",
 | 
				
			||||||
| 
						 | 
					@ -369,13 +363,13 @@ func TestPodEnvironmentSecretVariables(t *testing.T) {
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			envVars: []v1.EnvVar{
 | 
								envVars: []v1.EnvVar{
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					Name: "clone_s3_access_key_id",
 | 
										Name: "clone_aws_access_key_id",
 | 
				
			||||||
					ValueFrom: &v1.EnvVarSource{
 | 
										ValueFrom: &v1.EnvVarSource{
 | 
				
			||||||
						SecretKeyRef: &v1.SecretKeySelector{
 | 
											SecretKeyRef: &v1.SecretKeySelector{
 | 
				
			||||||
							LocalObjectReference: v1.LocalObjectReference{
 | 
												LocalObjectReference: v1.LocalObjectReference{
 | 
				
			||||||
								Name: testPodEnvironmentSecretName,
 | 
													Name: testPodEnvironmentSecretName,
 | 
				
			||||||
							},
 | 
												},
 | 
				
			||||||
							Key: "clone_s3_access_key_id",
 | 
												Key: "clone_aws_access_key_id",
 | 
				
			||||||
						},
 | 
											},
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
| 
						 | 
					@ -391,13 +385,13 @@ func TestPodEnvironmentSecretVariables(t *testing.T) {
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					Name: "s3_access_key_id",
 | 
										Name: "standby_google_application_credentials",
 | 
				
			||||||
					ValueFrom: &v1.EnvVarSource{
 | 
										ValueFrom: &v1.EnvVarSource{
 | 
				
			||||||
						SecretKeyRef: &v1.SecretKeySelector{
 | 
											SecretKeyRef: &v1.SecretKeySelector{
 | 
				
			||||||
							LocalObjectReference: v1.LocalObjectReference{
 | 
												LocalObjectReference: v1.LocalObjectReference{
 | 
				
			||||||
								Name: testPodEnvironmentSecretName,
 | 
													Name: testPodEnvironmentSecretName,
 | 
				
			||||||
							},
 | 
												},
 | 
				
			||||||
							Key: "s3_access_key_id",
 | 
												Key: "standby_google_application_credentials",
 | 
				
			||||||
						},
 | 
											},
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
| 
						 | 
					@ -512,7 +506,7 @@ func TestGenerateSpiloPodEnvVars(t *testing.T) {
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	expectedS3BucketConfigMap := []ExpectedValue{
 | 
						expectedS3BucketConfigMap := []ExpectedValue{
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			envIndex:       18,
 | 
								envIndex:       17,
 | 
				
			||||||
			envVarConstant: "WAL_S3_BUCKET",
 | 
								envVarConstant: "WAL_S3_BUCKET",
 | 
				
			||||||
			envVarValue:    "global-s3-bucket-configmap",
 | 
								envVarValue:    "global-s3-bucket-configmap",
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
| 
						 | 
					@ -552,18 +546,71 @@ func TestGenerateSpiloPodEnvVars(t *testing.T) {
 | 
				
			||||||
			envVarValue:    "spec-env-test",
 | 
								envVarValue:    "spec-env-test",
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						expectedCloneEnvSpec := []ExpectedValue{
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								envIndex:       16,
 | 
				
			||||||
 | 
								envVarConstant: "CLONE_WALE_S3_PREFIX",
 | 
				
			||||||
 | 
								envVarValue:    "s3://another-bucket",
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								envIndex:       17,
 | 
				
			||||||
 | 
								envVarConstant: "CLONE_WAL_BUCKET_SCOPE_SUFFIX",
 | 
				
			||||||
 | 
								envVarValue:    "",
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								envIndex:       20,
 | 
				
			||||||
 | 
								envVarConstant: "CLONE_AWS_ENDPOINT",
 | 
				
			||||||
 | 
								envVarValue:    "s3.eu-central-1.amazonaws.com",
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	expectedCloneEnvConfigMap := []ExpectedValue{
 | 
						expectedCloneEnvConfigMap := []ExpectedValue{
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			envIndex:       15,
 | 
								envIndex:       16,
 | 
				
			||||||
 | 
								envVarConstant: "CLONE_WAL_S3_BUCKET",
 | 
				
			||||||
 | 
								envVarValue:    "global-s3-bucket",
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								envIndex:       17,
 | 
				
			||||||
 | 
								envVarConstant: "CLONE_WAL_BUCKET_SCOPE_SUFFIX",
 | 
				
			||||||
 | 
								envVarValue:    fmt.Sprintf("/%s", dummyUUID),
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								envIndex:       20,
 | 
				
			||||||
			envVarConstant: "CLONE_AWS_ENDPOINT",
 | 
								envVarConstant: "CLONE_AWS_ENDPOINT",
 | 
				
			||||||
			envVarValue:    "s3.eu-west-1.amazonaws.com",
 | 
								envVarValue:    "s3.eu-west-1.amazonaws.com",
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	expectedStandbyEnvConfigMap := []ExpectedValue{
 | 
						expectedCloneEnvSecret := []ExpectedValue{
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			envIndex:       17,
 | 
								envIndex:       20,
 | 
				
			||||||
			envVarConstant: "STANDBY_WAL_BUCKET_SCOPE_PREFIX",
 | 
								envVarConstant: "CLONE_AWS_ACCESS_KEY_ID",
 | 
				
			||||||
			envVarValue:    "my-prefix",
 | 
								envVarValueRef: &v1.EnvVarSource{
 | 
				
			||||||
 | 
									SecretKeyRef: &v1.SecretKeySelector{
 | 
				
			||||||
 | 
										LocalObjectReference: v1.LocalObjectReference{
 | 
				
			||||||
 | 
											Name: testPodEnvironmentSecretName,
 | 
				
			||||||
 | 
										},
 | 
				
			||||||
 | 
										Key: "clone_aws_access_key_id",
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						expectedStandbyEnvSecret := []ExpectedValue{
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								envIndex:       15,
 | 
				
			||||||
 | 
								envVarConstant: "STANDBY_WALE_GS_PREFIX",
 | 
				
			||||||
 | 
								envVarValue:    "gs://some/path/",
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								envIndex:       20,
 | 
				
			||||||
 | 
								envVarConstant: "STANDBY_GOOGLE_APPLICATION_CREDENTIALS",
 | 
				
			||||||
 | 
								envVarValueRef: &v1.EnvVarSource{
 | 
				
			||||||
 | 
									SecretKeyRef: &v1.SecretKeySelector{
 | 
				
			||||||
 | 
										LocalObjectReference: v1.LocalObjectReference{
 | 
				
			||||||
 | 
											Name: testPodEnvironmentSecretName,
 | 
				
			||||||
 | 
										},
 | 
				
			||||||
 | 
										Key: "standby_google_application_credentials",
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -636,7 +683,7 @@ func TestGenerateSpiloPodEnvVars(t *testing.T) {
 | 
				
			||||||
						Name: testPodEnvironmentConfigMapName,
 | 
											Name: testPodEnvironmentConfigMapName,
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				WALES3Bucket: "global-s3-bucket-configmap",
 | 
									WALES3Bucket: "global-s3-bucket",
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			cloneDescription:   &acidv1.CloneDescription{},
 | 
								cloneDescription:   &acidv1.CloneDescription{},
 | 
				
			||||||
			standbyDescription: &acidv1.StandbyDescription{},
 | 
								standbyDescription: &acidv1.StandbyDescription{},
 | 
				
			||||||
| 
						 | 
					@ -717,38 +764,76 @@ func TestGenerateSpiloPodEnvVars(t *testing.T) {
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			subTest: "will override global CLONE_AWS_ENDPOINT parameter from pod environment config map",
 | 
								subTest: "will set CLONE_ parameters from spec and not global config or pod environment config map",
 | 
				
			||||||
			opConfig: config.Config{
 | 
								opConfig: config.Config{
 | 
				
			||||||
				Resources: config.Resources{
 | 
									Resources: config.Resources{
 | 
				
			||||||
					PodEnvironmentConfigMap: spec.NamespacedName{
 | 
										PodEnvironmentConfigMap: spec.NamespacedName{
 | 
				
			||||||
						Name: testPodEnvironmentConfigMapName,
 | 
											Name: testPodEnvironmentConfigMapName,
 | 
				
			||||||
					},
 | 
										},
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
				WALES3Bucket: "global-s3-bucket-configmap",
 | 
									WALES3Bucket: "global-s3-bucket",
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			cloneDescription: &acidv1.CloneDescription{
 | 
								cloneDescription: &acidv1.CloneDescription{
 | 
				
			||||||
				ClusterName:  "test-cluster",
 | 
									ClusterName:  "test-cluster",
 | 
				
			||||||
				EndTimestamp: "somewhen",
 | 
									EndTimestamp: "somewhen",
 | 
				
			||||||
				UID:          "0000",
 | 
									UID:          dummyUUID,
 | 
				
			||||||
 | 
									S3WalPath:    "s3://another-bucket",
 | 
				
			||||||
 | 
									S3Endpoint:   "s3.eu-central-1.amazonaws.com",
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								standbyDescription: &acidv1.StandbyDescription{},
 | 
				
			||||||
 | 
								expectedValues:     expectedCloneEnvSpec,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								subTest: "will set CLONE_AWS_ENDPOINT parameter from pod environment config map",
 | 
				
			||||||
 | 
								opConfig: config.Config{
 | 
				
			||||||
 | 
									Resources: config.Resources{
 | 
				
			||||||
 | 
										PodEnvironmentConfigMap: spec.NamespacedName{
 | 
				
			||||||
 | 
											Name: testPodEnvironmentConfigMapName,
 | 
				
			||||||
 | 
										},
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									WALES3Bucket: "global-s3-bucket",
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								cloneDescription: &acidv1.CloneDescription{
 | 
				
			||||||
 | 
									ClusterName:  "test-cluster",
 | 
				
			||||||
 | 
									EndTimestamp: "somewhen",
 | 
				
			||||||
 | 
									UID:          dummyUUID,
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			standbyDescription: &acidv1.StandbyDescription{},
 | 
								standbyDescription: &acidv1.StandbyDescription{},
 | 
				
			||||||
			expectedValues:     expectedCloneEnvConfigMap,
 | 
								expectedValues:     expectedCloneEnvConfigMap,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			subTest: "will override global STANDBY_WAL_BUCKET_SCOPE_PREFIX parameter from pod environment config map",
 | 
								subTest: "will set CLONE_AWS_ACCESS_KEY_ID parameter from pod environment secret",
 | 
				
			||||||
			opConfig: config.Config{
 | 
								opConfig: config.Config{
 | 
				
			||||||
				Resources: config.Resources{
 | 
									Resources: config.Resources{
 | 
				
			||||||
					PodEnvironmentConfigMap: spec.NamespacedName{
 | 
										PodEnvironmentSecret:  testPodEnvironmentSecretName,
 | 
				
			||||||
						Name: testPodEnvironmentConfigMapName,
 | 
										ResourceCheckInterval: time.Duration(testResourceCheckInterval),
 | 
				
			||||||
 | 
										ResourceCheckTimeout:  time.Duration(testResourceCheckTimeout),
 | 
				
			||||||
				},
 | 
									},
 | 
				
			||||||
 | 
									WALES3Bucket: "global-s3-bucket",
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
				WALES3Bucket: "global-s3-bucket-configmap",
 | 
								cloneDescription: &acidv1.CloneDescription{
 | 
				
			||||||
 | 
									ClusterName:  "test-cluster",
 | 
				
			||||||
 | 
									EndTimestamp: "somewhen",
 | 
				
			||||||
 | 
									UID:          dummyUUID,
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								standbyDescription: &acidv1.StandbyDescription{},
 | 
				
			||||||
 | 
								expectedValues:     expectedCloneEnvSecret,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								subTest: "will set STANDBY_GOOGLE_APPLICATION_CREDENTIALS parameter from pod environment secret",
 | 
				
			||||||
 | 
								opConfig: config.Config{
 | 
				
			||||||
 | 
									Resources: config.Resources{
 | 
				
			||||||
 | 
										PodEnvironmentSecret:  testPodEnvironmentSecretName,
 | 
				
			||||||
 | 
										ResourceCheckInterval: time.Duration(testResourceCheckInterval),
 | 
				
			||||||
 | 
										ResourceCheckTimeout:  time.Duration(testResourceCheckTimeout),
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									WALES3Bucket: "global-s3-bucket",
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			cloneDescription: &acidv1.CloneDescription{},
 | 
								cloneDescription: &acidv1.CloneDescription{},
 | 
				
			||||||
			standbyDescription: &acidv1.StandbyDescription{
 | 
								standbyDescription: &acidv1.StandbyDescription{
 | 
				
			||||||
				S3WalPath: "primary-bucket",
 | 
									GSWalPath: "gs://some/path/",
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			expectedValues: expectedStandbyEnvConfigMap,
 | 
								expectedValues: expectedStandbyEnvSecret,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -881,18 +966,6 @@ func TestStandbyEnv(t *testing.T) {
 | 
				
			||||||
			envPos: 0,
 | 
								envPos: 0,
 | 
				
			||||||
			envLen: 3,
 | 
								envLen: 3,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			subTest: "from custom gs path",
 | 
					 | 
				
			||||||
			standbyOpts: &acidv1.StandbyDescription{
 | 
					 | 
				
			||||||
				GSWalPath: "gs://some/path/",
 | 
					 | 
				
			||||||
			},
 | 
					 | 
				
			||||||
			env: v1.EnvVar{
 | 
					 | 
				
			||||||
				Name:  "STANDBY_GOOGLE_APPLICATION_CREDENTIALS",
 | 
					 | 
				
			||||||
				Value: "",
 | 
					 | 
				
			||||||
			},
 | 
					 | 
				
			||||||
			envPos: 1,
 | 
					 | 
				
			||||||
			envLen: 4,
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			subTest: "ignore gs path if s3 is set",
 | 
								subTest: "ignore gs path if s3 is set",
 | 
				
			||||||
			standbyOpts: &acidv1.StandbyDescription{
 | 
								standbyOpts: &acidv1.StandbyDescription{
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue