From 83f627a2e3465dc487bec92d04021d82a3567e07 Mon Sep 17 00:00:00 2001 From: Travis Nielsen Date: Wed, 26 Jan 2022 10:46:43 -0700 Subject: [PATCH] osd: merge all osd resources including custom The merging of OSD resource limits and requests assumed that only the cpu and memory resources needed to be merged. It is also possible to set custom resource properties such as intel.com/sriov_net_in: '1' for use with multus, so the merging needs to be more general. Signed-off-by: Travis Nielsen (cherry picked from commit f9ac96604806e0796de40b49e343a086dc0fc976) --- pkg/operator/k8sutil/resources.go | 37 ++++++-------------------- pkg/operator/k8sutil/resources_test.go | 9 ++++--- 2 files changed, 13 insertions(+), 33 deletions(-) diff --git a/pkg/operator/k8sutil/resources.go b/pkg/operator/k8sutil/resources.go index 800f87a6c720..c8a01005c796 100644 --- a/pkg/operator/k8sutil/resources.go +++ b/pkg/operator/k8sutil/resources.go @@ -148,37 +148,16 @@ func (info *OwnerInfo) GetUID() types.UID { } func MergeResourceRequirements(first, second v1.ResourceRequirements) v1.ResourceRequirements { - // if the first has a value not set check if second has and set it in first - if _, ok := first.Limits[v1.ResourceCPU]; !ok { - if _, ok = second.Limits[v1.ResourceCPU]; ok { - if first.Limits == nil { - first.Limits = v1.ResourceList{} - } - first.Limits[v1.ResourceCPU] = second.Limits[v1.ResourceCPU] + // if the first has no limits set, apply the second limits if any are specified + if len(first.Limits) == 0 { + if len(second.Limits) > 0 { + first.Limits = second.Limits } } - if _, ok := first.Limits[v1.ResourceMemory]; !ok { - if _, ok = second.Limits[v1.ResourceMemory]; ok { - if first.Limits == nil { - first.Limits = v1.ResourceList{} - } - first.Limits[v1.ResourceMemory] = second.Limits[v1.ResourceMemory] - } - } - if _, ok := first.Requests[v1.ResourceCPU]; !ok { - if _, ok = second.Requests[v1.ResourceCPU]; ok { - if first.Requests == nil { - first.Requests = v1.ResourceList{} - } - first.Requests[v1.ResourceCPU] = second.Requests[v1.ResourceCPU] - } - } - if _, ok := first.Requests[v1.ResourceMemory]; !ok { - if _, ok = second.Requests[v1.ResourceMemory]; ok { - if first.Requests == nil { - first.Requests = v1.ResourceList{} - } - first.Requests[v1.ResourceMemory] = second.Requests[v1.ResourceMemory] + // if the first has no requests set, apply the second requests if any are specified + if len(first.Requests) == 0 { + if len(second.Requests) > 0 { + first.Requests = second.Requests } } return first diff --git a/pkg/operator/k8sutil/resources_test.go b/pkg/operator/k8sutil/resources_test.go index fc47c4fed186..5eaba5fd0987 100644 --- a/pkg/operator/k8sutil/resources_test.go +++ b/pkg/operator/k8sutil/resources_test.go @@ -37,17 +37,18 @@ func TestMergeResourceRequirements(t *testing.T) { first = v1.ResourceRequirements{} second = v1.ResourceRequirements{ Limits: v1.ResourceList{ - v1.ResourceCPU: *resource.NewQuantity(100.0, resource.BinarySI), + v1.ResourceCPU: *resource.NewQuantity(100.0, resource.BinarySI), + v1.ResourceStorage: *resource.NewQuantity(50.0, resource.BinarySI), }, Requests: v1.ResourceList{ - v1.ResourceMemory: *resource.NewQuantity(1337.0, resource.BinarySI), + v1.ResourceName("foo"): *resource.NewQuantity(23.0, resource.BinarySI), }, } result = MergeResourceRequirements(first, second) - assert.Equal(t, 1, len(result.Limits)) + assert.Equal(t, 2, len(result.Limits)) assert.Equal(t, 1, len(result.Requests)) assert.Equal(t, "100", result.Limits.Cpu().String()) - assert.Equal(t, "1337", result.Requests.Memory().String()) + assert.Equal(t, "50", result.Limits.Storage().String()) first = v1.ResourceRequirements{ Limits: v1.ResourceList{