Skip to content

Commit 0bf86f5

Browse files
authored
feat(crd): allow child resources to get additional labels and annotations (#363)
Signed-off-by: Soumya Ghosh Dastidar <[email protected]>
1 parent c5f30e6 commit 0bf86f5

File tree

5 files changed

+102
-14
lines changed

5 files changed

+102
-14
lines changed

api/v1alpha1/dragonfly_types.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,16 @@ type DragonflySpec struct {
169169
// +optional
170170
// +kubebuilder:validation:Optional
171171
InitContainers []corev1.Container `json:"initContainers,omitempty"`
172+
173+
// (Optional) Dragonfly direct child resources additional annotations and labels
174+
// +optional
175+
// +kubebuilder:validation:Optional
176+
OwnedObjectsMetadata *OwnedObjectsMetadata `json:"ownedObjectsMetadata,omitempty"`
177+
}
178+
179+
type OwnedObjectsMetadata struct {
180+
Annotations map[string]string `json:"annotations,omitempty"`
181+
Labels map[string]string `json:"labels,omitempty"`
172182
}
173183

174184
type ServiceSpec struct {

api/v1alpha1/zz_generated.deepcopy.go

Lines changed: 34 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

config/crd/bases/dragonflydb.io_dragonflies.yaml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6043,6 +6043,19 @@ spec:
60436043
type: string
60446044
description: (Optional) Dragonfly pod node selector
60456045
type: object
6046+
ownedObjectsMetadata:
6047+
description: (Optional) Dragonfly direct child resources additional
6048+
annotations and labels
6049+
properties:
6050+
annotations:
6051+
additionalProperties:
6052+
type: string
6053+
type: object
6054+
labels:
6055+
additionalProperties:
6056+
type: string
6057+
type: object
6058+
type: object
60466059
podSecurityContext:
60476060
description: (Optional) Dragonfly pod security context
60486061
properties:

e2e/dragonfly_controller_test.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,12 +60,22 @@ var _ = Describe("Dragonfly Lifecycle tests", Ordered, FlakeAttempts(3), func()
6060
"--vmodule=replica=1,server_family=1",
6161
}
6262

63+
customLabelName := "a.custom/label"
64+
customLabelValue := "my-value"
65+
66+
labels := map[string]string{
67+
customLabelName: customLabelValue,
68+
}
69+
6370
df := resourcesv1.Dragonfly{
6471
ObjectMeta: metav1.ObjectMeta{
6572
Name: name,
6673
Namespace: namespace,
6774
},
6875
Spec: resourcesv1.DragonflySpec{
76+
OwnedObjectsMetadata: &resourcesv1.OwnedObjectsMetadata{
77+
Labels: labels,
78+
},
6979
Replicas: 3,
7080
Resources: &resourcesReq,
7181
Args: args,
@@ -146,6 +156,10 @@ var _ = Describe("Dragonfly Lifecycle tests", Ordered, FlakeAttempts(3), func()
146156
}, &svc)
147157
Expect(err).To(BeNil())
148158

159+
// check labels of statefulset
160+
Expect(ss.Labels[customLabelName]).To(Equal(df.Spec.OwnedObjectsMetadata.Labels[customLabelName]))
161+
Expect(svc.Labels[customLabelName]).To(Equal(df.Spec.OwnedObjectsMetadata.Labels[customLabelName]))
162+
149163
// check resource requirements of statefulset
150164
Expect(ss.Spec.Template.Spec.Containers[0].Resources).To(Equal(*df.Spec.Resources))
151165
// check args of statefulset

internal/resources/resources.go

Lines changed: 31 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -56,15 +56,8 @@ func GenerateDragonflyResources(df *resourcesv1.Dragonfly) ([]client.Object, err
5656
UID: df.UID,
5757
},
5858
},
59-
Labels: map[string]string{
60-
KubernetesAppComponentLabelKey: KubernetesAppComponent,
61-
KubernetesAppInstanceLabelKey: df.Name,
62-
KubernetesAppNameLabelKey: KubernetesAppName,
63-
KubernetesAppVersionLabelKey: Version,
64-
KubernetesPartOfLabelKey: KubernetesPartOf,
65-
KubernetesManagedByLabelKey: DragonflyOperatorName,
66-
DragonflyNameLabelKey: df.Name,
67-
},
59+
Labels: generateResourceLabels(df),
60+
Annotations: generateResourceAnnotations(df),
6861
},
6962
Spec: appsv1.StatefulSetSpec{
7063
Replicas: &df.Spec.Replicas,
@@ -218,8 +211,9 @@ func GenerateDragonflyResources(df *resourcesv1.Dragonfly) ([]client.Object, err
218211
if df.Spec.Tiering.PersistentVolumeClaimSpec != nil {
219212
statefulset.Spec.VolumeClaimTemplates = append(statefulset.Spec.VolumeClaimTemplates, corev1.PersistentVolumeClaim{
220213
ObjectMeta: metav1.ObjectMeta{
221-
Name: tieringVolumeName,
222-
Labels: generateResourceLabels(df),
214+
Name: tieringVolumeName,
215+
Labels: generateResourceLabels(df),
216+
Annotations: generateResourceAnnotations(df),
223217
},
224218
Spec: *df.Spec.Tiering.PersistentVolumeClaimSpec,
225219
})
@@ -401,7 +395,8 @@ func GenerateDragonflyResources(df *resourcesv1.Dragonfly) ([]client.Object, err
401395
UID: df.UID,
402396
},
403397
},
404-
Labels: generateResourceLabels(df),
398+
Labels: generateResourceLabels(df),
399+
Annotations: generateResourceAnnotations(df),
405400
},
406401
Spec: corev1.ServiceSpec{
407402
Selector: map[string]string{
@@ -446,7 +441,8 @@ func GenerateDragonflyResources(df *resourcesv1.Dragonfly) ([]client.Object, err
446441
UID: df.UID,
447442
},
448443
},
449-
Labels: generateResourceLabels(df),
444+
Labels: generateResourceLabels(df),
445+
Annotations: generateResourceAnnotations(df),
450446
},
451447
Spec: policyv1.PodDisruptionBudgetSpec{
452448
MaxUnavailable: &intstr.IntOrString{
@@ -490,7 +486,7 @@ func mergeNamedSlices[T any](base, override []T, getName func(T) string) []T {
490486
}
491487

492488
func generateResourceLabels(df *resourcesv1.Dragonfly) map[string]string {
493-
return map[string]string{
489+
labels := map[string]string{
494490
KubernetesAppComponentLabelKey: KubernetesAppComponent,
495491
KubernetesAppInstanceLabelKey: df.Name,
496492
KubernetesAppNameLabelKey: KubernetesAppName,
@@ -499,4 +495,25 @@ func generateResourceLabels(df *resourcesv1.Dragonfly) map[string]string {
499495
KubernetesManagedByLabelKey: DragonflyOperatorName,
500496
DragonflyNameLabelKey: df.Name,
501497
}
498+
499+
if df.Spec.OwnedObjectsMetadata != nil {
500+
for key, value := range df.Spec.OwnedObjectsMetadata.Labels {
501+
if _, ok := labels[key]; !ok {
502+
labels[key] = value
503+
}
504+
}
505+
}
506+
507+
return labels
508+
}
509+
510+
func generateResourceAnnotations(df *resourcesv1.Dragonfly) map[string]string {
511+
annotations := map[string]string{}
512+
if df.Spec.OwnedObjectsMetadata != nil {
513+
for key, value := range df.Spec.OwnedObjectsMetadata.Annotations {
514+
annotations[key] = value
515+
}
516+
}
517+
518+
return annotations
502519
}

0 commit comments

Comments
 (0)