Skip to content

Commit e923525

Browse files
K8SPG-487: add global annotations and labels for cr.yaml (#956)
* K8SPG-487: add global annotations and labels for `cr.yaml` https://perconadev.atlassian.net/browse/K8SPG-487 * fix * fix unit-tests * Update cr.yaml. --------- Co-authored-by: Inel Pandzic <[email protected]>
1 parent 991d6be commit e923525

File tree

8 files changed

+270
-1
lines changed

8 files changed

+270
-1
lines changed

deploy/cr.yaml

+5
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,11 @@ metadata:
77
# - percona.com/delete-ssl
88
spec:
99
crVersion: 2.6.0
10+
# metadata:
11+
# annotations:
12+
# example-annotation: value
13+
# labels:
14+
# example-label: value
1015
# secrets:
1116
# customRootCATLSSecret:
1217
# name: cluster1-ca-cert

e2e-tests/tests/init-deploy/01-create-cluster.yaml

+4-1
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,7 @@ commands:
88
99
source ../../functions
1010
11-
get_cr | kubectl -n "${NAMESPACE}" apply -f -
11+
get_cr \
12+
| yq '.spec.metadata.labels.test-label = "test"' \
13+
| yq '.spec.metadata.annotations.test-annotation = "test"' \
14+
| kubectl -n "${NAMESPACE}" apply -f -
+231
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,231 @@
1+
apiVersion: kuttl.dev/v1beta1
2+
kind: TestAssert
3+
timeout: 300
4+
---
5+
apiVersion: v1
6+
kind: Secret
7+
metadata:
8+
annotations:
9+
test-annotation: test
10+
labels:
11+
app.kubernetes.io/instance: init-deploy
12+
app.kubernetes.io/managed-by: percona-postgresql-operator
13+
app.kubernetes.io/name: percona-postgresql
14+
app.kubernetes.io/part-of: percona-postgresql
15+
pgv2.percona.com/version: 2.6.0
16+
postgres-operator.crunchydata.com/cluster: init-deploy
17+
postgres-operator.crunchydata.com/pgbackrest: ""
18+
postgres-operator.crunchydata.com/pgbackrest-config: ""
19+
test-label: test
20+
name: init-deploy-pgbackrest
21+
type: Opaque
22+
---
23+
apiVersion: v1
24+
kind: Secret
25+
metadata:
26+
annotations:
27+
test-annotation: test
28+
labels:
29+
app.kubernetes.io/instance: init-deploy
30+
app.kubernetes.io/managed-by: percona-postgresql-operator
31+
app.kubernetes.io/name: percona-postgresql
32+
app.kubernetes.io/part-of: percona-postgresql
33+
postgres-operator.crunchydata.com/cluster: init-deploy
34+
postgres-operator.crunchydata.com/cluster-certificate: replication-client-tls
35+
test-label: test
36+
name: init-deploy-replication-cert
37+
type: Opaque
38+
---
39+
apiVersion: v1
40+
kind: Secret
41+
metadata:
42+
annotations:
43+
test-annotation: test
44+
labels:
45+
app.kubernetes.io/instance: init-deploy
46+
app.kubernetes.io/managed-by: percona-postgresql-operator
47+
app.kubernetes.io/name: percona-postgresql
48+
app.kubernetes.io/part-of: percona-postgresql
49+
postgres-operator.crunchydata.com/cluster: init-deploy
50+
postgres-operator.crunchydata.com/pguser: postgres
51+
postgres-operator.crunchydata.com/role: pguser
52+
test-label: test
53+
name: init-deploy-pguser-postgres
54+
type: Opaque
55+
---
56+
apiVersion: v1
57+
kind: Secret
58+
metadata:
59+
annotations:
60+
test-annotation: test
61+
labels:
62+
app.kubernetes.io/instance: init-deploy
63+
app.kubernetes.io/managed-by: percona-postgresql-operator
64+
app.kubernetes.io/name: percona-postgresql
65+
app.kubernetes.io/part-of: percona-postgresql
66+
postgres-operator.crunchydata.com/cluster: init-deploy
67+
postgres-operator.crunchydata.com/pguser: init-deploy
68+
postgres-operator.crunchydata.com/role: pguser
69+
test-label: test
70+
name: init-deploy-pguser-init-deploy
71+
type: Opaque
72+
---
73+
apiVersion: v1
74+
kind: Secret
75+
metadata:
76+
annotations:
77+
test-annotation: test
78+
labels:
79+
app.kubernetes.io/component: pgbouncer
80+
app.kubernetes.io/instance: init-deploy
81+
app.kubernetes.io/managed-by: percona-postgresql-operator
82+
app.kubernetes.io/name: percona-postgresql
83+
app.kubernetes.io/part-of: percona-postgresql
84+
pgv2.percona.com/version: 2.6.0
85+
postgres-operator.crunchydata.com/cluster: init-deploy
86+
postgres-operator.crunchydata.com/role: pgbouncer
87+
test-label: test
88+
name: init-deploy-pgbouncer
89+
type: Opaque
90+
---
91+
apiVersion: v1
92+
kind: Secret
93+
metadata:
94+
annotations:
95+
test-annotation: test
96+
labels:
97+
app.kubernetes.io/instance: init-deploy
98+
app.kubernetes.io/managed-by: percona-postgresql-operator
99+
app.kubernetes.io/name: percona-postgresql
100+
app.kubernetes.io/part-of: percona-postgresql
101+
postgres-operator.crunchydata.com/cluster: init-deploy
102+
postgres-operator.crunchydata.com/cluster-certificate: postgres-tls
103+
test-label: test
104+
name: init-deploy-cluster-cert
105+
type: Opaque
106+
---
107+
apiVersion: v1
108+
kind: Secret
109+
metadata:
110+
annotations:
111+
test-annotation: test
112+
labels:
113+
test-label: test
114+
name: init-deploy-cluster-ca-cert
115+
ownerReferences:
116+
- apiVersion: postgres-operator.crunchydata.com/v1beta1
117+
kind: PostgresCluster
118+
name: init-deploy
119+
type: Opaque
120+
---
121+
apiVersion: v1
122+
kind: ConfigMap
123+
metadata:
124+
annotations:
125+
test-annotation: test
126+
labels:
127+
postgres-operator.crunchydata.com/cluster: init-deploy
128+
test-label: test
129+
name: init-deploy-config
130+
ownerReferences:
131+
- apiVersion: postgres-operator.crunchydata.com/v1beta1
132+
blockOwnerDeletion: true
133+
controller: true
134+
kind: PostgresCluster
135+
name: init-deploy
136+
---
137+
apiVersion: v1
138+
kind: ConfigMap
139+
metadata:
140+
annotations:
141+
test-annotation: test
142+
labels:
143+
app.kubernetes.io/instance: init-deploy
144+
app.kubernetes.io/managed-by: percona-postgresql-operator
145+
app.kubernetes.io/name: percona-postgresql
146+
app.kubernetes.io/part-of: percona-postgresql
147+
pgv2.percona.com/version: 2.6.0
148+
postgres-operator.crunchydata.com/cluster: init-deploy
149+
postgres-operator.crunchydata.com/pgbackrest: ""
150+
postgres-operator.crunchydata.com/pgbackrest-config: ""
151+
test-label: test
152+
name: init-deploy-pgbackrest-config
153+
ownerReferences:
154+
- apiVersion: postgres-operator.crunchydata.com/v1beta1
155+
blockOwnerDeletion: true
156+
controller: true
157+
kind: PostgresCluster
158+
name: init-deploy
159+
---
160+
apiVersion: v1
161+
kind: ConfigMap
162+
metadata:
163+
annotations:
164+
test-annotation: test
165+
labels:
166+
app.kubernetes.io/component: pgbouncer
167+
app.kubernetes.io/instance: init-deploy
168+
app.kubernetes.io/managed-by: percona-postgresql-operator
169+
app.kubernetes.io/name: percona-postgresql
170+
app.kubernetes.io/part-of: percona-postgresql
171+
pgv2.percona.com/version: 2.6.0
172+
postgres-operator.crunchydata.com/cluster: init-deploy
173+
postgres-operator.crunchydata.com/role: pgbouncer
174+
test-label: test
175+
name: init-deploy-pgbouncer
176+
ownerReferences:
177+
- apiVersion: postgres-operator.crunchydata.com/v1beta1
178+
blockOwnerDeletion: true
179+
controller: true
180+
kind: PostgresCluster
181+
name: init-deploy
182+
---
183+
apiVersion: apps/v1
184+
kind: StatefulSet
185+
metadata:
186+
annotations:
187+
test-annotation: test
188+
generation: 1
189+
labels:
190+
app.kubernetes.io/instance: init-deploy
191+
app.kubernetes.io/managed-by: percona-postgresql-operator
192+
app.kubernetes.io/name: percona-postgresql
193+
app.kubernetes.io/part-of: percona-postgresql
194+
pgv2.percona.com/version: 2.6.0
195+
postgres-operator.crunchydata.com/cluster: init-deploy
196+
postgres-operator.crunchydata.com/data: pgbackrest
197+
postgres-operator.crunchydata.com/pgbackrest: ""
198+
postgres-operator.crunchydata.com/pgbackrest-dedicated: ""
199+
test-label: test
200+
name: init-deploy-repo-host
201+
ownerReferences:
202+
- apiVersion: postgres-operator.crunchydata.com/v1beta1
203+
blockOwnerDeletion: true
204+
controller: true
205+
kind: PostgresCluster
206+
name: init-deploy
207+
spec:
208+
template:
209+
metadata:
210+
annotations:
211+
test-annotation: test
212+
labels:
213+
app.kubernetes.io/instance: init-deploy
214+
app.kubernetes.io/managed-by: percona-postgresql-operator
215+
app.kubernetes.io/name: percona-postgresql
216+
app.kubernetes.io/part-of: percona-postgresql
217+
pgv2.percona.com/version: 2.6.0
218+
postgres-operator.crunchydata.com/cluster: init-deploy
219+
postgres-operator.crunchydata.com/data: pgbackrest
220+
postgres-operator.crunchydata.com/pgbackrest: ""
221+
postgres-operator.crunchydata.com/pgbackrest-dedicated: ""
222+
test-label: test
223+
status:
224+
availableReplicas: 1
225+
collisionCount: 0
226+
currentReplicas: 1
227+
observedGeneration: 1
228+
readyReplicas: 1
229+
replicas: 1
230+
updatedReplicas: 1
231+

internal/controller/postgrescluster/pki.go

+9
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ package postgrescluster
77
import (
88
"context"
99

10+
gover "github.com/hashicorp/go-version"
1011
"github.com/pkg/errors"
1112
appsv1 "k8s.io/api/apps/v1"
1213
corev1 "k8s.io/api/core/v1"
@@ -109,6 +110,14 @@ func (r *Reconciler) reconcileRootCertificate(
109110
intent.Data = make(map[string][]byte)
110111
intent.ObjectMeta.OwnerReferences = existing.ObjectMeta.OwnerReferences
111112

113+
if cluster.Labels != nil {
114+
currVersion, err := gover.NewVersion(cluster.Labels[naming.LabelVersion])
115+
if err == nil && currVersion.GreaterThanOrEqual(gover.Must(gover.NewVersion("2.6.0"))) && cluster.Spec.Metadata != nil {
116+
intent.Labels = cluster.Spec.Metadata.Labels
117+
intent.Annotations = cluster.Spec.Metadata.Annotations
118+
}
119+
}
120+
112121
// A root secret is scoped to the namespace where postgrescluster(s)
113122
// are deployed. For operator deployments with postgresclusters in more than
114123
// one namespace, there will be one root per namespace.

percona/controller/pgcluster/backup.go

+4
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,10 @@ func reconcileBackupJob(ctx context.Context, cl client.Client, cr *v2.PerconaPGC
185185
RepoName: repoName,
186186
},
187187
}
188+
if cr.CompareVersion("2.6.0") >= 0 && cr.Spec.Metadata != nil {
189+
pb.Annotations = naming.Merge(cr.Spec.Metadata.Annotations, pb.Annotations)
190+
pb.Labels = cr.Spec.Metadata.Labels
191+
}
188192

189193
err = cl.Create(ctx, pb)
190194
if err != nil {

percona/controller/pgcluster/controller.go

+7
Original file line numberDiff line numberDiff line change
@@ -369,6 +369,7 @@ func (r *PGClusterReconciler) reconcileOldCACert(ctx context.Context, cr *v2.Per
369369
// K8SPG-555: We should create an empty secret with old name, so that crunchy part can populate it
370370
// instead of creating secrets unique to the cluster
371371
// TODO: remove when 2.4.0 will become unsupported
372+
372373
if err := r.Client.Create(ctx, oldCASecret); err != nil {
373374
return errors.Wrap(err, "failed to create ca secret")
374375
}
@@ -409,6 +410,12 @@ func (r *PGClusterReconciler) reconcileOldCACert(ctx context.Context, cr *v2.Per
409410
if !k8serrors.IsNotFound(err) {
410411
newCASecret.Data = oldCASecret.Data
411412
}
413+
414+
if cr.CompareVersion("2.6.0") >= 0 && cr.Spec.Metadata != nil {
415+
newCASecret.Annotations = cr.Spec.Metadata.Annotations
416+
newCASecret.Labels = cr.Spec.Metadata.Labels
417+
}
418+
412419
if err := r.Client.Create(ctx, newCASecret); err != nil {
413420
return errors.Wrap(err, "failed to create updated CA secret")
414421
}

percona/controller/pgcluster/restore.go

+5
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
k8serrors "k8s.io/apimachinery/pkg/api/errors"
77
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
88

9+
"github.com/percona/percona-postgresql-operator/internal/naming"
910
pNaming "github.com/percona/percona-postgresql-operator/percona/naming"
1011
v2 "github.com/percona/percona-postgresql-operator/pkg/apis/pgv2.percona.com/v2"
1112
)
@@ -41,6 +42,10 @@ func (r *PGClusterReconciler) createBootstrapRestoreObject(ctx context.Context,
4142
RepoName: repoName,
4243
},
4344
}
45+
if cr.CompareVersion("2.6.0") >= 0 && cr.Spec.Metadata != nil {
46+
pgr.Annotations = naming.Merge(cr.Spec.Metadata.Annotations, pgr.Annotations)
47+
pgr.Labels = cr.Spec.Metadata.Labels
48+
}
4449

4550
err := r.Client.Create(ctx, pgr)
4651
if err != nil && !k8serrors.IsAlreadyExists(err) {

percona/controller/pgcluster/schedule.go

+5
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,11 @@ func (r *PGClusterReconciler) createScheduledBackup(log logr.Logger, backupName,
118118
},
119119
}
120120

121+
if pb.CompareVersion("2.6.0") >= 0 && cr.Spec.Metadata != nil {
122+
pb.Annotations = cr.Spec.Metadata.Annotations
123+
pb.Labels = cr.Spec.Metadata.Labels
124+
}
125+
121126
err := r.Client.Create(ctx, pb)
122127
if err != nil {
123128
return errors.Wrapf(err, "failed to create PerconaPGBackup %s", backupName)

0 commit comments

Comments
 (0)