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>
  • Loading branch information
travisn committed Jan 26, 2022
1 parent 287d9a3 commit f9ac966
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 f9ac966

Please sign in to comment.