Skip to content

Commit 8a6c77e

Browse files
authored
Merge pull request #819 from rabbitmq/pvc-storage-capacity
Apply pvc override in Update() rather than Build()
2 parents 793fde4 + d3e8cc2 commit 8a6c77e

File tree

2 files changed

+235
-201
lines changed

2 files changed

+235
-201
lines changed

internal/resource/statefulset.go

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -80,21 +80,6 @@ func (builder *StatefulSetBuilder) Build() (client.Object, error) {
8080
if overrideSts.Spec.ServiceName != "" {
8181
sts.Spec.ServiceName = overrideSts.Spec.ServiceName
8282
}
83-
84-
if len(overrideSts.Spec.VolumeClaimTemplates) != 0 {
85-
override := overrideSts.Spec.VolumeClaimTemplates
86-
pvcList := make([]corev1.PersistentVolumeClaim, len(override))
87-
for i := range override {
88-
copyObjectMeta(&pvcList[i].ObjectMeta, override[i].EmbeddedObjectMeta)
89-
pvcList[i].Namespace = sts.Namespace // PVC should always be in the same namespace as the Stateful Set
90-
pvcList[i].Spec = override[i].Spec
91-
if err := controllerutil.SetControllerReference(builder.Instance, &pvcList[i], builder.Scheme); err != nil {
92-
return nil, fmt.Errorf("failed setting controller reference: %v", err)
93-
}
94-
disableBlockOwnerDeletion(pvcList[i])
95-
}
96-
sts.Spec.VolumeClaimTemplates = pvcList
97-
}
9883
}
9984

10085
return sts, nil
@@ -137,7 +122,7 @@ func (builder *StatefulSetBuilder) Update(object client.Object) error {
137122
}
138123

139124
if builder.Instance.Spec.Override.StatefulSet != nil {
140-
if err := applyStsOverride(sts, builder.Instance.Spec.Override.StatefulSet); err != nil {
125+
if err := applyStsOverride(builder.Instance, builder.Scheme, sts, builder.Instance.Spec.Override.StatefulSet); err != nil {
141126
return fmt.Errorf("failed applying StatefulSet override: %v", err)
142127
}
143128
}
@@ -156,7 +141,7 @@ func updatePersistenceStorageCapacity(templates *[]corev1.PersistentVolumeClaim,
156141
}
157142
}
158143

159-
func applyStsOverride(sts *appsv1.StatefulSet, stsOverride *rabbitmqv1beta1.StatefulSet) error {
144+
func applyStsOverride(instance *rabbitmqv1beta1.RabbitmqCluster, scheme *runtime.Scheme, sts *appsv1.StatefulSet, stsOverride *rabbitmqv1beta1.StatefulSet) error {
160145
if stsOverride.EmbeddedLabelsAnnotations != nil {
161146
copyLabelsAnnotations(&sts.ObjectMeta, *stsOverride.EmbeddedLabelsAnnotations)
162147
}
@@ -174,6 +159,21 @@ func applyStsOverride(sts *appsv1.StatefulSet, stsOverride *rabbitmqv1beta1.Stat
174159
sts.Spec.PodManagementPolicy = stsOverride.Spec.PodManagementPolicy
175160
}
176161

162+
if len(stsOverride.Spec.VolumeClaimTemplates) != 0 {
163+
volumeClaimTemplatesOverride := stsOverride.Spec.VolumeClaimTemplates
164+
pvcOverride := make([]corev1.PersistentVolumeClaim, len(volumeClaimTemplatesOverride))
165+
for i := range volumeClaimTemplatesOverride {
166+
copyObjectMeta(&pvcOverride[i].ObjectMeta, volumeClaimTemplatesOverride[i].EmbeddedObjectMeta)
167+
pvcOverride[i].Namespace = sts.Namespace // PVC should always be in the same namespace as the Stateful Set
168+
pvcOverride[i].Spec = volumeClaimTemplatesOverride[i].Spec
169+
if err := controllerutil.SetControllerReference(instance, &pvcOverride[i], scheme); err != nil {
170+
return fmt.Errorf("failed setting controller reference: %v", err)
171+
}
172+
disableBlockOwnerDeletion(pvcOverride[i])
173+
}
174+
sts.Spec.VolumeClaimTemplates = pvcOverride
175+
}
176+
177177
if stsOverride.Spec.Template == nil {
178178
return nil
179179
}
@@ -187,6 +187,7 @@ func applyStsOverride(sts *appsv1.StatefulSet, stsOverride *rabbitmqv1beta1.Stat
187187
}
188188
sts.Spec.Template.Spec = patchedPodSpec
189189
}
190+
190191
return nil
191192
}
192193

0 commit comments

Comments
 (0)