Skip to content

Commit dcc4089

Browse files
committed
fix allocatable calculation in poollets
1 parent 9f928e1 commit dcc4089

4 files changed

Lines changed: 64 additions & 6 deletions

File tree

poollet/machinepoollet/controllers/machinepool_controller.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@ func (r *MachinePoolReconciler) calculateCapacity(
121121
}
122122

123123
usedResources := corev1alpha1.ResourceList{}
124+
newQuantity := resource.MustParse("1")
124125
for _, machine := range machines {
125126
className := machine.Spec.MachineClassRef.Name
126127
res, ok := usedResources[corev1alpha1.ClassCountFor(corev1alpha1.ClassTypeMachineClass, className)]
@@ -129,7 +130,8 @@ func (r *MachinePoolReconciler) calculateCapacity(
129130
continue
130131
}
131132

132-
res.Add(resource.MustParse("1"))
133+
res.Add(newQuantity)
134+
usedResources[corev1alpha1.ClassCountFor(corev1alpha1.ClassTypeMachineClass, className)] = res
133135
}
134136

135137
return capacity, quota.SubtractWithNonNegativeResult(capacity, usedResources), supported, nil

poollet/machinepoollet/controllers/machinepool_controller_test.go

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,35 @@ var _ = Describe("MachinePoolController", func() {
107107
})),
108108
))
109109

