Skip to content

Commit 32a660a

Browse files
committed
Exclude specified annotations and labels of ScyllaDBDatacenters from propagation to underlying resources
1 parent c8d093e commit 32a660a

File tree

2 files changed

+98
-26
lines changed

2 files changed

+98
-26
lines changed

pkg/controller/scylladbdatacenter/resource.go

Lines changed: 74 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -60,17 +60,30 @@ const (
6060
alternatorTLSPortName = "alternator-tls"
6161
)
6262

63+
var (
64+
// Annotation keys excluded from propagation to underlying resources.
65+
nonPropagatedAnnotationKeys = []string{
66+
naming.ScyllaDBManagerClusterRegistrationNameOverrideAnnotation,
67+
}
68+
69+
// Label keys excluded from propagation to underlying resources.
70+
nonPropagatedLabelKeys = []string{
71+
naming.GlobalScyllaDBManagerRegistrationLabel,
72+
}
73+
)
74+
6375
func IdentityService(sdc *scyllav1alpha1.ScyllaDBDatacenter) (*corev1.Service, error) {
76+
sdcLabels := getPropagableScyllaDBDatacenterLabels(sdc)
6477
svcLabels := map[string]string{}
65-
maps.Copy(svcLabels, sdc.Labels)
78+
maps.Copy(svcLabels, sdcLabels)
6679
maps.Copy(svcLabels, naming.ClusterLabels(sdc))
6780
svcLabels[naming.ScyllaServiceTypeLabel] = string(naming.ScyllaServiceTypeIdentity)
6881

6982
svcAnnotations := map[string]string{}
7083

84+
sdcAnnotations := getPropagableScyllaDBDatacenterAnnotations(sdc)
7185
// As ScyllaDBDatacenter may be managed object (when user is using scyllav1.ScyllaCluster API), managed
7286
// hash from it shouldn't propagate into dependency objects to not trigger unnecessary double rollouts.
73-
sdcAnnotations := maps.Clone(sdc.Annotations)
7487
delete(sdcAnnotations, naming.ManagedHash)
7588

7689
maps.Copy(svcAnnotations, sdcAnnotations)
@@ -99,12 +112,13 @@ func IdentityService(sdc *scyllav1alpha1.ScyllaDBDatacenter) (*corev1.Service, e
99112
}
100113

101114
func MemberService(sdc *scyllav1alpha1.ScyllaDBDatacenter, rackName, name string, oldService *corev1.Service, jobs map[string]*batchv1.Job) (*corev1.Service, error) {
115+
sdcLabels := getPropagableScyllaDBDatacenterLabels(sdc)
102116
svcLabels := map[string]string{}
103117

104118
if sdc.Spec.ExposeOptions != nil && sdc.Spec.ExposeOptions.NodeService.Labels != nil {
105119
maps.Copy(svcLabels, sdc.Spec.ExposeOptions.NodeService.Labels)
106120
} else {
107-
maps.Copy(svcLabels, sdc.Labels)
121+
maps.Copy(svcLabels, sdcLabels)
108122
}
109123

110124
maps.Copy(svcLabels, naming.ClusterLabels(sdc))
@@ -114,9 +128,9 @@ func MemberService(sdc *scyllav1alpha1.ScyllaDBDatacenter, rackName, name string
114128

115129
svcAnnotations := map[string]string{}
116130

131+
sdcAnnotations := getPropagableScyllaDBDatacenterAnnotations(sdc)
117132
// As ScyllaDBDatacenter may be managed object (when user is using scyllav1.ScyllaCluster API), managed
118133
// hash from it shouldn't propagate into dependency objects to not trigger unnecessary double rollouts.
119-
sdcAnnotations := maps.Clone(sdc.Annotations)
120134
delete(sdcAnnotations, naming.ManagedHash)
121135

122136
if sdc.Spec.ExposeOptions != nil && sdc.Spec.ExposeOptions.NodeService.Annotations != nil {
@@ -316,21 +330,23 @@ func StatefulSetForRack(rack scyllav1alpha1.RackSpec, sdc *scyllav1alpha1.Scylla
316330
requiredLabels[naming.ScyllaVersionLabel] = scyllaDBVersion
317331
maps.Copy(requiredLabels, selectorLabels)
318332

333+
sdcLabels := getPropagableScyllaDBDatacenterLabels(sdc)
334+
319335
rackLabels := map[string]string{}
320-
maps.Copy(rackLabels, sdc.Labels)
336+
maps.Copy(rackLabels, sdcLabels)
321337
maps.Copy(rackLabels, requiredLabels)
322338

323339
rackTemplateLabels := map[string]string{}
324340
if sdc.Spec.Metadata != nil && sdc.Spec.Metadata.Labels != nil {
325341
maps.Copy(rackTemplateLabels, sdc.Spec.Metadata.Labels)
326342
} else {
327-
maps.Copy(rackTemplateLabels, sdc.Labels)
343+
maps.Copy(rackTemplateLabels, sdcLabels)
328344
}
329345
maps.Copy(rackTemplateLabels, requiredLabels)
330346

347+
sdcAnnotations := getPropagableScyllaDBDatacenterAnnotations(sdc)
331348
// As ScyllaDBDatacenter may be managed object (when user is using scyllav1.ScyllaCluster API), managed
332349
// hash from it shouldn't propagate into dependency objects to not trigger unnecessary double rollouts.
333-
sdcAnnotations := maps.Clone(sdc.Annotations)
334350
delete(sdcAnnotations, naming.ManagedHash)
335351

336352
rackAnnotations := map[string]string{}
@@ -366,7 +382,7 @@ func StatefulSetForRack(rack scyllav1alpha1.RackSpec, sdc *scyllav1alpha1.Scylla
366382
if rack.ScyllaDB != nil && rack.ScyllaDB.Storage != nil && rack.ScyllaDB.Storage.Metadata != nil && rack.ScyllaDB.Storage.Metadata.Labels != nil {
367383
maps.Copy(dataVolumeClaimLabels, rack.ScyllaDB.Storage.Metadata.Labels)
368384
} else if existingSts == nil {
369-
maps.Copy(dataVolumeClaimLabels, sdc.Labels)
385+
maps.Copy(dataVolumeClaimLabels, sdcLabels)
370386
} else {
371387
if existingDataPVCTemplate == nil {
372388
return nil, fmt.Errorf("data PVC template %q in existing %q StatefulSet spec is missing", naming.PVCTemplateName, naming.ObjRef(existingSts))
@@ -1282,17 +1298,19 @@ exec scylla-manager-agent \
12821298
}
12831299

12841300
func MakePodDisruptionBudget(sdc *scyllav1alpha1.ScyllaDBDatacenter) *policyv1.PodDisruptionBudget {
1301+
sdcLabels := getPropagableScyllaDBDatacenterLabels(sdc)
1302+
12851303
maxUnavailable := intstr.FromInt(1)
12861304

12871305
selectorLabels := naming.ClusterLabels(sdc)
12881306

12891307
labels := map[string]string{}
1290-
maps.Copy(labels, sdc.Labels)
1308+
maps.Copy(labels, sdcLabels)
12911309
maps.Copy(labels, selectorLabels)
12921310

1311+
sdcAnnotations := getPropagableScyllaDBDatacenterAnnotations(sdc)
12931312
// As ScyllaDBDatacenter may be managed object (when user is using scyllav1.ScyllaCluster API), managed
12941313
// hash from it shouldn't propagate into dependency objects to not trigger unnecessary double rollouts.
1295-
sdcAnnotations := maps.Clone(sdc.Annotations)
12961314
delete(sdcAnnotations, naming.ManagedHash)
12971315

12981316
// Ignore any Job Pods that share the selector with ScyllaDB Pods, they shouldn't be accounted for PDB.
@@ -1346,9 +1364,11 @@ func MakeIngresses(sdc *scyllav1alpha1.ScyllaDBDatacenter, services map[string]*
13461364

13471365
var ingresses []*networkingv1.Ingress
13481366

1367+
sdcLabels := getPropagableScyllaDBDatacenterLabels(sdc)
1368+
1369+
sdcAnnotations := getPropagableScyllaDBDatacenterAnnotations(sdc)
13491370
// As ScyllaDBDatacenter may be managed object (when user is using scyllav1.ScyllaCluster API), managed
13501371
// hash from it shouldn't propagate into dependency objects to not trigger unnecessary double rollouts.
1351-
sdcAnnotations := maps.Clone(sdc.Annotations)
13521372
delete(sdcAnnotations, naming.ManagedHash)
13531373

13541374
for _, ip := range ingressParams {
@@ -1363,7 +1383,7 @@ func MakeIngresses(sdc *scyllav1alpha1.ScyllaDBDatacenter, services map[string]*
13631383
}
13641384

13651385
labels := map[string]string{}
1366-
maps.Copy(labels, sdc.Labels)
1386+
maps.Copy(labels, sdcLabels)
13671387
maps.Copy(labels, naming.ClusterLabels(sdc))
13681388

13691389
switch naming.ScyllaServiceType(service.Labels[naming.ScyllaServiceTypeLabel]) {
@@ -1452,13 +1472,14 @@ func MakeAgentAuthTokenSecret(sdc *scyllav1alpha1.ScyllaDBDatacenter, authToken
14521472
return nil, err
14531473
}
14541474

1475+
sdcLabels := getPropagableScyllaDBDatacenterLabels(sdc)
14551476
labels := map[string]string{}
1456-
maps.Copy(labels, sdc.Labels)
1477+
maps.Copy(labels, sdcLabels)
14571478
maps.Copy(labels, naming.ClusterLabels(sdc))
14581479

1480+
sdcAnnotations := getPropagableScyllaDBDatacenterAnnotations(sdc)
14591481
// As ScyllaDBDatacenter may be managed object (when user is using scyllav1.ScyllaCluster API), managed
14601482
// hash from it shouldn't propagate into dependency objects to not trigger unnecessary double rollouts.
1461-
sdcAnnotations := maps.Clone(sdc.Annotations)
14621483
delete(sdcAnnotations, naming.ManagedHash)
14631484

14641485
return &corev1.Secret{
@@ -1497,15 +1518,17 @@ func copyReferencedValue[T any](v *T) *T {
14971518
}
14981519

14991520
func MakeServiceAccount(sdc *scyllav1alpha1.ScyllaDBDatacenter) *corev1.ServiceAccount {
1521+
sdcLabels := getPropagableScyllaDBDatacenterLabels(sdc)
1522+
15001523
labels := map[string]string{}
1501-
maps.Copy(labels, sdc.Labels)
1524+
maps.Copy(labels, sdcLabels)
15021525
maps.Copy(labels, naming.ClusterLabels(sdc))
15031526

15041527
annotations := map[string]string{}
15051528

1529+
sdcAnnotations := getPropagableScyllaDBDatacenterAnnotations(sdc)
15061530
// As ScyllaDBDatacenter may be managed object (when user is using scyllav1.ScyllaCluster API), managed
15071531
// hash from it shouldn't propagate into dependency objects to not trigger unnecessary double rollouts.
1508-
sdcAnnotations := maps.Clone(sdc.Annotations)
15091532
delete(sdcAnnotations, naming.ManagedHash)
15101533
maps.Copy(annotations, sdcAnnotations)
15111534

@@ -1524,14 +1547,15 @@ func MakeServiceAccount(sdc *scyllav1alpha1.ScyllaDBDatacenter) *corev1.ServiceA
15241547

15251548
func MakeRoleBinding(sdc *scyllav1alpha1.ScyllaDBDatacenter) *rbacv1.RoleBinding {
15261549
saName := naming.MemberServiceAccountNameForScyllaDBDatacenter(sdc.Name)
1550+
sdcLabels := getPropagableScyllaDBDatacenterLabels(sdc)
15271551

15281552
labels := map[string]string{}
1529-
maps.Copy(labels, sdc.Labels)
1553+
maps.Copy(labels, sdcLabels)
15301554
maps.Copy(labels, naming.ClusterLabels(sdc))
15311555

1556+
sdcAnnotations := getPropagableScyllaDBDatacenterAnnotations(sdc)
15321557
// As ScyllaDBDatacenter may be managed object (when user is using scyllav1.ScyllaCluster API), managed
15331558
// hash from it shouldn't propagate into dependency objects to not trigger unnecessary double rollouts.
1534-
sdcAnnotations := maps.Clone(sdc.Annotations)
15351559
delete(sdcAnnotations, naming.ManagedHash)
15361560

15371561
annotations := map[string]string{}
@@ -1567,6 +1591,7 @@ func MakeJobs(sdc *scyllav1alpha1.ScyllaDBDatacenter, services map[string]*corev
15671591
var jobs []*batchv1.Job
15681592
var progressingConditions []metav1.Condition
15691593

1594+
sdcLabels := getPropagableScyllaDBDatacenterLabels(sdc)
15701595
for _, rack := range sdc.Spec.Racks {
15711596
rackNodes, err := controllerhelpers.GetRackNodeCount(sdc, rack.Name)
15721597
if err != nil {
@@ -1643,7 +1668,7 @@ func MakeJobs(sdc *scyllav1alpha1.ScyllaDBDatacenter, services map[string]*corev
16431668
klog.InfoS("Node requires a cleanup", "Node", naming.ObjRef(svc), "CurrentHash", currentTokenRingHash, "LastCleanedUpHash", lastCleanedUpTokenRingHash)
16441669

16451670
jobLabels := map[string]string{}
1646-
maps.Copy(jobLabels, sdc.Labels)
1671+
maps.Copy(jobLabels, sdcLabels)
16471672
maps.Copy(jobLabels, map[string]string{
16481673
naming.ClusterNameLabel: sdc.Name,
16491674
naming.NodeJobLabel: svcName,
@@ -1652,9 +1677,9 @@ func MakeJobs(sdc *scyllav1alpha1.ScyllaDBDatacenter, services map[string]*corev
16521677

16531678
annotations := map[string]string{}
16541679

1680+
sdcAnnotations := getPropagableScyllaDBDatacenterAnnotations(sdc)
16551681
// As ScyllaDBDatacenter may be managed object (when user is using scyllav1.ScyllaCluster API), managed
16561682
// hash from it shouldn't propagate into dependency objects to not trigger unnecessary double rollouts.
1657-
sdcAnnotations := maps.Clone(sdc.Annotations)
16581683
delete(sdcAnnotations, naming.ManagedHash)
16591684
maps.Copy(annotations, sdcAnnotations)
16601685

@@ -1755,6 +1780,7 @@ func MakeManagedScyllaDBConfigMaps(sdc *scyllav1alpha1.ScyllaDBDatacenter) ([]*c
17551780

17561781
func MakeManagedScyllaDBSnitchConfig(sdc *scyllav1alpha1.ScyllaDBDatacenter) ([]*corev1.ConfigMap, error) {
17571782
snitchConfigsCMs := make([]*corev1.ConfigMap, 0, len(sdc.Spec.Racks))
1783+
sdcLabels := getPropagableScyllaDBDatacenterLabels(sdc)
17581784

17591785
for _, rack := range sdc.Spec.Racks {
17601786
cm, _, err := scylladbassets.ScyllaDBSnitchConfigTemplate.Get().RenderObject(
@@ -1784,15 +1810,16 @@ func MakeManagedScyllaDBSnitchConfig(sdc *scyllav1alpha1.ScyllaDBDatacenter) ([]
17841810
if cm.Labels == nil {
17851811
cm.Labels = map[string]string{}
17861812
}
1787-
maps.Copy(cm.Labels, sdc.Labels)
1813+
maps.Copy(cm.Labels, sdcLabels)
17881814
maps.Copy(cm.Labels, naming.ClusterLabels(sdc))
17891815

17901816
if cm.Annotations == nil {
17911817
cm.Annotations = map[string]string{}
17921818
}
1819+
1820+
sdcAnnotations := getPropagableScyllaDBDatacenterAnnotations(sdc)
17931821
// As ScyllaDBDatacenter may be managed object (when user is using scyllav1.ScyllaCluster API), managed
17941822
// hash from it shouldn't propagate into dependency objects to not trigger unnecessary double rollouts.
1795-
sdcAnnotations := maps.Clone(sdc.Annotations)
17961823
delete(sdcAnnotations, naming.ManagedHash)
17971824

17981825
maps.Copy(cm.Annotations, sdcAnnotations)
@@ -1857,15 +1884,17 @@ func MakeManagedScyllaDBConfig(sdc *scyllav1alpha1.ScyllaDBDatacenter) (*corev1.
18571884
if cm.Labels == nil {
18581885
cm.Labels = map[string]string{}
18591886
}
1860-
maps.Copy(cm.Labels, sdc.Labels)
1887+
sdcLabels := getPropagableScyllaDBDatacenterLabels(sdc)
1888+
maps.Copy(cm.Labels, sdcLabels)
18611889
maps.Copy(cm.Labels, naming.ClusterLabels(sdc))
18621890

18631891
if cm.Annotations == nil {
18641892
cm.Annotations = map[string]string{}
18651893
}
1894+
1895+
sdcAnnotations := getPropagableScyllaDBDatacenterAnnotations(sdc)
18661896
// As ScyllaDBDatacenter may be managed object (when user is using scyllav1.ScyllaCluster API), managed
18671897
// hash from it shouldn't propagate into dependency objects to not trigger unnecessary double rollouts.
1868-
sdcAnnotations := maps.Clone(sdc.Annotations)
18691898
delete(sdcAnnotations, naming.ManagedHash)
18701899

18711900
maps.Copy(cm.Annotations, sdcAnnotations)
@@ -2096,8 +2125,11 @@ func MakeUpgradeContextConfigMap(sdc *scyllav1alpha1.ScyllaDBDatacenter, uc *int
20962125
labels := make(map[string]string)
20972126
annotations := make(map[string]string)
20982127

2099-
maps.Copy(labels, sdc.Labels)
2100-
maps.Copy(annotations, sdc.Annotations)
2128+
sdcLabels := getPropagableScyllaDBDatacenterLabels(sdc)
2129+
maps.Copy(labels, sdcLabels)
2130+
2131+
sdcAnnotations := getPropagableScyllaDBDatacenterAnnotations(sdc)
2132+
maps.Copy(annotations, sdcAnnotations)
21012133

21022134
maps.Copy(labels, naming.ClusterLabels(sdc))
21032135

@@ -2116,3 +2148,19 @@ func MakeUpgradeContextConfigMap(sdc *scyllav1alpha1.ScyllaDBDatacenter, uc *int
21162148
},
21172149
}, nil
21182150
}
2151+
2152+
func getPropagableScyllaDBDatacenterLabels(sdc *scyllav1alpha1.ScyllaDBDatacenter) map[string]string {
2153+
sdcLabels := maps.Clone(sdc.Labels)
2154+
for _, k := range nonPropagatedLabelKeys {
2155+
delete(sdcLabels, k)
2156+
}
2157+
return sdcLabels
2158+
}
2159+
2160+
func getPropagableScyllaDBDatacenterAnnotations(sdc *scyllav1alpha1.ScyllaDBDatacenter) map[string]string {
2161+
sdcAnnotations := maps.Clone(sdc.Annotations)
2162+
for _, k := range nonPropagatedAnnotationKeys {
2163+
delete(sdcAnnotations, k)
2164+
}
2165+
return sdcAnnotations
2166+
}

pkg/controller/scylladbdatacenter/resource_test.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1688,6 +1688,30 @@ exec scylla-manager-agent \
16881688
}(),
16891689
expectedError: nil,
16901690
},
1691+
{
1692+
name: "non-propagated annotations are not propagated",
1693+
rack: newBasicRack(),
1694+
scyllaDBDatacenter: func() *scyllav1alpha1.ScyllaDBDatacenter {
1695+
sdc := newBasicScyllaDBDatacenter()
1696+
metav1.SetMetaDataLabel(&sdc.ObjectMeta, "scylla-operator.scylladb.com/register-with-global-scylladb-manager", "true")
1697+
return sdc
1698+
}(),
1699+
existingStatefulSet: nil,
1700+
expectedStatefulSet: newBasicStatefulSet(),
1701+
expectedError: nil,
1702+
},
1703+
{
1704+
name: "non-propagated labels are not propagated",
1705+
rack: newBasicRack(),
1706+
scyllaDBDatacenter: func() *scyllav1alpha1.ScyllaDBDatacenter {
1707+
sdc := newBasicScyllaDBDatacenter()
1708+
metav1.SetMetaDataAnnotation(&sdc.ObjectMeta, "internal.scylla-operator.scylladb.com/scylladb-manager-cluster-name-override", "scylla/scylla")
1709+
return sdc
1710+
}(),
1711+
existingStatefulSet: nil,
1712+
expectedStatefulSet: newBasicStatefulSet(),
1713+
expectedError: nil,
1714+
},
16911715
}
16921716

16931717
for _, tc := range tt {

0 commit comments

Comments
 (0)