Skip to content

Commit bd26522

Browse files
committed
feat: add emptyDir configuration for persistence volume
1 parent fb2a0c7 commit bd26522

File tree

6 files changed

+121
-3
lines changed

6 files changed

+121
-3
lines changed

api/v1beta1/rabbitmqcluster_types.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -412,6 +412,24 @@ type RabbitmqClusterPersistenceSpec struct {
412412
// See https://pkg.go.dev/k8s.io/apimachinery/pkg/api/resource#Quantity for more info on the format of this field.
413413
// +kubebuilder:default:="10Gi"
414414
Storage *k8sresource.Quantity `json:"storage,omitempty"`
415+
// EmptyDir configuration to be used when Storage is set to 0Gi.
416+
// +optional
417+
EmptyDir *RabbitmqClusterEmptyDirSpec `json:"emptyDir,omitempty"`
418+
}
419+
420+
// RabbitmqClusterEmptyDirSpec contains configuration for EmptyDir volumes.
421+
type RabbitmqClusterEmptyDirSpec struct {
422+
// Medium represents the storage medium for the EmptyDir volume.
423+
// The default is "" which means to use the node's default medium.
424+
// Must be an empty string (default) or Memory.
425+
// More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir
426+
// +optional
427+
Medium corev1.StorageMedium `json:"medium,omitempty"`
428+
// SizeLimit sets the size limit for EmptyDir volumes.
429+
// The format of this field matches that defined by kubernetes/apimachinery.
430+
// See https://pkg.go.dev/k8s.io/apimachinery/pkg/api/resource#Quantity for more info on the format of this field.
431+
// +optional
432+
SizeLimit *k8sresource.Quantity `json:"sizeLimit,omitempty"`
415433
}
416434

417435
// Settable attributes for the Service resource.

api/v1beta1/zz_generated.deepcopy.go

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

config/crd/bases/rabbitmq.com_rabbitmqclusters.yaml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5069,6 +5069,27 @@ spec:
50695069
storage: 10Gi
50705070
description: The desired persistent storage configuration for each Pod in the cluster.
50715071
properties:
5072+
emptyDir:
5073+
description: EmptyDir configuration to be used when Storage is set to 0Gi.
5074+
properties:
5075+
medium:
5076+
description: |-
5077+
Medium represents the storage medium for the EmptyDir volume.
5078+
The default is "" which means to use the node's default medium.
5079+
Must be an empty string (default) or Memory.
5080+
More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir
5081+
type: string
5082+
sizeLimit:
5083+
anyOf:
5084+
- type: integer
5085+
- type: string
5086+
description: |-
5087+
SizeLimit sets the size limit for EmptyDir volumes.
5088+
The format of this field matches that defined by kubernetes/apimachinery.
5089+
See https://pkg.go.dev/k8s.io/apimachinery/pkg/api/resource#Quantity for more info on the format of this field.
5090+
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
5091+
x-kubernetes-int-or-string: true
5092+
type: object
50725093
storage:
50735094
anyOf:
50745095
- type: integer

docs/api/rabbitmq.com.ref.asciidoc

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,29 @@ user.
227227
|===
228228

229229

230+
[id="{anchor_prefix}-github-com-rabbitmq-cluster-operator-v2-api-v1beta1-rabbitmqclusteremptydirspec"]
231+
==== RabbitmqClusterEmptyDirSpec
232+
233+
RabbitmqClusterEmptyDirSpec contains configuration for EmptyDir volumes.
234+
235+
.Appears In:
236+
****
237+
- xref:{anchor_prefix}-github-com-rabbitmq-cluster-operator-v2-api-v1beta1-rabbitmqclusterpersistencespec[$$RabbitmqClusterPersistenceSpec$$]
238+
****
239+
240+
[cols="25a,75a", options="header"]
241+
|===
242+
| Field | Description
243+
| *`medium`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#storagemedium-v1-core[$$StorageMedium$$]__ | Medium represents the storage medium for the EmptyDir volume.
244+
The default is "" which means to use the node's default medium.
245+
Must be an empty string (default) or Memory.
246+
More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir
247+
| *`sizeLimit`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#quantity-resource-api[$$Quantity$$]__ | SizeLimit sets the size limit for EmptyDir volumes.
248+
The format of this field matches that defined by kubernetes/apimachinery.
249+
See https://pkg.go.dev/k8s.io/apimachinery/pkg/api/resource#Quantity for more info on the format of this field.
250+
|===
251+
252+
230253
[id="{anchor_prefix}-github-com-rabbitmq-cluster-operator-v2-api-v1beta1-rabbitmqclusterlist"]
231254
==== RabbitmqClusterList
232255

