From ad6505869ee96a0a4d7036844d31a8893c2f9f30 Mon Sep 17 00:00:00 2001 From: Natalia Marukovich Date: Tue, 24 Feb 2026 16:04:52 +0100 Subject: [PATCH 1/3] K8SPG-939 add labels to patroni --- internal/patroni/config.go | 10 +++++++--- internal/patroni/config_test.go | 34 +++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/internal/patroni/config.go b/internal/patroni/config.go index b7431591a5..eb6981074c 100644 --- a/internal/patroni/config.go +++ b/internal/patroni/config.go @@ -45,6 +45,12 @@ func clusterYAML( cluster *v1beta1.PostgresCluster, pgHBAs postgres.HBAs, pgParameters postgres.Parameters, ) (string, error) { + + labels := map[string]string{naming.LabelCluster: cluster.Name} + if cluster.CompareVersion("2.9.0") >= 0 { + labels = naming.Merge(cluster.Spec.Metadata.GetLabelsOrNil(), labels) + } + root := map[string]any{ // The cluster identifier. This value cannot change during the cluster's // lifetime. @@ -64,9 +70,7 @@ func clusterYAML( // In addition to "scope_label" above, Patroni will add the following to // every object it creates. It will also use these as filters when doing // any lookups. - "labels": map[string]string{ - naming.LabelCluster: cluster.Name, - }, + "labels": labels, }, "postgresql": map[string]any{ diff --git a/internal/patroni/config_test.go b/internal/patroni/config_test.go index 710704424f..c886b6ce9c 100644 --- a/internal/patroni/config_test.go +++ b/internal/patroni/config_test.go @@ -18,10 +18,12 @@ import ( "sigs.k8s.io/yaml" "github.com/percona/percona-postgresql-operator/v2/internal/initialize" + "github.com/percona/percona-postgresql-operator/v2/internal/naming" "github.com/percona/percona-postgresql-operator/v2/internal/postgres" "github.com/percona/percona-postgresql-operator/v2/internal/testing/cmp" "github.com/percona/percona-postgresql-operator/v2/internal/testing/require" pNaming "github.com/percona/percona-postgresql-operator/v2/percona/naming" + "github.com/percona/percona-postgresql-operator/v2/percona/version" "github.com/percona/percona-postgresql-operator/v2/pkg/apis/postgres-operator.crunchydata.com/v1beta1" ) @@ -86,6 +88,38 @@ watchdog: `)+"\n") }) + t.Run("metadata labels propagated to labels", func(t *testing.T) { + cluster := new(v1beta1.PostgresCluster) + err := cluster.Default(context.Background(), nil) + assert.NilError(t, err) + cluster.Namespace = "some-namespace" + cluster.Name = "cluster-name" + cluster.Labels = map[string]string{ + naming.LabelVersion: version.Version(), + } + cluster.Spec.Metadata = &v1beta1.Metadata{ + Labels: map[string]string{ + "example.com/env": "production", + "example.com/owner": "team-a", + }, + } + + data, err := clusterYAML(cluster, postgres.HBAs{}, postgres.Parameters{}) + assert.NilError(t, err) + + var parsed map[string]any + assert.NilError(t, yaml.Unmarshal([]byte(data), &parsed)) + + k8sSection, ok := parsed["kubernetes"].(map[string]any) + assert.Assert(t, ok, "expected kubernetes section") + labels, ok := k8sSection["labels"].(map[string]any) + assert.Assert(t, ok, "expected kubernetes.labels section") + + assert.Equal(t, labels["example.com/env"], "production") + assert.Equal(t, labels["example.com/owner"], "team-a") + assert.Equal(t, labels["postgres-operator.crunchydata.com/cluster"], "cluster-name") + }) + t.Run(">PG10", func(t *testing.T) { cluster := new(v1beta1.PostgresCluster) err := cluster.Default(context.Background(), nil) From 2b6f4f2b1deca82a1dfc2cc3f654b06db01773f7 Mon Sep 17 00:00:00 2001 From: Natalia Marukovich Date: Wed, 25 Feb 2026 11:18:25 +0100 Subject: [PATCH 2/3] update test --- e2e-tests/tests/init-deploy/05-assert.yaml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/e2e-tests/tests/init-deploy/05-assert.yaml b/e2e-tests/tests/init-deploy/05-assert.yaml index 86b1aa02c3..8eb8c841f6 100644 --- a/e2e-tests/tests/init-deploy/05-assert.yaml +++ b/e2e-tests/tests/init-deploy/05-assert.yaml @@ -180,6 +180,24 @@ metadata: kind: PostgresCluster name: init-deploy --- +apiVersion: v1 +kind: Endpoints +metadata: + labels: + postgres-operator.crunchydata.com/cluster: init-deploy + postgres-operator.crunchydata.com/patroni: init-deploy-ha + test-label: test + name: init-deploy-ha +--- +apiVersion: v1 +kind: Endpoints +metadata: + labels: + postgres-operator.crunchydata.com/cluster: init-deploy + postgres-operator.crunchydata.com/patroni: init-deploy-ha + test-label: test + name: init-deploy-ha-config +--- apiVersion: apps/v1 kind: StatefulSet metadata: From 38fcc8939b01abe400e8b234532e8fcb1dc4927a Mon Sep 17 00:00:00 2001 From: Natalia Marukovich Date: Wed, 25 Feb 2026 13:00:20 +0100 Subject: [PATCH 3/3] fix --- percona/controller/pgbackup/controller.go | 1 - 1 file changed, 1 deletion(-) diff --git a/percona/controller/pgbackup/controller.go b/percona/controller/pgbackup/controller.go index e1d41e314c..0ade13e438 100644 --- a/percona/controller/pgbackup/controller.go +++ b/percona/controller/pgbackup/controller.go @@ -2,7 +2,6 @@ package pgbackup import ( "context" - "fmt" "path" "slices" "time"