Skip to content

Commit 7d3398f

Browse files
authored
Merge pull request #1237 from rabbitmq/pvc-retention-policy-override
Add StatefulSet.Spec.PersistentVolumeClaimRetentionPolicy Override.
2 parents 40a7c8e + 14bfb73 commit 7d3398f

File tree

6 files changed

+38
-0
lines changed

6 files changed

+38
-0
lines changed

api/v1beta1/rabbitmqcluster_types.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,11 @@ type StatefulSetSpec struct {
252252
// is ready).
253253
// +optional
254254
MinReadySeconds int32 `json:"minReadySeconds,omitempty" protobuf:"varint,4,opt,name=minReadySeconds"`
255+
256+
// StatefulSetPersistentVolumeClaimRetentionPolicy describes the policy used for PVCs
257+
// created from the StatefulSet VolumeClaimTemplates.
258+
// +optional
259+
PersistentVolumeClaimRetentionPolicy *appsv1.StatefulSetPersistentVolumeClaimRetentionPolicy `json:"persistenVolumeClaimRetentionPolicy,omitempty" protobuf:"bytes,10,opt,name=persistentVolumeClaimRetentionPolicy"`
255260
}
256261

257262
// EmbeddedLabelsAnnotations is an embedded subset of the fields included in k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta.

api/v1beta1/zz_generated.deepcopy.go

Lines changed: 5 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: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -668,6 +668,13 @@ spec:
668668
minReadySeconds:
669669
format: int32
670670
type: integer
671+
persistenVolumeClaimRetentionPolicy:
672+
properties:
673+
whenDeleted:
674+
type: string
675+
whenScaled:
676+
type: string
677+
type: object
671678
podManagementPolicy:
672679
type: string
673680
replicas:

docs/api/rabbitmq.com.ref.asciidoc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -411,6 +411,7 @@ StatefulSetSpec contains a subset of the fields included in k8s.io/api/apps/v1.S
411411
| *`podManagementPolicy`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podmanagementpolicytype-v1-apps[$$PodManagementPolicyType$$]__ | podManagementPolicy controls how pods are created during initial scale up, when replacing pods on nodes, or when scaling down. The default policy is `OrderedReady`, where pods are created in increasing order (pod-0, then pod-1, etc) and the controller will wait until each pod is ready before continuing. When scaling down, the pods are removed in the opposite order. The alternative policy is `Parallel` which will create pods in parallel to match the desired scale without waiting, and on scale down will delete all pods at once.
412412
| *`updateStrategy`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#statefulsetupdatestrategy-v1-apps[$$StatefulSetUpdateStrategy$$]__ | updateStrategy indicates the StatefulSetUpdateStrategy that will be employed to update Pods in the StatefulSet when a revision is made to Template.
413413
| *`minReadySeconds`* __integer__ | The minimum number of seconds for which a newly created StatefulSet pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready).
414+
| *`persistenVolumeClaimRetentionPolicy`* __link:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#statefulsetpersistentvolumeclaimretentionpolicy-v1-apps[$$StatefulSetPersistentVolumeClaimRetentionPolicy$$]__ | StatefulSetPersistentVolumeClaimRetentionPolicy describes the policy used for PVCs created from the StatefulSet VolumeClaimTemplates.
414415
|===
415416

416417

internal/resource/statefulset.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,10 @@ func applyStsOverride(instance *rabbitmqv1beta1.RabbitmqCluster, scheme *runtime
191191
}
192192
}
193193

194+
if stsOverride.Spec.PersistentVolumeClaimRetentionPolicy != nil {
195+
sts.Spec.PersistentVolumeClaimRetentionPolicy = stsOverride.Spec.PersistentVolumeClaimRetentionPolicy
196+
}
197+
194198
if stsOverride.Spec.Template == nil {
195199
return nil
196200
}

internal/resource/statefulset_test.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1669,6 +1669,22 @@ default_pass = {{ .Data.data.password }}
16691669
Expect(*statefulSet.Spec.UpdateStrategy.RollingUpdate.Partition).To(Equal(int32(1)))
16701670
})
16711671

1672+
It("overrides statefulSet.spec.persistentVolumeClaimRetentionPolicy", func() {
1673+
instance.Spec.Override.StatefulSet = &rabbitmqv1beta1.StatefulSet{
1674+
Spec: &rabbitmqv1beta1.StatefulSetSpec{
1675+
PersistentVolumeClaimRetentionPolicy: &appsv1.StatefulSetPersistentVolumeClaimRetentionPolicy{
1676+
WhenDeleted: "Retain",
1677+
WhenScaled: "Delete",
1678+
},
1679+
},
1680+
}
1681+
1682+
stsBuilder := builder.StatefulSet()
1683+
Expect(stsBuilder.Update(statefulSet)).To(Succeed())
1684+
Expect(string(statefulSet.Spec.PersistentVolumeClaimRetentionPolicy.WhenScaled)).To(Equal("Delete"))
1685+
Expect(string(statefulSet.Spec.PersistentVolumeClaimRetentionPolicy.WhenDeleted)).To(Equal("Retain"))
1686+
})
1687+
16721688
It("overrides the PVC list", func() {
16731689
storageClass := "my-storage-class"
16741690
builder.Instance.Spec.Override.StatefulSet = &rabbitmqv1beta1.StatefulSet{

0 commit comments

Comments
 (0)