@@ -289,6 +312,7 @@ The settings for the persistent storage desired for each Pod in the RabbitmqClus
289312
| *`storage`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#quantity-resource-api[$$Quantity$$]__ | The requested size of the persistent volume attached to each Pod in the RabbitmqCluster.
290313
The format of this field matches that defined by kubernetes/apimachinery.
291314
See https://pkg.go.dev/k8s.io/apimachinery/pkg/api/resource#Quantity for more info on the format of this field.
315+
| *`emptyDir`* __xref:{anchor_prefix}-github-com-rabbitmq-cluster-operator-v2-api-v1beta1-rabbitmqclusteremptydirspec[$$RabbitmqClusterEmptyDirSpec$$]__ | EmptyDir configuration to be used when Storage is set to 0Gi.
292316
|===
293317

294318

internal/resource/statefulset.go

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ import (
2020

2121
"k8s.io/apimachinery/pkg/util/intstr"
2222

23+
"maps"
24+
2325
rabbitmqv1beta1 "github.com/rabbitmq/cluster-operator/v2/api/v1beta1"
2426
"github.com/rabbitmq/cluster-operator/v2/internal/metadata"
2527
appsv1 "k8s.io/api/apps/v1"
@@ -29,7 +31,6 @@ import (
2931
"k8s.io/apimachinery/pkg/runtime"
3032
"k8s.io/apimachinery/pkg/util/strategicpatch"
3133
"k8s.io/utils/ptr"
32-
"maps"
3334
ctrl "sigs.k8s.io/controller-runtime"
3435
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
3536
)
@@ -456,12 +457,17 @@ func (builder *StatefulSetBuilder) podTemplateSpec(previousPodAnnotations map[st
456457

457458
zero := k8sresource.MustParse("0Gi")
458459
if builder.Instance.Spec.Persistence.Storage.Cmp(zero) == 0 {
459-
volumes = append(volumes, corev1.Volume{
460+
volume := corev1.Volume{
460461
Name: "persistence",
461462
VolumeSource: corev1.VolumeSource{
462463
EmptyDir: &corev1.EmptyDirVolumeSource{},
463464
},
464-
})
465+
}
466+
if builder.Instance.Spec.Persistence.EmptyDir != nil {
467+
volume.VolumeSource.EmptyDir.SizeLimit = builder.Instance.Spec.Persistence.EmptyDir.SizeLimit
468+
volume.VolumeSource.EmptyDir.Medium = builder.Instance.Spec.Persistence.EmptyDir.Medium
469+
}
470+
volumes = append(volumes, volume)
465471
}
466472

467473
rabbitmqContainerVolumeMounts := []corev1.VolumeMount{

internal/resource/statefulset_test.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1334,6 +1334,30 @@ default_pass = {{ .Data.data.password }}
13341334

13351335
Expect(statefulSet.Spec.Template.Spec.Volumes).To(ContainElement(expectedVolume))
13361336
})
1337+
1338+
It("defines an emptyDir volume with sizeLimit and medium when storage == 0 and emptyDir config received", func() {
1339+
zero, _ := k8sresource.ParseQuantity("0")
1340+
1341+
stsBuilder := builder.StatefulSet()
1342+
stsBuilder.Instance.Spec.Persistence.Storage = &zero
1343+
stsBuilder.Instance.Spec.Persistence.EmptyDir = &rabbitmqv1beta1.RabbitmqClusterEmptyDirSpec{
1344+
SizeLimit: ptr.To(k8sresource.MustParse("500Mi")),
1345+
Medium: corev1.StorageMediumMemory,
1346+
}
1347+
Expect(stsBuilder.Update(statefulSet)).To(Succeed())
1348+
1349+
expectedVolume := corev1.Volume{
1350+
Name: "persistence",
1351+
VolumeSource: corev1.VolumeSource{
1352+
EmptyDir: &corev1.EmptyDirVolumeSource{
1353+
SizeLimit: ptr.To(k8sresource.MustParse("500Mi")),
1354+
Medium: corev1.StorageMediumMemory,
1355+
},
1356+
},
1357+
}
1358+
1359+
Expect(statefulSet.Spec.Template.Spec.Volumes).To(ContainElement(expectedVolume))
1360+
})
13371361
})
13381362

13391363
It("uses the correct service account", func() {

0 commit comments

Comments
 (0)