convert constant variable to function
This commit is contained in:
parent
a2328b9ec8
commit
a48b5b6fb6
|
|
@ -175,6 +175,14 @@ func (c *Cluster) clusterNamespace() string {
|
|||
return c.ObjectMeta.Namespace
|
||||
}
|
||||
|
||||
func (c *Cluster) masterRole() PostgresRole {
|
||||
return PostgresRole(c.OpConfig.PodLeaderLabelValue)
|
||||
}
|
||||
|
||||
func (c *Cluster) replicaRole() PostgresRole {
|
||||
return PostgresRole("replica")
|
||||
}
|
||||
|
||||
func (c *Cluster) teamName() string {
|
||||
// TODO: check Teams API for the actual name (in case the user passes an integer Id).
|
||||
return c.Spec.TeamID
|
||||
|
|
@ -294,7 +302,7 @@ func (c *Cluster) Create() (err error) {
|
|||
}
|
||||
c.eventRecorder.Event(c.GetReference(), v1.EventTypeNormal, "Create", "Started creation of new cluster resources")
|
||||
|
||||
for _, role := range []PostgresRole{Master, Replica} {
|
||||
for _, role := range []PostgresRole{c.masterRole(), c.replicaRole()} {
|
||||
|
||||
// if kubernetes_use_configmaps is set Patroni will create configmaps
|
||||
// otherwise it will use endpoints
|
||||
|
|
@ -302,7 +310,7 @@ func (c *Cluster) Create() (err error) {
|
|||
if c.Endpoints[role] != nil {
|
||||
return fmt.Errorf("%s endpoint already exists in the cluster", role)
|
||||
}
|
||||
if role == Master {
|
||||
if role == c.masterRole() {
|
||||
// replica endpoint will be created by the replica service. Master endpoint needs to be created by us,
|
||||
// since the corresponding master service does not define any selectors.
|
||||
ep, err = c.createEndpoint(role)
|
||||
|
|
@ -1213,7 +1221,7 @@ func (c *Cluster) Delete() error {
|
|||
c.eventRecorder.Eventf(c.GetReference(), v1.EventTypeWarning, "Delete", "could not delete pod disruption budget: %v", err)
|
||||
}
|
||||
|
||||
for _, role := range []PostgresRole{Master, Replica} {
|
||||
for _, role := range []PostgresRole{c.masterRole(), c.replicaRole()} {
|
||||
if !c.patroniKubernetesUseConfigMaps() {
|
||||
if err := c.deleteEndpoint(role); err != nil {
|
||||
anyErrors = true
|
||||
|
|
@ -1238,7 +1246,7 @@ func (c *Cluster) Delete() error {
|
|||
// Delete connection pooler objects anyway, even if it's not mentioned in the
|
||||
// manifest, just to not keep orphaned components in case if something went
|
||||
// wrong
|
||||
for _, role := range [2]PostgresRole{Master, Replica} {
|
||||
for _, role := range [2]PostgresRole{c.masterRole(), c.replicaRole()} {
|
||||
if err := c.deleteConnectionPooler(role); err != nil {
|
||||
anyErrors = true
|
||||
c.logger.Warningf("could not remove connection pooler: %v", err)
|
||||
|
|
|
|||
|
|
@ -55,6 +55,7 @@ var cl = New(
|
|||
},
|
||||
Resources: config.Resources{
|
||||
DownscalerAnnotations: []string{"downscaler/*"},
|
||||
PodLeaderLabelValue: "master",
|
||||
},
|
||||
ConnectionPooler: config.ConnectionPooler{
|
||||
User: poolerUserName,
|
||||
|
|
@ -147,6 +148,7 @@ func TestCreate(t *testing.T) {
|
|||
DefaultMemoryRequest: "300Mi",
|
||||
DefaultMemoryLimit: "300Mi",
|
||||
PodRoleLabel: "spilo-role",
|
||||
PodLeaderLabelValue: "master",
|
||||
ResourceCheckInterval: time.Duration(3),
|
||||
ResourceCheckTimeout: time.Duration(10),
|
||||
},
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ type ConnectionPoolerObjects struct {
|
|||
|
||||
func (c *Cluster) connectionPoolerName(role PostgresRole) string {
|
||||
name := fmt.Sprintf("%s-%s", c.Name, constants.ConnectionPoolerResourceSuffix)
|
||||
if role == Replica {
|
||||
if role == c.replicaRole() {
|
||||
name = fmt.Sprintf("%s-%s", name, "repl")
|
||||
}
|
||||
return name
|
||||
|
|
@ -537,8 +537,8 @@ func (c *Cluster) generatePoolerServiceAnnotations(role PostgresRole, spec *acid
|
|||
annotations[constants.ElbTimeoutAnnotationName] = constants.ElbTimeoutAnnotationValue
|
||||
}
|
||||
// -repl suffix will be added by replicaDNSName
|
||||
clusterNameWithPoolerSuffix := c.connectionPoolerName(Master)
|
||||
if role == Master {
|
||||
clusterNameWithPoolerSuffix := c.connectionPoolerName(c.masterRole())
|
||||
if role == c.masterRole() {
|
||||
dnsString = c.masterDNSName(clusterNameWithPoolerSuffix)
|
||||
} else {
|
||||
dnsString = c.replicaDNSName(clusterNameWithPoolerSuffix)
|
||||
|
|
@ -557,7 +557,7 @@ func (c *Cluster) shouldCreateLoadBalancerForPoolerService(role PostgresRole, sp
|
|||
|
||||
switch role {
|
||||
|
||||
case Replica:
|
||||
case c.replicaRole():
|
||||
// if the value is explicitly set in a Postgresql manifest, follow this setting
|
||||
if spec.EnableReplicaPoolerLoadBalancer != nil {
|
||||
return *spec.EnableReplicaPoolerLoadBalancer
|
||||
|
|
@ -565,7 +565,7 @@ func (c *Cluster) shouldCreateLoadBalancerForPoolerService(role PostgresRole, sp
|
|||
// otherwise, follow the operator configuration
|
||||
return c.OpConfig.EnableReplicaPoolerLoadBalancer
|
||||
|
||||
case Master:
|
||||
case c.masterRole():
|
||||
if spec.EnableMasterPoolerLoadBalancer != nil {
|
||||
return *spec.EnableMasterPoolerLoadBalancer
|
||||
}
|
||||
|
|
@ -877,9 +877,9 @@ func (c *Cluster) syncConnectionPooler(oldSpec, newSpec *acidv1.Postgresql, Look
|
|||
logPoolerEssentials(c.logger, oldSpec, newSpec)
|
||||
|
||||
// Check and perform the sync requirements for each of the roles.
|
||||
for _, role := range [2]PostgresRole{Master, Replica} {
|
||||
for _, role := range [2]PostgresRole{c.masterRole(), c.replicaRole()} {
|
||||
|
||||
if role == Master {
|
||||
if role == c.masterRole() {
|
||||
connectionPoolerNeeded = needMasterConnectionPoolerWorker(&newSpec.Spec)
|
||||
} else {
|
||||
connectionPoolerNeeded = needReplicaConnectionPoolerWorker(&newSpec.Spec)
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ func boolToPointer(value bool) *bool {
|
|||
}
|
||||
|
||||
func deploymentUpdated(cluster *Cluster, err error, reason SyncReason) error {
|
||||
for _, role := range [2]PostgresRole{Master, Replica} {
|
||||
for _, role := range [2]PostgresRole{cluster.masterRole(), cluster.replicaRole()} {
|
||||
|
||||
poolerLabels := cluster.labelsSet(false)
|
||||
poolerLabels["application"] = "db-connection-pooler"
|
||||
|
|
@ -63,7 +63,7 @@ func objectsAreSaved(cluster *Cluster, err error, reason SyncReason) error {
|
|||
return fmt.Errorf("Connection pooler resources are empty")
|
||||
}
|
||||
|
||||
for _, role := range []PostgresRole{Master, Replica} {
|
||||
for _, role := range []PostgresRole{cluster.masterRole(), cluster.replicaRole()} {
|
||||
poolerLabels := cluster.labelsSet(false)
|
||||
poolerLabels["application"] = "db-connection-pooler"
|
||||
poolerLabels["connection-pooler"] = cluster.connectionPoolerName(role)
|
||||
|
|
@ -87,14 +87,14 @@ func MasterObjectsAreSaved(cluster *Cluster, err error, reason SyncReason) error
|
|||
|
||||
poolerLabels := cluster.labelsSet(false)
|
||||
poolerLabels["application"] = "db-connection-pooler"
|
||||
poolerLabels["connection-pooler"] = cluster.connectionPoolerName(Master)
|
||||
poolerLabels["connection-pooler"] = cluster.connectionPoolerName(cluster.masterRole())
|
||||
|
||||
if cluster.ConnectionPooler[Master].Deployment == nil || !util.MapContains(cluster.ConnectionPooler[Master].Deployment.Labels, poolerLabels) {
|
||||
return fmt.Errorf("Deployment was not saved or labels not attached %s", cluster.ConnectionPooler[Master].Deployment.Labels)
|
||||
if cluster.ConnectionPooler[cluster.masterRole()].Deployment == nil || !util.MapContains(cluster.ConnectionPooler[cluster.masterRole()].Deployment.Labels, poolerLabels) {
|
||||
return fmt.Errorf("Deployment was not saved or labels not attached %s", cluster.ConnectionPooler[cluster.masterRole()].Deployment.Labels)
|
||||
}
|
||||
|
||||
if cluster.ConnectionPooler[Master].Service == nil || !util.MapContains(cluster.ConnectionPooler[Master].Service.Labels, poolerLabels) {
|
||||
return fmt.Errorf("Service was not saved or labels not attached %s", cluster.ConnectionPooler[Master].Service.Labels)
|
||||
if cluster.ConnectionPooler[cluster.masterRole()].Service == nil || !util.MapContains(cluster.ConnectionPooler[cluster.masterRole()].Service.Labels, poolerLabels) {
|
||||
return fmt.Errorf("Service was not saved or labels not attached %s", cluster.ConnectionPooler[cluster.masterRole()].Service.Labels)
|
||||
}
|
||||
|
||||
return nil
|
||||
|
|
@ -107,21 +107,21 @@ func ReplicaObjectsAreSaved(cluster *Cluster, err error, reason SyncReason) erro
|
|||
|
||||
poolerLabels := cluster.labelsSet(false)
|
||||
poolerLabels["application"] = "db-connection-pooler"
|
||||
poolerLabels["connection-pooler"] = cluster.connectionPoolerName(Replica)
|
||||
poolerLabels["connection-pooler"] = cluster.connectionPoolerName(cluster.replicaRole())
|
||||
|
||||
if cluster.ConnectionPooler[Replica].Deployment == nil || !util.MapContains(cluster.ConnectionPooler[Replica].Deployment.Labels, poolerLabels) {
|
||||
return fmt.Errorf("Deployment was not saved or labels not attached %s", cluster.ConnectionPooler[Replica].Deployment.Labels)
|
||||
if cluster.ConnectionPooler[cluster.replicaRole()].Deployment == nil || !util.MapContains(cluster.ConnectionPooler[cluster.replicaRole()].Deployment.Labels, poolerLabels) {
|
||||
return fmt.Errorf("Deployment was not saved or labels not attached %s", cluster.ConnectionPooler[cluster.replicaRole()].Deployment.Labels)
|
||||
}
|
||||
|
||||
if cluster.ConnectionPooler[Replica].Service == nil || !util.MapContains(cluster.ConnectionPooler[Replica].Service.Labels, poolerLabels) {
|
||||
return fmt.Errorf("Service was not saved or labels not attached %s", cluster.ConnectionPooler[Replica].Service.Labels)
|
||||
if cluster.ConnectionPooler[cluster.replicaRole()].Service == nil || !util.MapContains(cluster.ConnectionPooler[cluster.replicaRole()].Service.Labels, poolerLabels) {
|
||||
return fmt.Errorf("Service was not saved or labels not attached %s", cluster.ConnectionPooler[cluster.replicaRole()].Service.Labels)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func objectsAreDeleted(cluster *Cluster, err error, reason SyncReason) error {
|
||||
for _, role := range [2]PostgresRole{Master, Replica} {
|
||||
for _, role := range [2]PostgresRole{cluster.masterRole(), cluster.replicaRole()} {
|
||||
if cluster.ConnectionPooler[role] != nil &&
|
||||
(cluster.ConnectionPooler[role].Deployment != nil || cluster.ConnectionPooler[role].Service != nil) {
|
||||
return fmt.Errorf("Connection pooler was not deleted for role %v", role)
|
||||
|
|
@ -133,8 +133,8 @@ func objectsAreDeleted(cluster *Cluster, err error, reason SyncReason) error {
|
|||
|
||||
func OnlyMasterDeleted(cluster *Cluster, err error, reason SyncReason) error {
|
||||
|
||||
if cluster.ConnectionPooler[Master] != nil &&
|
||||
(cluster.ConnectionPooler[Master].Deployment != nil || cluster.ConnectionPooler[Master].Service != nil) {
|
||||
if cluster.ConnectionPooler[cluster.masterRole()] != nil &&
|
||||
(cluster.ConnectionPooler[cluster.masterRole()].Deployment != nil || cluster.ConnectionPooler[cluster.masterRole()].Service != nil) {
|
||||
return fmt.Errorf("Connection pooler master was not deleted")
|
||||
}
|
||||
return nil
|
||||
|
|
@ -142,8 +142,8 @@ func OnlyMasterDeleted(cluster *Cluster, err error, reason SyncReason) error {
|
|||
|
||||
func OnlyReplicaDeleted(cluster *Cluster, err error, reason SyncReason) error {
|
||||
|
||||
if cluster.ConnectionPooler[Replica] != nil &&
|
||||
(cluster.ConnectionPooler[Replica].Deployment != nil || cluster.ConnectionPooler[Replica].Service != nil) {
|
||||
if cluster.ConnectionPooler[cluster.replicaRole()] != nil &&
|
||||
(cluster.ConnectionPooler[cluster.replicaRole()].Deployment != nil || cluster.ConnectionPooler[cluster.replicaRole()].Service != nil) {
|
||||
return fmt.Errorf("Connection pooler replica was not deleted")
|
||||
}
|
||||
return nil
|
||||
|
|
@ -323,7 +323,7 @@ func TestConnectionPoolerCreateDeletion(t *testing.T) {
|
|||
cluster.Name = "acid-fake-cluster"
|
||||
cluster.Namespace = "default"
|
||||
|
||||
_, err := cluster.createService(Master)
|
||||
_, err := cluster.createService(cluster.masterRole()) //PROBLEM1
|
||||
assert.NoError(t, err)
|
||||
_, err = cluster.createStatefulSet()
|
||||
assert.NoError(t, err)
|
||||
|
|
@ -334,7 +334,7 @@ func TestConnectionPoolerCreateDeletion(t *testing.T) {
|
|||
t.Errorf("%s: Cannot create connection pooler, %s, %+v",
|
||||
testName, err, reason)
|
||||
}
|
||||
for _, role := range [2]PostgresRole{Master, Replica} {
|
||||
for _, role := range [2]PostgresRole{cluster.masterRole(), cluster.replicaRole()} {
|
||||
poolerLabels := cluster.labelsSet(false)
|
||||
poolerLabels["application"] = "db-connection-pooler"
|
||||
poolerLabels["connection-pooler"] = cluster.connectionPoolerName(role)
|
||||
|
|
@ -369,7 +369,7 @@ func TestConnectionPoolerCreateDeletion(t *testing.T) {
|
|||
t.Errorf("%s: Cannot sync connection pooler, %s", testName, err)
|
||||
}
|
||||
|
||||
for _, role := range [2]PostgresRole{Master, Replica} {
|
||||
for _, role := range [2]PostgresRole{cluster.masterRole(), cluster.replicaRole()} {
|
||||
err = cluster.deleteConnectionPooler(role)
|
||||
if err != nil {
|
||||
t.Errorf("%s: Cannot delete connection pooler, %s", testName, err)
|
||||
|
|
@ -424,6 +424,7 @@ func TestConnectionPoolerSync(t *testing.T) {
|
|||
DefaultMemoryRequest: "300Mi",
|
||||
DefaultMemoryLimit: "300Mi",
|
||||
PodRoleLabel: "spilo-role",
|
||||
PodLeaderLabelValue: "master",
|
||||
},
|
||||
},
|
||||
}, client, pg, logger, eventRecorder)
|
||||
|
|
@ -431,7 +432,7 @@ func TestConnectionPoolerSync(t *testing.T) {
|
|||
cluster.Name = "acid-fake-cluster"
|
||||
cluster.Namespace = "default"
|
||||
|
||||
_, err := cluster.createService(Master)
|
||||
_, err := cluster.createService(cluster.masterRole())
|
||||
assert.NoError(t, err)
|
||||
_, err = cluster.createStatefulSet()
|
||||
assert.NoError(t, err)
|
||||
|
|
@ -765,7 +766,7 @@ func TestConnectionPoolerPodSpec(t *testing.T) {
|
|||
check: testEnvs,
|
||||
},
|
||||
}
|
||||
for _, role := range [2]PostgresRole{Master, Replica} {
|
||||
for _, role := range [2]PostgresRole{cluster.masterRole(), cluster.replicaRole()} {
|
||||
for _, tt := range tests {
|
||||
podSpec, _ := tt.cluster.generateConnectionPoolerPodTemplate(role)
|
||||
|
||||
|
|
@ -802,12 +803,12 @@ func TestConnectionPoolerDeploymentSpec(t *testing.T) {
|
|||
},
|
||||
}
|
||||
cluster.ConnectionPooler = map[PostgresRole]*ConnectionPoolerObjects{
|
||||
Master: {
|
||||
cluster.masterRole(): {
|
||||
Deployment: nil,
|
||||
Service: nil,
|
||||
LookupFunction: true,
|
||||
Name: "",
|
||||
Role: Master,
|
||||
Role: cluster.masterRole(),
|
||||
},
|
||||
}
|
||||
|
||||
|
|
@ -854,7 +855,7 @@ func TestConnectionPoolerDeploymentSpec(t *testing.T) {
|
|||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
deployment, err := tt.cluster.generateConnectionPoolerDeployment(cluster.ConnectionPooler[Master])
|
||||
deployment, err := tt.cluster.generateConnectionPoolerDeployment(cluster.ConnectionPooler[cluster.masterRole()])
|
||||
|
||||
if err != tt.expected && err.Error() != tt.expected.Error() {
|
||||
t.Errorf("%s [%s]: Could not generate deployment spec,\n %+v, expected\n %+v",
|
||||
|
|
@ -921,7 +922,7 @@ func testLabels(cluster *Cluster, podSpec *v1.PodTemplateSpec, role PostgresRole
|
|||
|
||||
func testSelector(cluster *Cluster, deployment *appsv1.Deployment) error {
|
||||
labels := deployment.Spec.Selector.MatchLabels
|
||||
expected := cluster.connectionPoolerLabels(Master, true).MatchLabels
|
||||
expected := cluster.connectionPoolerLabels(cluster.masterRole(), true).MatchLabels
|
||||
|
||||
if labels["connection-pooler"] != expected["connection-pooler"] {
|
||||
return fmt.Errorf("Labels are incorrect, got %+v, expected %+v",
|
||||
|
|
@ -1018,20 +1019,20 @@ func TestPoolerTLS(t *testing.T) {
|
|||
|
||||
// create pooler resources
|
||||
cluster.ConnectionPooler = map[PostgresRole]*ConnectionPoolerObjects{}
|
||||
cluster.ConnectionPooler[Master] = &ConnectionPoolerObjects{
|
||||
cluster.ConnectionPooler[cluster.masterRole()] = &ConnectionPoolerObjects{
|
||||
Deployment: nil,
|
||||
Service: nil,
|
||||
Name: cluster.connectionPoolerName(Master),
|
||||
Name: cluster.connectionPoolerName(cluster.masterRole()),
|
||||
ClusterName: clusterName,
|
||||
Namespace: namespace,
|
||||
LookupFunction: false,
|
||||
Role: Master,
|
||||
Role: cluster.masterRole(),
|
||||
}
|
||||
|
||||
_, err = cluster.syncConnectionPoolerWorker(nil, &pg, Master)
|
||||
_, err = cluster.syncConnectionPoolerWorker(nil, &pg, cluster.masterRole())
|
||||
assert.NoError(t, err)
|
||||
|
||||
deploy, err := client.Deployments(namespace).Get(context.TODO(), cluster.connectionPoolerName(Master), metav1.GetOptions{})
|
||||
deploy, err := client.Deployments(namespace).Get(context.TODO(), cluster.connectionPoolerName(cluster.masterRole()), metav1.GetOptions{})
|
||||
assert.NoError(t, err)
|
||||
|
||||
fsGroup := int64(103)
|
||||
|
|
@ -1088,17 +1089,17 @@ func TestConnectionPoolerServiceSpec(t *testing.T) {
|
|||
},
|
||||
}
|
||||
cluster.ConnectionPooler = map[PostgresRole]*ConnectionPoolerObjects{
|
||||
Master: {
|
||||
cluster.masterRole(): {
|
||||
Deployment: nil,
|
||||
Service: nil,
|
||||
LookupFunction: false,
|
||||
Role: Master,
|
||||
Role: cluster.masterRole(),
|
||||
},
|
||||
Replica: {
|
||||
cluster.replicaRole(): {
|
||||
Deployment: nil,
|
||||
Service: nil,
|
||||
LookupFunction: false,
|
||||
Role: Replica,
|
||||
Role: cluster.replicaRole(),
|
||||
},
|
||||
}
|
||||
|
||||
|
|
@ -1138,7 +1139,7 @@ func TestConnectionPoolerServiceSpec(t *testing.T) {
|
|||
check: testServiceSelector,
|
||||
},
|
||||
}
|
||||
for _, role := range [2]PostgresRole{Master, Replica} {
|
||||
for _, role := range [2]PostgresRole{cluster.masterRole(), cluster.replicaRole()} {
|
||||
for _, tt := range tests {
|
||||
service := tt.cluster.generateConnectionPoolerService(tt.cluster.ConnectionPooler[role])
|
||||
|
||||
|
|
|
|||
|
|
@ -77,7 +77,7 @@ func (c *Cluster) statefulSetName() string {
|
|||
func (c *Cluster) serviceName(role PostgresRole) string {
|
||||
name := c.Name
|
||||
switch role {
|
||||
case Replica:
|
||||
case c.replicaRole():
|
||||
name = fmt.Sprintf("%s-%s", name, "repl")
|
||||
case Patroni:
|
||||
name = fmt.Sprintf("%s-%s", name, "config")
|
||||
|
|
@ -1536,7 +1536,7 @@ func (c *Cluster) generateStatefulSet(spec *acidv1.PostgresSpec) (*appsv1.Statef
|
|||
Spec: appsv1.StatefulSetSpec{
|
||||
Replicas: &numberOfInstances,
|
||||
Selector: c.labelsSelector(),
|
||||
ServiceName: c.serviceName(Master),
|
||||
ServiceName: c.serviceName(c.masterRole()),
|
||||
Template: *podTemplate,
|
||||
VolumeClaimTemplates: []v1.PersistentVolumeClaim{*volumeClaimTemplate},
|
||||
UpdateStrategy: updateStrategy,
|
||||
|
|
@ -1955,7 +1955,7 @@ func (c *Cluster) shouldCreateLoadBalancerForService(role PostgresRole, spec *ac
|
|||
|
||||
switch role {
|
||||
|
||||
case Replica:
|
||||
case c.replicaRole():
|
||||
|
||||
// if the value is explicitly set in a Postgresql manifest, follow this setting
|
||||
if spec.EnableReplicaLoadBalancer != nil {
|
||||
|
|
@ -1965,7 +1965,7 @@ func (c *Cluster) shouldCreateLoadBalancerForService(role PostgresRole, spec *ac
|
|||
// otherwise, follow the operator configuration
|
||||
return c.OpConfig.EnableReplicaLoadBalancer
|
||||
|
||||
case Master:
|
||||
case c.masterRole():
|
||||
|
||||
if spec.EnableMasterLoadBalancer != nil {
|
||||
return *spec.EnableMasterLoadBalancer
|
||||
|
|
@ -1987,7 +1987,7 @@ func (c *Cluster) generateService(role PostgresRole, spec *acidv1.PostgresSpec)
|
|||
|
||||
// no selector for master, see https://github.com/zalando/postgres-operator/issues/340
|
||||
// if kubernetes_use_configmaps is set master service needs a selector
|
||||
if role == Replica || c.patroniKubernetesUseConfigMaps() {
|
||||
if role == c.replicaRole() || c.patroniKubernetesUseConfigMaps() {
|
||||
serviceSpec.Selector = c.roleLabelsSet(false, role)
|
||||
}
|
||||
|
||||
|
|
@ -2054,9 +2054,9 @@ func (c *Cluster) getCustomServiceAnnotations(role PostgresRole, spec *acidv1.Po
|
|||
maps.Copy(annotations, spec.ServiceAnnotations)
|
||||
|
||||
switch role {
|
||||
case Master:
|
||||
case c.masterRole():
|
||||
maps.Copy(annotations, spec.MasterServiceAnnotations)
|
||||
case Replica:
|
||||
case c.replicaRole():
|
||||
maps.Copy(annotations, spec.ReplicaServiceAnnotations)
|
||||
}
|
||||
}
|
||||
|
|
@ -2227,7 +2227,7 @@ func (c *Cluster) generatePodDisruptionBudget() *policyv1.PodDisruptionBudget {
|
|||
// define label selector and add the master role selector if enabled
|
||||
labels := c.labelsSet(false)
|
||||
if pdbMasterLabelSelector == nil || *c.OpConfig.PDBMasterLabelSelector {
|
||||
labels[c.OpConfig.PodRoleLabel] = string(Master)
|
||||
labels[c.OpConfig.PodRoleLabel] = string(c.masterRole())
|
||||
}
|
||||
|
||||
return &policyv1.PodDisruptionBudget{
|
||||
|
|
|
|||
|
|
@ -576,67 +576,67 @@ func TestGenerateSpiloPodEnvVars(t *testing.T) {
|
|||
}
|
||||
expectedSpiloWalPathCompat := []ExpectedValue{
|
||||
{
|
||||
envIndex: 12,
|
||||
envIndex: 14,
|
||||
envVarConstant: "ENABLE_WAL_PATH_COMPAT",
|
||||
envVarValue: "true",
|
||||
},
|
||||
}
|
||||
expectedValuesS3Bucket := []ExpectedValue{
|
||||
{
|
||||
envIndex: 15,
|
||||
envIndex: 17,
|
||||
envVarConstant: "WAL_S3_BUCKET",
|
||||
envVarValue: "global-s3-bucket",
|
||||
},
|
||||
{
|
||||
envIndex: 16,
|
||||
envIndex: 18,
|
||||
envVarConstant: "WAL_BUCKET_SCOPE_SUFFIX",
|
||||
envVarValue: fmt.Sprintf("/%s", dummyUUID),
|
||||
},
|
||||
{
|
||||
envIndex: 17,
|
||||
envIndex: 19,
|
||||
envVarConstant: "WAL_BUCKET_SCOPE_PREFIX",
|
||||
envVarValue: "",
|
||||
},
|
||||
}
|
||||
expectedValuesGCPCreds := []ExpectedValue{
|
||||
{
|
||||
envIndex: 15,
|
||||
envIndex: 17,
|
||||
envVarConstant: "WAL_GS_BUCKET",
|
||||
envVarValue: "global-gs-bucket",
|
||||
},
|
||||
{
|
||||
envIndex: 16,
|
||||
envIndex: 18,
|
||||
envVarConstant: "WAL_BUCKET_SCOPE_SUFFIX",
|
||||
envVarValue: fmt.Sprintf("/%s", dummyUUID),
|
||||
},
|
||||
{
|
||||
envIndex: 17,
|
||||
envIndex: 19,
|
||||
envVarConstant: "WAL_BUCKET_SCOPE_PREFIX",
|
||||
envVarValue: "",
|
||||
},
|
||||
{
|
||||
envIndex: 18,
|
||||
envIndex: 20,
|
||||
envVarConstant: "GOOGLE_APPLICATION_CREDENTIALS",
|
||||
envVarValue: "some-path-to-credentials",
|
||||
},
|
||||
}
|
||||
expectedS3BucketConfigMap := []ExpectedValue{
|
||||
{
|
||||
envIndex: 17,
|
||||
envIndex: 19,
|
||||
envVarConstant: "wal_s3_bucket",
|
||||
envVarValue: "global-s3-bucket-configmap",
|
||||
},
|
||||
}
|
||||
expectedCustomS3BucketSpec := []ExpectedValue{
|
||||
{
|
||||
envIndex: 15,
|
||||
envIndex: 17,
|
||||
envVarConstant: "WAL_S3_BUCKET",
|
||||
envVarValue: "custom-s3-bucket",
|
||||
},
|
||||
}
|
||||
expectedCustomVariableSecret := []ExpectedValue{
|
||||
{
|
||||
envIndex: 16,
|
||||
envIndex: 18,
|
||||
envVarConstant: "custom_variable",
|
||||
envVarValueRef: &v1.EnvVarSource{
|
||||
SecretKeyRef: &v1.SecretKeySelector{
|
||||
|
|
@ -650,72 +650,72 @@ func TestGenerateSpiloPodEnvVars(t *testing.T) {
|
|||
}
|
||||
expectedCustomVariableConfigMap := []ExpectedValue{
|
||||
{
|
||||
envIndex: 16,
|
||||
envIndex: 18,
|
||||
envVarConstant: "custom_variable",
|
||||
envVarValue: "configmap-test",
|
||||
},
|
||||
}
|
||||
expectedCustomVariableSpec := []ExpectedValue{
|
||||
{
|
||||
envIndex: 15,
|
||||
envIndex: 17,
|
||||
envVarConstant: "CUSTOM_VARIABLE",
|
||||
envVarValue: "spec-env-test",
|
||||
},
|
||||
}
|
||||
expectedCloneEnvSpec := []ExpectedValue{
|
||||
{
|
||||
envIndex: 16,
|
||||
envIndex: 18,
|
||||
envVarConstant: "CLONE_WALE_S3_PREFIX",
|
||||
envVarValue: "s3://another-bucket",
|
||||
},
|
||||
{
|
||||
envIndex: 19,
|
||||
envIndex: 21,
|
||||
envVarConstant: "CLONE_WAL_BUCKET_SCOPE_PREFIX",
|
||||
envVarValue: "",
|
||||
},
|
||||
{
|
||||
envIndex: 20,
|
||||
envIndex: 22,
|
||||
envVarConstant: "CLONE_AWS_ENDPOINT",
|
||||
envVarValue: "s3.eu-central-1.amazonaws.com",
|
||||
},
|
||||
}
|
||||
expectedCloneEnvSpecEnv := []ExpectedValue{
|
||||
{
|
||||
envIndex: 15,
|
||||
envIndex: 17,
|
||||
envVarConstant: "CLONE_WAL_BUCKET_SCOPE_PREFIX",
|
||||
envVarValue: "test-cluster",
|
||||
},
|
||||
{
|
||||
envIndex: 17,
|
||||
envIndex: 19,
|
||||
envVarConstant: "CLONE_WALE_S3_PREFIX",
|
||||
envVarValue: "s3://another-bucket",
|
||||
},
|
||||
{
|
||||
envIndex: 21,
|
||||
envIndex: 23,
|
||||
envVarConstant: "CLONE_AWS_ENDPOINT",
|
||||
envVarValue: "s3.eu-central-1.amazonaws.com",
|
||||
},
|
||||
}
|
||||
expectedCloneEnvConfigMap := []ExpectedValue{
|
||||
{
|
||||
envIndex: 16,
|
||||
envIndex: 18,
|
||||
envVarConstant: "CLONE_WAL_S3_BUCKET",
|
||||
envVarValue: "global-s3-bucket",
|
||||
},
|
||||
{
|
||||
envIndex: 17,
|
||||
envIndex: 19,
|
||||
envVarConstant: "CLONE_WAL_BUCKET_SCOPE_SUFFIX",
|
||||
envVarValue: fmt.Sprintf("/%s", dummyUUID),
|
||||
},
|
||||
{
|
||||
envIndex: 21,
|
||||
envIndex: 23,
|
||||
envVarConstant: "clone_aws_endpoint",
|
||||
envVarValue: "s3.eu-west-1.amazonaws.com",
|
||||
},
|
||||
}
|
||||
expectedCloneEnvSecret := []ExpectedValue{
|
||||
{
|
||||
envIndex: 21,
|
||||
envIndex: 23,
|
||||
envVarConstant: "clone_aws_access_key_id",
|
||||
envVarValueRef: &v1.EnvVarSource{
|
||||
SecretKeyRef: &v1.SecretKeySelector{
|
||||
|
|
@ -729,12 +729,12 @@ func TestGenerateSpiloPodEnvVars(t *testing.T) {
|
|||
}
|
||||
expectedStandbyEnvSecret := []ExpectedValue{
|
||||
{
|
||||
envIndex: 15,
|
||||
envIndex: 17,
|
||||
envVarConstant: "STANDBY_WALE_GS_PREFIX",
|
||||
envVarValue: "gs://some/path/",
|
||||
},
|
||||
{
|
||||
envIndex: 20,
|
||||
envIndex: 22,
|
||||
envVarConstant: "standby_google_application_credentials",
|
||||
envVarValueRef: &v1.EnvVarSource{
|
||||
SecretKeyRef: &v1.SecretKeySelector{
|
||||
|
|
@ -2389,7 +2389,7 @@ func TestGeneratePodDisruptionBudget(t *testing.T) {
|
|||
{
|
||||
scenario: "With multiple instances",
|
||||
spec: New(
|
||||
Config{OpConfig: config.Config{Resources: config.Resources{ClusterNameLabel: "cluster-name", PodRoleLabel: "spilo-role"}, PDBNameFormat: "postgres-{cluster}-pdb"}},
|
||||
Config{OpConfig: config.Config{Resources: config.Resources{ClusterNameLabel: "cluster-name", PodRoleLabel: "spilo-role", PodLeaderLabelValue: "master"}, PDBNameFormat: "postgres-{cluster}-pdb"}},
|
||||
k8sutil.KubernetesClient{},
|
||||
acidv1.Postgresql{
|
||||
ObjectMeta: metav1.ObjectMeta{Name: "myapp-database", Namespace: "myapp"},
|
||||
|
|
@ -2406,7 +2406,7 @@ func TestGeneratePodDisruptionBudget(t *testing.T) {
|
|||
{
|
||||
scenario: "With zero instances",
|
||||
spec: New(
|
||||
Config{OpConfig: config.Config{Resources: config.Resources{ClusterNameLabel: "cluster-name", PodRoleLabel: "spilo-role"}, PDBNameFormat: "postgres-{cluster}-pdb"}},
|
||||
Config{OpConfig: config.Config{Resources: config.Resources{ClusterNameLabel: "cluster-name", PodRoleLabel: "spilo-role", PodLeaderLabelValue: "master"}, PDBNameFormat: "postgres-{cluster}-pdb"}},
|
||||
k8sutil.KubernetesClient{},
|
||||
acidv1.Postgresql{
|
||||
ObjectMeta: metav1.ObjectMeta{Name: "myapp-database", Namespace: "myapp"},
|
||||
|
|
@ -2423,7 +2423,7 @@ func TestGeneratePodDisruptionBudget(t *testing.T) {
|
|||
{
|
||||
scenario: "With PodDisruptionBudget disabled",
|
||||
spec: New(
|
||||
Config{OpConfig: config.Config{Resources: config.Resources{ClusterNameLabel: "cluster-name", PodRoleLabel: "spilo-role"}, PDBNameFormat: "postgres-{cluster}-pdb", EnablePodDisruptionBudget: util.False()}},
|
||||
Config{OpConfig: config.Config{Resources: config.Resources{ClusterNameLabel: "cluster-name", PodRoleLabel: "spilo-role", PodLeaderLabelValue: "master"}, PDBNameFormat: "postgres-{cluster}-pdb", EnablePodDisruptionBudget: util.False()}},
|
||||
k8sutil.KubernetesClient{},
|
||||
acidv1.Postgresql{
|
||||
ObjectMeta: metav1.ObjectMeta{Name: "myapp-database", Namespace: "myapp"},
|
||||
|
|
@ -2440,7 +2440,7 @@ func TestGeneratePodDisruptionBudget(t *testing.T) {
|
|||
{
|
||||
scenario: "With non-default PDBNameFormat and PodDisruptionBudget explicitly enabled",
|
||||
spec: New(
|
||||
Config{OpConfig: config.Config{Resources: config.Resources{ClusterNameLabel: "cluster-name", PodRoleLabel: "spilo-role"}, PDBNameFormat: "postgres-{cluster}-databass-budget", EnablePodDisruptionBudget: util.True()}},
|
||||
Config{OpConfig: config.Config{Resources: config.Resources{ClusterNameLabel: "cluster-name", PodRoleLabel: "spilo-role", PodLeaderLabelValue: "master"}, PDBNameFormat: "postgres-{cluster}-databass-budget", EnablePodDisruptionBudget: util.True()}},
|
||||
k8sutil.KubernetesClient{},
|
||||
acidv1.Postgresql{
|
||||
ObjectMeta: metav1.ObjectMeta{Name: "myapp-database", Namespace: "myapp"},
|
||||
|
|
@ -2457,7 +2457,7 @@ func TestGeneratePodDisruptionBudget(t *testing.T) {
|
|||
{
|
||||
scenario: "With PDBMasterLabelSelector disabled",
|
||||
spec: New(
|
||||
Config{OpConfig: config.Config{Resources: config.Resources{ClusterNameLabel: "cluster-name", PodRoleLabel: "spilo-role"}, PDBNameFormat: "postgres-{cluster}-pdb", EnablePodDisruptionBudget: util.True(), PDBMasterLabelSelector: util.False()}},
|
||||
Config{OpConfig: config.Config{Resources: config.Resources{ClusterNameLabel: "cluster-name", PodRoleLabel: "spilo-role", PodLeaderLabelValue: "master"}, PDBNameFormat: "postgres-{cluster}-pdb", EnablePodDisruptionBudget: util.True(), PDBMasterLabelSelector: util.False()}},
|
||||
k8sutil.KubernetesClient{},
|
||||
acidv1.Postgresql{
|
||||
ObjectMeta: metav1.ObjectMeta{Name: "myapp-database", Namespace: "myapp"},
|
||||
|
|
@ -2474,7 +2474,7 @@ func TestGeneratePodDisruptionBudget(t *testing.T) {
|
|||
{
|
||||
scenario: "With OwnerReference enabled",
|
||||
spec: New(
|
||||
Config{OpConfig: config.Config{Resources: config.Resources{ClusterNameLabel: "cluster-name", PodRoleLabel: "spilo-role", EnableOwnerReferences: util.True()}, PDBNameFormat: "postgres-{cluster}-pdb", EnablePodDisruptionBudget: util.True()}},
|
||||
Config{OpConfig: config.Config{Resources: config.Resources{ClusterNameLabel: "cluster-name", PodRoleLabel: "spilo-role", PodLeaderLabelValue: "master", EnableOwnerReferences: util.True()}, PDBNameFormat: "postgres-{cluster}-pdb", EnablePodDisruptionBudget: util.True()}},
|
||||
k8sutil.KubernetesClient{},
|
||||
acidv1.Postgresql{
|
||||
ObjectMeta: metav1.ObjectMeta{Name: "myapp-database", Namespace: "myapp"},
|
||||
|
|
@ -2550,6 +2550,7 @@ func TestGenerateService(t *testing.T) {
|
|||
DefaultMemoryRequest: "0.7Gi",
|
||||
MaxMemoryRequest: "1.0Gi",
|
||||
DefaultMemoryLimit: "1.3Gi",
|
||||
PodLeaderLabelValue: "master",
|
||||
},
|
||||
SidecarImages: map[string]string{
|
||||
"deprecated-global-sidecar": "image:123",
|
||||
|
|
@ -2576,10 +2577,10 @@ func TestGenerateService(t *testing.T) {
|
|||
},
|
||||
}, k8sutil.KubernetesClient{}, acidv1.Postgresql{}, logger, eventRecorder)
|
||||
|
||||
service := cluster.generateService(Master, &spec)
|
||||
service := cluster.generateService(cluster.masterRole(), &spec)
|
||||
assert.Equal(t, v1.ServiceExternalTrafficPolicyTypeCluster, service.Spec.ExternalTrafficPolicy)
|
||||
cluster.OpConfig.ExternalTrafficPolicy = "Local"
|
||||
service = cluster.generateService(Master, &spec)
|
||||
service = cluster.generateService(cluster.masterRole(), &spec)
|
||||
assert.Equal(t, v1.ServiceExternalTrafficPolicyTypeLocal, service.Spec.ExternalTrafficPolicy)
|
||||
|
||||
}
|
||||
|
|
@ -2605,28 +2606,28 @@ func TestCreateLoadBalancerLogic(t *testing.T) {
|
|||
}{
|
||||
{
|
||||
subtest: "new format, load balancer is enabled for replica",
|
||||
role: Replica,
|
||||
role: cluster.replicaRole(),
|
||||
spec: &acidv1.PostgresSpec{EnableReplicaLoadBalancer: util.True()},
|
||||
opConfig: config.Config{},
|
||||
result: true,
|
||||
},
|
||||
{
|
||||
subtest: "new format, load balancer is disabled for replica",
|
||||
role: Replica,
|
||||
role: cluster.replicaRole(),
|
||||
spec: &acidv1.PostgresSpec{EnableReplicaLoadBalancer: util.False()},
|
||||
opConfig: config.Config{},
|
||||
result: false,
|
||||
},
|
||||
{
|
||||
subtest: "new format, load balancer isn't specified for replica",
|
||||
role: Replica,
|
||||
role: cluster.replicaRole(),
|
||||
spec: &acidv1.PostgresSpec{EnableReplicaLoadBalancer: nil},
|
||||
opConfig: config.Config{EnableReplicaLoadBalancer: true},
|
||||
result: true,
|
||||
},
|
||||
{
|
||||
subtest: "new format, load balancer isn't specified for replica",
|
||||
role: Replica,
|
||||
role: cluster.replicaRole(),
|
||||
spec: &acidv1.PostgresSpec{EnableReplicaLoadBalancer: nil},
|
||||
opConfig: config.Config{EnableReplicaLoadBalancer: false},
|
||||
result: false,
|
||||
|
|
@ -2690,7 +2691,7 @@ func TestEnableLoadBalancers(t *testing.T) {
|
|||
namespace := "default"
|
||||
clusterNameLabel := "cluster-name"
|
||||
roleLabel := "spilo-role"
|
||||
roles := []PostgresRole{Master, Replica}
|
||||
roles := []PostgresRole{cluster.masterRole(), cluster.replicaRole()}
|
||||
sourceRanges := []string{"192.186.1.2/22"}
|
||||
extTrafficPolicy := "Cluster"
|
||||
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ func (c *Cluster) getRolePods(role PostgresRole) ([]v1.Pod, error) {
|
|||
return nil, fmt.Errorf("could not get list of pods: %v", err)
|
||||
}
|
||||
|
||||
if role == Master && len(pods.Items) > 1 {
|
||||
if role == c.masterRole() && len(pods.Items) > 1 {
|
||||
return nil, fmt.Errorf("too many masters")
|
||||
}
|
||||
|
||||
|
|
@ -234,7 +234,7 @@ func (c *Cluster) MigrateMasterPod(podName spec.NamespacedName) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
if role := PostgresRole(oldMaster.Labels[c.OpConfig.PodRoleLabel]); role != Master {
|
||||
if role := PostgresRole(oldMaster.Labels[c.OpConfig.PodRoleLabel]); role != c.masterRole() {
|
||||
c.logger.Warningf("no action needed: pod %q is not the master (anymore)", podName)
|
||||
return nil
|
||||
}
|
||||
|
|
@ -312,7 +312,7 @@ func (c *Cluster) MigrateReplicaPod(podName spec.NamespacedName, fromNodeName st
|
|||
return nil
|
||||
}
|
||||
|
||||
if role := PostgresRole(replicaPod.Labels[c.OpConfig.PodRoleLabel]); role != Replica {
|
||||
if role := PostgresRole(replicaPod.Labels[c.OpConfig.PodRoleLabel]); role != c.replicaRole() {
|
||||
return fmt.Errorf("check failed: pod %q is not a replica", podName)
|
||||
}
|
||||
|
||||
|
|
@ -416,7 +416,7 @@ func (c *Cluster) recreatePods(pods []v1.Pod, switchoverCandidates []spec.Namesp
|
|||
for i, pod := range pods {
|
||||
role := PostgresRole(pod.Labels[c.OpConfig.PodRoleLabel])
|
||||
|
||||
if role == Master {
|
||||
if role == c.masterRole() {
|
||||
masterPod = &pods[i]
|
||||
continue
|
||||
}
|
||||
|
|
@ -428,9 +428,9 @@ func (c *Cluster) recreatePods(pods []v1.Pod, switchoverCandidates []spec.Namesp
|
|||
}
|
||||
|
||||
newRole := PostgresRole(newPod.Labels[c.OpConfig.PodRoleLabel])
|
||||
if newRole == Replica {
|
||||
if newRole == c.replicaRole() {
|
||||
replicas = append(replicas, util.NameFromMeta(pod.ObjectMeta))
|
||||
} else if newRole == Master {
|
||||
} else if newRole == c.masterRole() {
|
||||
newMasterPod = newPod
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -132,7 +132,7 @@ func getPodIndex(podName string) (int32, error) {
|
|||
}
|
||||
|
||||
func (c *Cluster) preScaleDown(newStatefulSet *appsv1.StatefulSet) error {
|
||||
masterPod, err := c.getRolePods(Master)
|
||||
masterPod, err := c.getRolePods(c.masterRole())
|
||||
if err != nil {
|
||||
return fmt.Errorf("could not get master pod: %v", err)
|
||||
}
|
||||
|
|
@ -393,7 +393,7 @@ func (c *Cluster) generateEndpointSubsets(role PostgresRole) []v1.EndpointSubset
|
|||
result := make([]v1.EndpointSubset, 0)
|
||||
pods, err := c.getRolePods(role)
|
||||
if err != nil {
|
||||
if role == Master {
|
||||
if role == c.masterRole() {
|
||||
c.logger.Warningf("could not obtain the address for %s pod: %v", role, err)
|
||||
} else {
|
||||
c.logger.Warningf("could not obtain the addresses for %s pods: %v", role, err)
|
||||
|
|
@ -410,7 +410,7 @@ func (c *Cluster) generateEndpointSubsets(role PostgresRole) []v1.EndpointSubset
|
|||
Addresses: endPointAddresses,
|
||||
Ports: []v1.EndpointPort{{Name: "postgresql", Port: 5432, Protocol: "TCP"}},
|
||||
})
|
||||
} else if role == Master {
|
||||
} else if role == c.masterRole() {
|
||||
c.logger.Warningf("master is not running, generated master endpoint does not contain any addresses")
|
||||
}
|
||||
|
||||
|
|
@ -682,22 +682,22 @@ func (c *Cluster) deleteLogicalBackupJob() error {
|
|||
|
||||
// GetServiceMaster returns cluster's kubernetes master Service
|
||||
func (c *Cluster) GetServiceMaster() *v1.Service {
|
||||
return c.Services[Master]
|
||||
return c.Services[c.masterRole()]
|
||||
}
|
||||
|
||||
// GetServiceReplica returns cluster's kubernetes replica Service
|
||||
func (c *Cluster) GetServiceReplica() *v1.Service {
|
||||
return c.Services[Replica]
|
||||
return c.Services[c.replicaRole()]
|
||||
}
|
||||
|
||||
// GetEndpointMaster returns cluster's kubernetes master Endpoint
|
||||
func (c *Cluster) GetEndpointMaster() *v1.Endpoints {
|
||||
return c.Endpoints[Master]
|
||||
return c.Endpoints[c.masterRole()]
|
||||
}
|
||||
|
||||
// GetEndpointReplica returns cluster's kubernetes replica Endpoint
|
||||
func (c *Cluster) GetEndpointReplica() *v1.Endpoints {
|
||||
return c.Endpoints[Replica]
|
||||
return c.Endpoints[c.replicaRole()]
|
||||
}
|
||||
|
||||
// GetStatefulSet returns cluster's kubernetes StatefulSet
|
||||
|
|
|
|||
|
|
@ -340,7 +340,7 @@ func (c *Cluster) syncPatroniService() error {
|
|||
}
|
||||
|
||||
func (c *Cluster) syncServices() error {
|
||||
for _, role := range []PostgresRole{Master, Replica} {
|
||||
for _, role := range []PostgresRole{c.masterRole(), c.replicaRole()} {
|
||||
c.logger.Debugf("syncing %s service", role)
|
||||
|
||||
if !c.patroniKubernetesUseConfigMaps() {
|
||||
|
|
@ -545,7 +545,7 @@ func (c *Cluster) syncStatefulSet() error {
|
|||
podsToRecreate = append(podsToRecreate, pod)
|
||||
} else {
|
||||
role := PostgresRole(pod.Labels[c.OpConfig.PodRoleLabel])
|
||||
if role == Master {
|
||||
if role == c.masterRole() {
|
||||
continue
|
||||
}
|
||||
switchoverCandidates = append(switchoverCandidates, util.NameFromMeta(pod.ObjectMeta))
|
||||
|
|
@ -616,7 +616,7 @@ func (c *Cluster) syncStatefulSet() error {
|
|||
podsToRecreate = append(podsToRecreate, pod)
|
||||
} else {
|
||||
role := PostgresRole(pod.Labels[c.OpConfig.PodRoleLabel])
|
||||
if role == Master {
|
||||
if role == c.masterRole() {
|
||||
continue
|
||||
}
|
||||
switchoverCandidates = append(switchoverCandidates, util.NameFromMeta(pod.ObjectMeta))
|
||||
|
|
@ -726,9 +726,9 @@ func (c *Cluster) restartInstances(pods []v1.Pod, restartWait uint32, restartPri
|
|||
errors := make([]string, 0)
|
||||
remainingPods := make([]*v1.Pod, 0)
|
||||
|
||||
skipRole := Master
|
||||
skipRole := c.masterRole()
|
||||
if restartPrimaryFirst {
|
||||
skipRole = Replica
|
||||
skipRole = c.replicaRole()
|
||||
}
|
||||
|
||||
for i, pod := range pods {
|
||||
|
|
@ -1422,7 +1422,7 @@ func (c *Cluster) syncDatabases() error {
|
|||
if len(createDatabases) > 0 {
|
||||
// trigger creation of pooler objects in new database in syncConnectionPooler
|
||||
if c.ConnectionPooler != nil {
|
||||
for _, role := range [2]PostgresRole{Master, Replica} {
|
||||
for _, role := range [2]PostgresRole{c.masterRole(), c.replicaRole()} {
|
||||
c.ConnectionPooler[role].LookupFunction = false
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,8 +15,6 @@ type PostgresRole string
|
|||
|
||||
const (
|
||||
// spilo roles
|
||||
Master PostgresRole = "master"
|
||||
Replica PostgresRole = "replica"
|
||||
Patroni PostgresRole = "config"
|
||||
|
||||
// roles returned by Patroni cluster endpoint
|
||||
|
|
|
|||
|
|
@ -340,7 +340,7 @@ func (c *Cluster) waitForPodLabel(podEvents chan PodEvent, stopCh chan struct{},
|
|||
podRole := PostgresRole(podEvent.CurPod.Labels[c.OpConfig.PodRoleLabel])
|
||||
|
||||
if role == nil {
|
||||
if podRole == Master || podRole == Replica {
|
||||
if podRole == c.masterRole() || podRole == c.replicaRole() {
|
||||
return podEvent.CurPod, nil
|
||||
}
|
||||
} else if *role == podRole {
|
||||
|
|
@ -399,12 +399,12 @@ func (c *Cluster) _waitPodLabelsReady(anyReplica bool) error {
|
|||
}
|
||||
masterListOption := metav1.ListOptions{
|
||||
LabelSelector: labels.Merge(ls, labels.Set{
|
||||
c.OpConfig.PodRoleLabel: string(Master),
|
||||
c.OpConfig.PodRoleLabel: string(c.masterRole()),
|
||||
}).String(),
|
||||
}
|
||||
replicaListOption := metav1.ListOptions{
|
||||
LabelSelector: labels.Merge(ls, labels.Set{
|
||||
c.OpConfig.PodRoleLabel: string(Replica),
|
||||
c.OpConfig.PodRoleLabel: string(c.replicaRole()),
|
||||
}).String(),
|
||||
}
|
||||
podsNumber = 1
|
||||
|
|
@ -515,7 +515,7 @@ func (c *Cluster) roleLabelsSet(shouldAddExtraLabels bool, role PostgresRole) la
|
|||
func (c *Cluster) dnsName(role PostgresRole) string {
|
||||
var dnsString, oldDnsString string
|
||||
|
||||
if role == Master {
|
||||
if role == c.masterRole() {
|
||||
dnsString = c.masterDNSName(c.Name)
|
||||
} else {
|
||||
dnsString = c.replicaDNSName(c.Name)
|
||||
|
|
@ -524,7 +524,7 @@ func (c *Cluster) dnsName(role PostgresRole) string {
|
|||
// if cluster name starts with teamID we might need to provide backwards compatibility
|
||||
clusterNameWithoutTeamPrefix, _ := acidv1.ExtractClusterName(c.Name, c.Spec.TeamID)
|
||||
if clusterNameWithoutTeamPrefix != "" {
|
||||
if role == Master {
|
||||
if role == c.masterRole() {
|
||||
oldDnsString = c.oldMasterDNSName(clusterNameWithoutTeamPrefix)
|
||||
} else {
|
||||
oldDnsString = c.oldReplicaDNSName(clusterNameWithoutTeamPrefix)
|
||||
|
|
|
|||
|
|
@ -161,7 +161,7 @@ func checkResourcesInheritedAnnotations(cluster *Cluster, resultAnnotations map[
|
|||
}
|
||||
|
||||
checkPooler := func(annotations map[string]string) error {
|
||||
for _, role := range []PostgresRole{Master, Replica} {
|
||||
for _, role := range []PostgresRole{cluster.masterRole(), cluster.replicaRole()} {
|
||||
deploy, err := cluster.KubeClient.Deployments(namespace).Get(context.TODO(), cluster.connectionPoolerName(role), metav1.GetOptions{})
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
@ -244,7 +244,7 @@ func checkResourcesInheritedAnnotations(cluster *Cluster, resultAnnotations map[
|
|||
|
||||
func createPods(cluster *Cluster) []v1.Pod {
|
||||
podsList := make([]v1.Pod, 0)
|
||||
for i, role := range []PostgresRole{Master, Replica} {
|
||||
for i, role := range []PostgresRole{cluster.masterRole(), cluster.replicaRole()} {
|
||||
podsList = append(podsList, v1.Pod{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Name: fmt.Sprintf("%s-%d", clusterName, i),
|
||||
|
|
@ -325,7 +325,7 @@ func newInheritedAnnotationsCluster(client k8sutil.KubernetesClient) (*Cluster,
|
|||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
_, err = cluster.createService(Master)
|
||||
_, err = cluster.createService(cluster.masterRole())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
@ -365,7 +365,7 @@ func newInheritedAnnotationsCluster(client k8sutil.KubernetesClient) (*Cluster,
|
|||
}
|
||||
|
||||
func createPatroniResources(cluster *Cluster) error {
|
||||
patroniService := cluster.generateService(Replica, &pg.Spec)
|
||||
patroniService := cluster.generateService(cluster.replicaRole(), &pg.Spec)
|
||||
patroniService.ObjectMeta.Name = cluster.serviceName(Patroni)
|
||||
_, err := cluster.KubeClient.Services(namespace).Create(context.TODO(), patroniService, metav1.CreateOptions{})
|
||||
if err != nil {
|
||||
|
|
@ -479,7 +479,7 @@ func annotateResources(cluster *Cluster) error {
|
|||
}
|
||||
}
|
||||
|
||||
for _, role := range []PostgresRole{Master, Replica} {
|
||||
for _, role := range []PostgresRole{cluster.masterRole(), cluster.replicaRole()} {
|
||||
deploy, err := cluster.KubeClient.Deployments(namespace).Get(context.TODO(), cluster.connectionPoolerName(role), metav1.GetOptions{})
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
|
|||
|
|
@ -108,7 +108,7 @@ func (c *Controller) attemptToMoveMasterPodsOffNode(node *v1.Node) error {
|
|||
podName := util.NameFromMeta(pod.ObjectMeta)
|
||||
|
||||
role, ok := pod.Labels[c.opConfig.PodRoleLabel]
|
||||
if !ok || cluster.PostgresRole(role) != cluster.Master {
|
||||
if !ok || cluster.PostgresRole(role) != cluster.PostgresRole(c.opConfig.PodLeaderLabelValue) {
|
||||
if !ok {
|
||||
c.logger.Warningf("could not move pod %q: pod has no role", podName)
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue