From 30f2ba6525897aa78a55efb4131625fdf6ad71e2 Mon Sep 17 00:00:00 2001 From: evsasha Date: Mon, 28 Mar 2022 11:09:26 +0300 Subject: [PATCH] do not create endpoints when use config maps (#1760) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * do not create endpoints when use config maps * delete cluster objects with 'leader' suffix Co-authored-by: Евграфов Александр Александрович --- pkg/cluster/cluster.go | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/pkg/cluster/cluster.go b/pkg/cluster/cluster.go index e411c66e8..dcef602b9 100644 --- a/pkg/cluster/cluster.go +++ b/pkg/cluster/cluster.go @@ -43,7 +43,7 @@ var ( alphaNumericRegexp = regexp.MustCompile("^[a-zA-Z][a-zA-Z0-9]*$") databaseNameRegexp = regexp.MustCompile("^[a-zA-Z_][a-zA-Z0-9_]*$") userRegexp = regexp.MustCompile(`^[a-z0-9]([-_a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-_a-z0-9]*[a-z0-9])?)*$`) - patroniObjectSuffixes = []string{"config", "failover", "sync"} + patroniObjectSuffixes = []string{"config", "failover", "sync", "leader"} ) // Config contains operator-wide clients and configuration used from a cluster. TODO: remove struct duplication. @@ -258,18 +258,20 @@ func (c *Cluster) Create() error { for _, role := range []PostgresRole{Master, Replica} { - if c.Endpoints[role] != nil { - return fmt.Errorf("%s endpoint already exists in the cluster", role) - } - if role == Master { - // 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) - if err != nil { - return fmt.Errorf("could not create %s endpoint: %v", role, err) + if !c.patroniKubernetesUseConfigMaps() { + if c.Endpoints[role] != nil { + return fmt.Errorf("%s endpoint already exists in the cluster", role) + } + if role == Master { + // 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) + if err != nil { + return fmt.Errorf("could not create %s endpoint: %v", role, err) + } + c.logger.Infof("endpoint %q has been successfully created", util.NameFromMeta(ep.ObjectMeta)) + c.eventRecorder.Eventf(c.GetReference(), v1.EventTypeNormal, "Endpoints", "Endpoint %q has been successfully created", util.NameFromMeta(ep.ObjectMeta)) } - c.logger.Infof("endpoint %q has been successfully created", util.NameFromMeta(ep.ObjectMeta)) - c.eventRecorder.Eventf(c.GetReference(), v1.EventTypeNormal, "Endpoints", "Endpoint %q has been successfully created", util.NameFromMeta(ep.ObjectMeta)) } if c.Services[role] != nil { @@ -1576,8 +1578,9 @@ func (c *Cluster) deletePatroniClusterObjects() error { if !c.patroniKubernetesUseConfigMaps() { actionsList = append(actionsList, c.deletePatroniClusterEndpoints) + } else { + actionsList = append(actionsList, c.deletePatroniClusterServices, c.deletePatroniClusterConfigMaps) } - actionsList = append(actionsList, c.deletePatroniClusterServices, c.deletePatroniClusterConfigMaps) c.logger.Debugf("removing leftover Patroni objects (endpoints / services and configmaps)") for _, deleter := range actionsList {