From b36bdbc8efec0770b62e4190dc2c53181894f920 Mon Sep 17 00:00:00 2001 From: Rafia Sabih Date: Wed, 22 May 2019 14:43:36 +0200 Subject: [PATCH] Function to create required environment variables for standby --- pkg/cluster/k8sres.go | 36 ++++++++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/pkg/cluster/k8sres.go b/pkg/cluster/k8sres.go index fa2efee9e..b429f4ef2 100644 --- a/pkg/cluster/k8sres.go +++ b/pkg/cluster/k8sres.go @@ -483,7 +483,7 @@ func generatePodTemplate( } // generatePodEnvVars generates environment variables for the Spilo Pod -func (c *Cluster) generateSpiloPodEnvVars(uid types.UID, spiloConfiguration string, cloneDescription *acidv1.CloneDescription, customPodEnvVarsList []v1.EnvVar) []v1.EnvVar { +func (c *Cluster) generateSpiloPodEnvVars(uid types.UID, spiloConfiguration string, cloneDescription *acidv1.CloneDescription, standbyDescription *acidv1.StandbyDescription, customPodEnvVarsList []v1.EnvVar) []v1.EnvVar { envVars := []v1.EnvVar{ { Name: "SCOPE", @@ -587,6 +587,10 @@ func (c *Cluster) generateSpiloPodEnvVars(uid types.UID, spiloConfiguration stri envVars = append(envVars, c.generateCloneEnvironment(cloneDescription)...) } + if standbyDescription.ClusterName != "" { + envVars = append(envVars, c.generateStandbyEnvironment(standbyDescription)...) + } + if len(customPodEnvVarsList) > 0 { envVars = append(envVars, customPodEnvVarsList...) } @@ -782,7 +786,7 @@ func (c *Cluster) generateStatefulSet(spec *acidv1.PostgresSpec) (*v1beta1.State // generate environment variables for the spilo container spiloEnvVars := deduplicateEnvVars( c.generateSpiloPodEnvVars(c.Postgresql.GetUID(), spiloConfiguration, &spec.Clone, - customPodEnvVarsList), c.containerName(), c.logger) + &spec.StandbyCluster, customPodEnvVarsList), c.containerName(), c.logger) // pickup the docker image for the spilo container effectiveDockerImage := util.Coalesce(spec.DockerImage, c.OpConfig.DockerImage) @@ -1252,6 +1256,34 @@ func (c *Cluster) generateCloneEnvironment(description *acidv1.CloneDescription) return result } +func (c *Cluster) generateStandbyEnvironment(description *acidv1.StandbyDescription) []v1.EnvVar { + result := make([]v1.EnvVar, 0) + + if description.S3WalPath == "" { + return result + } + + cluster := description.ClusterName + result = append(result, v1.EnvVar{Name: "STANDBY_SCOPE", Value: cluster}) + + // standby with S3, find out the bucket to setup standby + msg := "Standby from S3 bucket" + c.logger.Info(msg, description.S3WalPath) + + msg = "Use custom parsed S3WalPath %s from the manifest" + c.logger.Warningf(msg, description.S3WalPath) + + result = append(result, v1.EnvVar{ + Name: "STANDBY_WALE_S3_PREFIX", + Value: description.S3WalPath, + }) + + result = append(result, v1.EnvVar{Name: "STANDBY_METHOD", Value: "CLONE_WITH_WALE"}) + result = append(result, v1.EnvVar{Name: "STANDBY_WAL_BUCKET_SCOPE_PREFIX", Value: ""}) + + return result +} + func (c *Cluster) generatePodDisruptionBudget() *policybeta1.PodDisruptionBudget { minAvailable := intstr.FromInt(1)