Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions api/v1alpha1/dragonfly_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,11 @@ type DragonflySpec struct {
// +optional
// +kubebuilder:validation:Optional
InitContainers []corev1.Container `json:"initContainers,omitempty"`

// (Optional) Inherit labels and annotations from Dragonfly CR to Dragonfly direct child resources like STS, Services, PDB etc.
// +optional
// +kubebuilder:validation:Optional
InheritMetadata bool `json:"inheritMetadata,omitempty"`
}

type ServiceSpec struct {
Expand Down
4 changes: 4 additions & 0 deletions config/crd/bases/dragonflydb.io_dragonflies.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4606,6 +4606,10 @@ spec:
type: object
x-kubernetes-map-type: atomic
type: array
inheritMetadata:
description: (Optional) Inherit labels and annotations from Dragonfly
CR to Dragonfly direct child resources like STS, Services, PDB etc.
type: boolean
initContainers:
description: (Optional) Dragonfly pod init containers
items:
Expand Down
13 changes: 13 additions & 0 deletions e2e/dragonfly_controller_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -60,10 +60,18 @@ var _ = Describe("Dragonfly Lifecycle tests", Ordered, FlakeAttempts(3), func()
"--vmodule=replica=1,server_family=1",
}

customLabelName := "a.custom/label"
customLabelValue := "my-value"

labels := map[string]string{
customLabelName: customLabelValue,
}

df := resourcesv1.Dragonfly{
ObjectMeta: metav1.ObjectMeta{
Name: name,
Namespace: namespace,
Labels: labels,
},
Spec: resourcesv1.DragonflySpec{
Replicas: 3,
Expand Down Expand Up @@ -101,6 +109,7 @@ var _ = Describe("Dragonfly Lifecycle tests", Ordered, FlakeAttempts(3), func()
},
},
},
InheritMetadata: true,
},
}

Expand Down Expand Up @@ -146,6 +155,10 @@ var _ = Describe("Dragonfly Lifecycle tests", Ordered, FlakeAttempts(3), func()
}, &svc)
Expect(err).To(BeNil())

// check labels of statefulset
Expect(ss.Labels[customLabelName]).To(Equal(df.Labels[customLabelName]))
Expect(svc.Labels[customLabelName]).To(Equal(df.Labels[customLabelName]))

// check resource requirements of statefulset
Expect(ss.Spec.Template.Spec.Containers[0].Resources).To(Equal(*df.Spec.Resources))
// check args of statefulset
Expand Down
44 changes: 30 additions & 14 deletions internal/resources/resources.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,15 +56,8 @@ func GenerateDragonflyResources(df *resourcesv1.Dragonfly) ([]client.Object, err
UID: df.UID,
},
},
Labels: map[string]string{
KubernetesAppComponentLabelKey: KubernetesAppComponent,
KubernetesAppInstanceLabelKey: df.Name,
KubernetesAppNameLabelKey: KubernetesAppName,
KubernetesAppVersionLabelKey: Version,
KubernetesPartOfLabelKey: KubernetesPartOf,
KubernetesManagedByLabelKey: DragonflyOperatorName,
DragonflyNameLabelKey: df.Name,
},
Labels: generateResourceLabels(df),
Annotations: generateResourceAnnotations(df),
},
Spec: appsv1.StatefulSetSpec{
Replicas: &df.Spec.Replicas,
Expand Down Expand Up @@ -218,8 +211,9 @@ func GenerateDragonflyResources(df *resourcesv1.Dragonfly) ([]client.Object, err
if df.Spec.Tiering.PersistentVolumeClaimSpec != nil {
statefulset.Spec.VolumeClaimTemplates = append(statefulset.Spec.VolumeClaimTemplates, corev1.PersistentVolumeClaim{
ObjectMeta: metav1.ObjectMeta{
Name: tieringVolumeName,
Labels: generateResourceLabels(df),
Name: tieringVolumeName,
Labels: generateResourceLabels(df),
Annotations: generateResourceAnnotations(df),
},
Spec: *df.Spec.Tiering.PersistentVolumeClaimSpec,
})
Expand Down Expand Up @@ -401,7 +395,8 @@ func GenerateDragonflyResources(df *resourcesv1.Dragonfly) ([]client.Object, err
UID: df.UID,
},
},
Labels: generateResourceLabels(df),
Labels: generateResourceLabels(df),
Annotations: generateResourceAnnotations(df),
},
Spec: corev1.ServiceSpec{
Selector: map[string]string{
Expand Down Expand Up @@ -446,7 +441,8 @@ func GenerateDragonflyResources(df *resourcesv1.Dragonfly) ([]client.Object, err
UID: df.UID,
},
},
Labels: generateResourceLabels(df),
Labels: generateResourceLabels(df),
Annotations: generateResourceAnnotations(df),
},
Spec: policyv1.PodDisruptionBudgetSpec{
MaxUnavailable: &intstr.IntOrString{
Expand Down Expand Up @@ -490,7 +486,7 @@ func mergeNamedSlices[T any](base, override []T, getName func(T) string) []T {
}

func generateResourceLabels(df *resourcesv1.Dragonfly) map[string]string {
return map[string]string{
labels := map[string]string{
KubernetesAppComponentLabelKey: KubernetesAppComponent,
KubernetesAppInstanceLabelKey: df.Name,
KubernetesAppNameLabelKey: KubernetesAppName,
Expand All @@ -499,4 +495,24 @@ func generateResourceLabels(df *resourcesv1.Dragonfly) map[string]string {
KubernetesManagedByLabelKey: DragonflyOperatorName,
DragonflyNameLabelKey: df.Name,
}

if df.Spec.InheritMetadata {
for key, value := range df.Labels {
labels[key] = value
}
}

return labels
}

func generateResourceAnnotations(df *resourcesv1.Dragonfly) map[string]string {
annotations := map[string]string{}

if df.Spec.InheritMetadata {
for key, value := range df.Annotations {
annotations[key] = value
}
}

return annotations
}