110-
By("creating a second machine")
110+
By("creating a second machine of same class")
111+
machine_sameclass := &computev1alpha1.Machine{
112+
ObjectMeta: metav1.ObjectMeta{
113+
GenerateName: "test-machine-sameclass",
114+
Namespace: ns.Name,
115+
},
116+
Spec: computev1alpha1.MachineSpec{
117+
MachineClassRef: corev1.LocalObjectReference{
118+
Name: machineClass2.Name,
119+
},
120+
MachinePoolRef: &corev1.LocalObjectReference{
121+
Name: machinePool.Name,
122+
},
123+
},
124+
}
125+
Expect(k8sClient.Create(ctx, machine_sameclass)).To(Succeed(), "failed to create machine")
126+
DeferCleanup(k8sClient.Delete, machine_sameclass)
127+
128+
By("checking if the allocatable resources are correct")
129+
Eventually(Object(machinePool)).Should(SatisfyAll(
130+
HaveField("Status.Allocatable", Satisfy(func(allocatable corev1alpha1.ResourceList) bool {
131+
return quota.Contains(allocatable, corev1alpha1.ResourceList{
132+
corev1alpha1.ClassCountFor(corev1alpha1.ClassTypeMachineClass, machineClass.Name): *resource.NewQuantity(machineClassCapacity, resource.DecimalSI),
133+
corev1alpha1.ClassCountFor(corev1alpha1.ClassTypeMachineClass, machineClass2.Name): *resource.NewQuantity(machineClass2Capacity-2, resource.DecimalSI),
134+
})
135+
})),
136+
))
137+
138+
By("creating a machine with second machineclass")
111139
machine2 := &computev1alpha1.Machine{
112140
ObjectMeta: metav1.ObjectMeta{
113141
GenerateName: "test-machine",
@@ -130,7 +158,7 @@ var _ = Describe("MachinePoolController", func() {
130158
HaveField("Status.Allocatable", Satisfy(func(allocatable corev1alpha1.ResourceList) bool {
131159
return quota.Contains(allocatable, corev1alpha1.ResourceList{
132160
corev1alpha1.ClassCountFor(corev1alpha1.ClassTypeMachineClass, machineClass.Name): *resource.NewQuantity(machineClassCapacity-1, resource.DecimalSI),
133-
corev1alpha1.ClassCountFor(corev1alpha1.ClassTypeMachineClass, machineClass2.Name): *resource.NewQuantity(machineClass2Capacity-1, resource.DecimalSI),
161+
corev1alpha1.ClassCountFor(corev1alpha1.ClassTypeMachineClass, machineClass2.Name): *resource.NewQuantity(machineClass2Capacity-2, resource.DecimalSI),
134162
})
135163
})),
136164
))

poollet/volumepoollet/controllers/volumepool_controller.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ func (r *VolumePoolReconciler) calculateCapacity(
110110
}
111111

112112
res.Add(*volume.Spec.Resources.Storage())
113+
usedResources[corev1alpha1.ClassCountFor(corev1alpha1.ClassTypeVolumeClass, className)] = res
113114
}
114115

115116
return capacity, quota.SubtractWithNonNegativeResult(capacity, usedResources), supported, nil

poollet/volumepoollet/controllers/volumepool_controller_test.go

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,7 @@ var _ = Describe("VolumePoolController", func() {
247247
VolumeClassRef: &corev1.LocalObjectReference{Name: volumeClass.Name},
248248
VolumePoolRef: &corev1.LocalObjectReference{Name: volumePool.Name},
249249
Resources: corev1alpha1.ResourceList{
250-
corev1alpha1.ResourceStorage: resource.MustParse("10Gi"),
250+
corev1alpha1.ResourceStorage: resource.MustParse("5Gi"),
251251
},
252252
},
253253
}
@@ -258,7 +258,34 @@ var _ = Describe("VolumePoolController", func() {
258258
Eventually(Object(volumePool)).Should(SatisfyAll(
259259
HaveField("Status.Allocatable", Satisfy(func(allocatable corev1alpha1.ResourceList) bool {
260260
return quota.Equals(allocatable, corev1alpha1.ResourceList{
261-
corev1alpha1.ClassCountFor(corev1alpha1.ClassTypeVolumeClass, volumeClass.Name): resource.MustParse("2Gi"),
261+
corev1alpha1.ClassCountFor(corev1alpha1.ClassTypeVolumeClass, volumeClass.Name): resource.MustParse("7Gi"),
262+
corev1alpha1.ClassCountFor(corev1alpha1.ClassTypeVolumeClass, expandableVolumeClass.Name): expandableVolumeClassCapacity,
263+
})
264+
})),
265+
))
266+
267+
By("creating second volume of same class")
268+
volumeSameClass := &storagev1alpha1.Volume{
269+
ObjectMeta: metav1.ObjectMeta{
270+
Namespace: ns.Name,
271+
GenerateName: "volume-same-class-",
272+
},
273+
Spec: storagev1alpha1.VolumeSpec{
274+
VolumeClassRef: &corev1.LocalObjectReference{Name: volumeClass.Name},
275+
VolumePoolRef: &corev1.LocalObjectReference{Name: volumePool.Name},
276+
Resources: corev1alpha1.ResourceList{
277+
corev1alpha1.ResourceStorage: resource.MustParse("2Gi"),
278+
},
279+
},
280+
}
281+
Expect(k8sClient.Create(ctx, volumeSameClass)).To(Succeed(), "failed to create volume")
282+
DeferCleanup(expectVolumeDeleted, volumeSameClass)
283+
284+
By("checking if the allocatable resources are correct")
285+
Eventually(Object(volumePool)).Should(SatisfyAll(
286+
HaveField("Status.Allocatable", Satisfy(func(allocatable corev1alpha1.ResourceList) bool {
287+
return quota.Equals(allocatable, corev1alpha1.ResourceList{
288+
corev1alpha1.ClassCountFor(corev1alpha1.ClassTypeVolumeClass, volumeClass.Name): resource.MustParse("5Gi"),
262289
corev1alpha1.ClassCountFor(corev1alpha1.ClassTypeVolumeClass, expandableVolumeClass.Name): expandableVolumeClassCapacity,
263290
})
264291
})),
@@ -285,7 +312,7 @@ var _ = Describe("VolumePoolController", func() {
285312
Eventually(Object(volumePool)).Should(SatisfyAll(
286313
HaveField("Status.Allocatable", Satisfy(func(allocatable corev1alpha1.ResourceList) bool {
287314
return quota.Equals(allocatable, corev1alpha1.ResourceList{
288-
corev1alpha1.ClassCountFor(corev1alpha1.ClassTypeVolumeClass, volumeClass.Name): resource.MustParse("2Gi"),
315+
corev1alpha1.ClassCountFor(corev1alpha1.ClassTypeVolumeClass, volumeClass.Name): resource.MustParse("5Gi"),
289316
corev1alpha1.ClassCountFor(corev1alpha1.ClassTypeVolumeClass, expandableVolumeClass.Name): resource.MustParse("40Gi"),
290317
})
291318
})),

0 commit comments

Comments
 (0)