From 20f30d3739601c2d2ebaad0e49908975097aab54 Mon Sep 17 00:00:00 2001 From: Sergey Dudoladov Date: Wed, 14 Mar 2018 12:46:58 +0100 Subject: [PATCH] Update the method for deciding about load balancers --- pkg/cluster/k8sres.go | 28 ++++++++++++++++++++-------- pkg/spec/postgresql.go | 7 +++---- 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/pkg/cluster/k8sres.go b/pkg/cluster/k8sres.go index edd1d4cf9..0fe7dfa58 100644 --- a/pkg/cluster/k8sres.go +++ b/pkg/cluster/k8sres.go @@ -671,15 +671,27 @@ func (c *Cluster) generateSingleUserSecret(namespace string, pgUser spec.PgUser) func (c *Cluster) shouldCreateLoadBalancerForService(role PostgresRole, spec *spec.PostgresSpec) bool { - // handle LB for the replica service separately if ReplicaLoadBalancer is set in the Postgres manifest - if role == Replica && spec.EnableReplicaLoadBalancer != nil { - return *spec.EnableReplicaLoadBalancer - } + switch role { - // create a load balancer for the master service if either Postgres or operator manifests tell to do so - // if ReplicaLoadBalancer is unset and LB for master service is created, also create a balancer for replicas - return (spec.EnableMasterLoadBalancer != nil && *spec.EnableMasterLoadBalancer) || - (spec.EnableMasterLoadBalancer == nil && c.OpConfig.EnableMasterLoadBalancer) + case Replica: + + // if the value is explicitly set in a Postgresql manifest, follow this setting + if spec.EnableReplicaLoadBalancer != nil { + return *spec.EnableReplicaLoadBalancer + } + // otherwise, follow the operator configuration + return c.OpConfig.EnableReplicaLoadBalancer + + case Master: + + if spec.EnableMasterLoadBalancer != nil { + return *spec.EnableMasterLoadBalancer + } + return c.OpConfig.EnableMasterLoadBalancer + + default: + panic(fmt.Sprintf("Unknown role %v", role)) + } } diff --git a/pkg/spec/postgresql.go b/pkg/spec/postgresql.go index a197912d4..a948f1698 100644 --- a/pkg/spec/postgresql.go +++ b/pkg/spec/postgresql.go @@ -96,10 +96,9 @@ type PostgresSpec struct { TeamID string `json:"teamId"` AllowedSourceRanges []string `json:"allowedSourceRanges"` DockerImage string `json:"dockerImage,omitempty"` - // EnableMasterLoadBalancer is a pointer, since it is important to know if that parameters is omitted from the Postgres manifest - // in that case EnableMasterLoadBalancer == nil and the value is taken from the operator config - EnableMasterLoadBalancer *bool `json:"enableMasterLoadBalancer,omitempty"` - // if EnableReplicaLoadBalancer == nil (is unset), value of UseLoadBalancer determines if a balancer for replicas is created + // vars that enable load balancers are pointers because it is important to know if any of them is omitted from the Postgres manifest + // in that case the var evaluates to nil and the value is taken from the operator config + EnableMasterLoadBalancer *bool `json:"enableMasterLoadBalancer,omitempty"` EnableReplicaLoadBalancer *bool `json:"enableReplicaLoadBalancer,omitempty"` NumberOfInstances int32 `json:"numberOfInstances"` Users map[string]UserFlags `json:"users"`