Skip to content

Commit d35c068

Browse files
author
OpenShift CI Bot
committed
fix(cpo): initialize nil resource requests map before applying overrides
The applyRequestsOverrides function panics with "assignment to entry in nil map" when a resource-request-override annotation targets a container that has no existing Resources.Requests map. This adds a nil guard to initialize the map before calling maps.Copy, matching the pattern already used for Resources.Limits in applyNonOvercommitableResourceLimits. Signed-off-by: OpenShift CI Bot <ci-bot@redhat.com>
1 parent 488ef0e commit d35c068

2 files changed

Lines changed: 52 additions & 0 deletions

File tree

support/controlplane-component/defaults.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -426,12 +426,18 @@ func (c *controlPlaneWorkload[T]) applyRequestsOverrides(podTemplate *corev1.Pod
426426

427427
for i, c := range podTemplate.Spec.InitContainers {
428428
if res, ok := requestsOverrides[c.Name]; ok {
429+
if podTemplate.Spec.InitContainers[i].Resources.Requests == nil {
430+
podTemplate.Spec.InitContainers[i].Resources.Requests = corev1.ResourceList{}
431+
}
429432
maps.Copy(podTemplate.Spec.InitContainers[i].Resources.Requests, res)
430433
applyNonOvercommitableResourceLimits(&podTemplate.Spec.InitContainers[i], res)
431434
}
432435
}
433436
for i, c := range podTemplate.Spec.Containers {
434437
if res, ok := requestsOverrides[c.Name]; ok {
438+
if podTemplate.Spec.Containers[i].Resources.Requests == nil {
439+
podTemplate.Spec.Containers[i].Resources.Requests = corev1.ResourceList{}
440+
}
435441
maps.Copy(podTemplate.Spec.Containers[i].Resources.Requests, res)
436442
applyNonOvercommitableResourceLimits(&podTemplate.Spec.Containers[i], res)
437443
}

support/controlplane-component/defaults_test.go

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -408,6 +408,52 @@ func TestApplyRequestsOverrides(t *testing.T) {
408408
},
409409
},
410410
},
411+
{
412+
name: "When overriding a container with nil resource requests it should initialize the map and apply overrides",
413+
annotations: map[string]string{
414+
"resource-request-override.hypershift.openshift.io/router.router": "cpu=500m,memory=1Gi",
415+
},
416+
containers: []corev1.Container{
417+
{
418+
Name: "router",
419+
},
420+
},
421+
expectedContainers: []corev1.Container{
422+
{
423+
Name: "router",
424+
Resources: corev1.ResourceRequirements{
425+
Requests: corev1.ResourceList{
426+
corev1.ResourceCPU: resource.MustParse("500m"),
427+
corev1.ResourceMemory: resource.MustParse("1Gi"),
428+
},
429+
},
430+
},
431+
},
432+
},
433+
{
434+
name: "When overriding an init container with nil resource requests it should initialize the map and apply overrides",
435+
annotations: map[string]string{
436+
"resource-request-override.hypershift.openshift.io/router.wait-for-etcd": "aro.openshift.io/swift-nic=1",
437+
},
438+
initContainers: []corev1.Container{
439+
{
440+
Name: "wait-for-etcd",
441+
},
442+
},
443+
expectedInitContainers: []corev1.Container{
444+
{
445+
Name: "wait-for-etcd",
446+
Resources: corev1.ResourceRequirements{
447+
Requests: corev1.ResourceList{
448+
aroSwiftNICResource: resource.MustParse("1"),
449+
},
450+
Limits: corev1.ResourceList{
451+
aroSwiftNICResource: resource.MustParse("1"),
452+
},
453+
},
454+
},
455+
},
456+
},
411457
{
412458
name: "When annotation targets a different deployment it should not apply overrides",
413459
annotations: map[string]string{

0 commit comments

Comments
 (0)