Skip to content

Commit

Permalink
Patch existing guest memory on all occasions
Browse files Browse the repository at this point in the history
Signed-off-by: Weihang Lo <weihang.lo@suse.com>
  • Loading branch information
weihanglo authored and guangbochen committed Dec 7, 2021
1 parent ee09e0c commit 655c251
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 1 deletion.
3 changes: 2 additions & 1 deletion pkg/webhook/resources/virtualmachine/mutator.go
Original file line number Diff line number Diff line change
Expand Up @@ -116,10 +116,11 @@ func (m *vmMutator) patchResourceOvercommit(vm *kubevirtv1.VirtualMachine) ([]st
}
// Reserve 100MiB (104857600 Bytes) for QEMU on guest memory
// Ref: https://github.com/harvester/harvester/issues/1234
// TODO: handle hugepage memory
guestMemory := resource.NewQuantity(mem.Value()-104857600, mem.Format)
if vm.Spec.Template.Spec.Domain.Memory == nil {
patchOps = append(patchOps, fmt.Sprintf(`{"op": "replace", "path": "/spec/template/spec/domain/memory", "value": {"guest":"%s"}}`, guestMemory))
} else if vm.Spec.Template.Spec.Domain.Memory.Guest == nil {
} else {
patchOps = append(patchOps, fmt.Sprintf(`{"op": "replace", "path": "/spec/template/spec/domain/memory/guest", "value": "%s"}`, guestMemory))
}
}
Expand Down
23 changes: 23 additions & 0 deletions pkg/webhook/resources/virtualmachine/mutator_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ func Test_virtualmachine_mutator(t *testing.T) {
tests := []struct {
name string
resourceReq kubevirtv1.ResourceRequirements
memory *kubevirtv1.Memory
patchOps []string
setting string
}{
Expand All @@ -38,6 +39,7 @@ func Test_virtualmachine_mutator(t *testing.T) {
v1.ResourceCPU: *resource.NewMilliQuantity(1000, resource.DecimalSI),
},
},
memory: nil,
patchOps: []string{
`{"op": "replace", "path": "/spec/template/spec/domain/resources/requests/memory", "value": "256Mi"}`,
`{"op": "replace", "path": "/spec/template/spec/domain/memory", "value": {"guest":"924Mi"}}`, // 1Gi - 100Mi
Expand All @@ -54,6 +56,7 @@ func Test_virtualmachine_mutator(t *testing.T) {
v1.ResourceMemory: *resource.NewQuantity(int64(math.Pow(2, 30)), resource.BinarySI), // 1Gi
},
},
memory: nil,
patchOps: []string{
`{"op": "replace", "path": "/spec/template/spec/domain/resources/requests/cpu", "value": "500m"}`,
},
Expand All @@ -67,6 +70,7 @@ func Test_virtualmachine_mutator(t *testing.T) {
v1.ResourceMemory: *resource.NewQuantity(int64(math.Pow(2, 30)), resource.BinarySI), // 1Gi
},
},
memory: nil,
patchOps: []string{
`{"op": "replace", "path": "/spec/template/spec/domain/memory", "value": {"guest":"924Mi"}}`, // 1Gi - 100Mi
`{"op": "replace", "path": "/spec/template/spec/domain/resources/requests", "value": {"cpu":"500m","memory":"256Mi"}}`,
Expand All @@ -80,12 +84,30 @@ func Test_virtualmachine_mutator(t *testing.T) {
v1.ResourceMemory: *resource.NewQuantity(int64(math.Pow(2, 30)), resource.BinarySI), // 1Gi
},
},
memory: nil,
patchOps: []string{
`{"op": "replace", "path": "/spec/template/spec/domain/memory", "value": {"guest":"924Mi"}}`, // 1Gi - 100Mi
`{"op": "replace", "path": "/spec/template/spec/domain/resources/requests", "value": {"cpu":"100m","memory":"102Mi"}}`,
},
setting: `{"cpu":1000,"memory":1000,"storage":800}`,
},
{
name: "replace old guest memory",
resourceReq: kubevirtv1.ResourceRequirements{
Limits: map[v1.ResourceName]resource.Quantity{
v1.ResourceCPU: *resource.NewMilliQuantity(1000, resource.DecimalSI),
v1.ResourceMemory: *resource.NewQuantity(int64(math.Pow(2, 30)), resource.BinarySI), // 1Gi
},
},
memory: &kubevirtv1.Memory{
Guest: resource.NewQuantity(int64(math.Pow(2, 40)), resource.BinarySI), // 1Ti
},
patchOps: []string{
`{"op": "replace", "path": "/spec/template/spec/domain/memory/guest", "value": "924Mi"}`, // 1Gi - 100Mi
`{"op": "replace", "path": "/spec/template/spec/domain/resources/requests", "value": {"cpu":"100m","memory":"102Mi"}}`,
},
setting: `{"cpu":1000,"memory":1000,"storage":800}`,
},
}

setting := &harvesterv1.Setting{
Expand Down Expand Up @@ -113,6 +135,7 @@ func Test_virtualmachine_mutator(t *testing.T) {
Spec: kubevirtv1.VirtualMachineInstanceSpec{
Domain: kubevirtv1.DomainSpec{
Resources: tc.resourceReq,
Memory: tc.memory,
},
},
},
Expand Down

0 comments on commit 655c251

Please sign in to comment.