Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
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
}