Skip to content

Commit

Permalink
osd: merge all osd resources including custom
Browse files Browse the repository at this point in the history
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 <tnielsen@redhat.com>
(cherry picked from commit f9ac966)
  • Loading branch information
travisn authored and mergify-bot committed Jan 27, 2022
1 parent 560231a commit 83f627a
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 33 deletions.
37 changes: 8 additions & 29 deletions pkg/operator/k8sutil/resources.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
9 changes: 5 additions & 4 deletions pkg/operator/k8sutil/resources_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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{
Expand Down

0 comments on commit 83f627a

Please sign in to comment.