Skip to content

Commit

Permalink
Fix a panic in GetContainersResources()
Browse files Browse the repository at this point in the history
The panic occurs when VPA is set to control only the resource Requests
(rather than the default of both Requests and Limits).
  • Loading branch information
rsgowman committed Feb 5, 2025
1 parent 6324acb commit 1e96217
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,13 @@ func GetContainersResources(pod *core.Pod, vpaResourcePolicy *vpa_types.PodResou
// If the recommendation only contains CPU or Memory (if the VPA was configured this way), we need to make sure we "backfill" the other.
// Only do this when the addAll flag is true.
if addAll {
if resources[i].Requests == nil {
resources[i].Requests = core.ResourceList{}
}
if resources[i].Limits == nil {
resources[i].Limits = core.ResourceList{}
}

cpuRequest, hasCpuRequest := container.Resources.Requests[core.ResourceCPU]
if _, ok := resources[i].Requests[core.ResourceCPU]; !ok && hasCpuRequest {
resources[i].Requests[core.ResourceCPU] = cpuRequest
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -423,6 +423,20 @@ func TestGetContainersResources(t *testing.T) {
expectedCPULimit: mustParseResourcePointer("20"),
addAll: true,
},
{
name: "CPU only recommendation, only CPU request and limit set, ContainerControlledValuesRequestOnly",
container: test.Container().WithName("container").
WithCPURequest(resource.MustParse("1")).
WithCPULimit(resource.MustParse("10")).
Get(),
vpa: test.VerticalPodAutoscaler().WithContainer("container").
WithControlledValues("container", vpa_types.ContainerControlledValuesRequestsOnly).
WithTargetResource(apiv1.ResourceCPU, "2").
Get(),
expectedCPU: mustParseResourcePointer("2"),
expectedCPULimit: mustParseResourcePointer("10"),
addAll: true,
},
{
name: "Memory only recommendation, request and limits set",
container: test.Container().WithName("container").WithCPURequest(resource.MustParse("1")).WithMemRequest(resource.MustParse("1M")).WithCPULimit(resource.MustParse("10")).WithMemLimit(resource.MustParse("10M")).Get(),
Expand Down Expand Up @@ -456,6 +470,20 @@ func TestGetContainersResources(t *testing.T) {
expectedMemLimit: mustParseResourcePointer("20M"),
addAll: true,
},
{
name: "Memory only recommendation, only memory request and limit set, ContainerControlledValuesRequestOnly",
container: test.Container().WithName("container").
WithMemRequest(resource.MustParse("1M")).
WithMemLimit(resource.MustParse("10M")).
Get(),
vpa: test.VerticalPodAutoscaler().WithContainer("container").
WithControlledValues("container", vpa_types.ContainerControlledValuesRequestsOnly).
WithTargetResource(apiv1.ResourceMemory, "2M").
Get(),
expectedMem: mustParseResourcePointer("2M"),
expectedMemLimit: mustParseResourcePointer("10M"),
addAll: true,
},
{
name: "CPU and Memory recommendation, request and limits set, addAll false",
container: test.Container().WithName("container").WithCPURequest(resource.MustParse("1")).WithMemRequest(resource.MustParse("1M")).WithCPULimit(resource.MustParse("10")).WithMemLimit(resource.MustParse("10M")).Get(),
Expand Down

0 comments on commit 1e96217

Please sign in to comment.