diff --git a/pkg/cluster/k8sres.go b/pkg/cluster/k8sres.go index 3ce4196ad..23fafca74 100644 --- a/pkg/cluster/k8sres.go +++ b/pkg/cluster/k8sres.go @@ -1191,7 +1191,7 @@ func (c *Cluster) generateStatefulSet(spec *acidv1.PostgresSpec) (*appsv1.Statef Name: c.statefulSetName(), Namespace: c.Namespace, Labels: c.labelsSet(true), - Annotations: c.PropagateAnnotationsToStatefulsets(annotations), + Annotations: c.AnnotationsToPropagate(annotations), }, Spec: appsv1.StatefulSetSpec{ Replicas: &numberOfInstances, diff --git a/pkg/cluster/resources.go b/pkg/cluster/resources.go index b38458af8..ac1437540 100644 --- a/pkg/cluster/resources.go +++ b/pkg/cluster/resources.go @@ -853,3 +853,24 @@ func (c *Cluster) updateConnectionPoolerDeployment(oldDeploymentSpec, newDeploym return deployment, nil } + +//updateConnectionPoolerAnnotations updates the annotations of connection pooler deployment +func (c *Cluster) updateConnectionPoolerAnnotations(annotations map[string]string) (*appsv1.Deployment, error) { + c.logger.Debugf("updating connection pooler annotations") + patchData, err := metaAnnotationsPatch(annotations) + if err != nil { + return nil, fmt.Errorf("could not form patch for the deployment metadata: %v", err) + } + result, err := c.KubeClient.Deployments(c.ConnectionPooler.Deployment.Namespace).Patch( + context.TODO(), + c.ConnectionPooler.Deployment.Name, + types.MergePatchType, + []byte(patchData), + metav1.PatchOptions{}, + "") + if err != nil { + return nil, fmt.Errorf("could not patch conenction pooler annotations %q: %v", patchData, err) + } + return result, nil + +} diff --git a/pkg/cluster/sync.go b/pkg/cluster/sync.go index 07d4855d8..e9762af4c 100644 --- a/pkg/cluster/sync.go +++ b/pkg/cluster/sync.go @@ -353,8 +353,7 @@ func (c *Cluster) syncStatefulSet() error { } } } - - annotations := c.PropagateAnnotationsToStatefulsets(c.Statefulset.Annotations) + annotations := c.AnnotationsToPropagate(c.Statefulset.Annotations) c.updateStatefulSetAnnotations(annotations) if !podsRollingUpdateRequired && !c.OpConfig.EnableLazySpiloUpgrade { @@ -395,9 +394,9 @@ func (c *Cluster) syncStatefulSet() error { return nil } -// PropagateAnnotationsToStatefulsets updates annotations to statefulsets if required +// AnnotationsToPropagate get the annotations to update if required // based on the annotations in postgres CRD -func (c *Cluster) PropagateAnnotationsToStatefulsets(annotations map[string]string) map[string]string { +func (c *Cluster) AnnotationsToPropagate(annotations map[string]string) map[string]string { ToPropagateAnnotations := c.OpConfig.StatefulsetPropagateAnnotations PgCRDAnnotations := c.Postgresql.ObjectMeta.GetAnnotations() @@ -405,14 +404,18 @@ func (c *Cluster) PropagateAnnotationsToStatefulsets(annotations map[string]stri for _, anno := range ToPropagateAnnotations { for k, v := range PgCRDAnnotations { matched, err := regexp.MatchString(anno, k) - if err == nil && matched { + if err != nil { + c.logger.Errorf("annotations matching issue: %v", err) + return nil + } + if matched { annotations[k] = v } } } } - return annotations + return annotations } // checkAndSetGlobalPostgreSQLConfiguration checks whether cluster-wide API parameters @@ -841,6 +844,11 @@ func (c *Cluster) syncConnectionPoolerWorker(oldSpec, newSpec *acidv1.Postgresql } } + newAnnotations := c.AnnotationsToPropagate(c.ConnectionPooler.Deployment.Annotations) + if newAnnotations != nil { + c.updateConnectionPoolerAnnotations(newAnnotations) + } + service, err := c.KubeClient. Services(c.Namespace). Get(context.TODO(), c.connectionPoolerName(), metav1.GetOptions{})