From 98cfccd256b8bfc313a7d8ec3f6de70088386ba0 Mon Sep 17 00:00:00 2001 From: Shivkumar Ople Date: Wed, 17 Jun 2026 23:05:27 +0530 Subject: [PATCH] Apply validator resources to init containers Signed-off-by: Shivkumar Ople --- controllers/object_controls.go | 12 +++++++-- controllers/transforms_test.go | 46 ++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+), 2 deletions(-) diff --git a/controllers/object_controls.go b/controllers/object_controls.go index 299da2a45..7b90e221c 100644 --- a/controllers/object_controls.go +++ b/controllers/object_controls.go @@ -2356,6 +2356,14 @@ func transformValidatorSecurityContext(ctr *corev1.Container) { ctr.SecurityContext.RunAsUser = rootUID } +func applyResourceRequirements(ctr *corev1.Container, resources *gpuv1.ResourceRequirements) { + if resources == nil { + return + } + ctr.Resources.Requests = resources.Requests + ctr.Resources.Limits = resources.Limits +} + // TransformValidator transforms nvidia-operator-validator daemonset with required config as per ClusterPolicy func TransformValidator(obj *appsv1.DaemonSet, config *gpuv1.ClusterPolicySpec, n ClusterPolicyController) error { err := TransformValidatorShared(obj, config) @@ -2447,8 +2455,7 @@ func TransformValidatorShared(obj *appsv1.DaemonSet, config *gpuv1.ClusterPolicy if config.Validator.Resources != nil { // apply resource limits to all containers for i := range obj.Spec.Template.Spec.Containers { - obj.Spec.Template.Spec.Containers[i].Resources.Requests = config.Validator.Resources.Requests - obj.Spec.Template.Spec.Containers[i].Resources.Limits = config.Validator.Resources.Limits + applyResourceRequirements(&obj.Spec.Template.Spec.Containers[i], config.Validator.Resources) } } // set arguments if specified for validator container @@ -2484,6 +2491,7 @@ func TransformValidatorComponent(config *gpuv1.ClusterPolicySpec, podSpec *corev if config.Validator.ImagePullPolicy != "" { podSpec.InitContainers[i].ImagePullPolicy = gpuv1.ImagePullPolicy(config.Validator.ImagePullPolicy) } + applyResourceRequirements(&podSpec.InitContainers[i], config.Validator.Resources) // update the security context for the validator container transformValidatorSecurityContext(&podSpec.InitContainers[i]) diff --git a/controllers/transforms_test.go b/controllers/transforms_test.go index 11b7e98b7..ae27a494f 100644 --- a/controllers/transforms_test.go +++ b/controllers/transforms_test.go @@ -2853,6 +2853,52 @@ func TestTransformValidatorComponent(t *testing.T) { } } +func TestTransformValidatorComponentWithResources(t *testing.T) { + resources := corev1.ResourceRequirements{ + Limits: corev1.ResourceList{ + corev1.ResourceCPU: resource.MustParse("500m"), + corev1.ResourceMemory: resource.MustParse("200Mi"), + }, + Requests: corev1.ResourceList{ + corev1.ResourceCPU: resource.MustParse("500m"), + corev1.ResourceMemory: resource.MustParse("200Mi"), + }, + } + + cpSpec := &gpuv1.ClusterPolicySpec{ + Validator: gpuv1.ValidatorSpec{ + Repository: "nvcr.io/nvidia/cloud-native", + Image: "gpu-operator-validator", + Version: "v1.0.0", + ImagePullPolicy: "IfNotPresent", + Resources: &gpuv1.ResourceRequirements{ + Limits: resources.Limits, + Requests: resources.Requests, + }, + }, + } + + testCases := []struct { + component string + containerName string + }{ + {component: "driver", containerName: "driver-validation"}, + {component: "toolkit", containerName: "toolkit-validation"}, + {component: "cuda", containerName: "cuda-validation"}, + {component: "plugin", containerName: "plugin-validation"}, + } + + for _, tc := range testCases { + t.Run(tc.containerName, func(t *testing.T) { + pod := NewPod().WithInitContainer(corev1.Container{Name: tc.containerName}) + err := TransformValidatorComponent(cpSpec, &pod.Spec, tc.component) + require.NoError(t, err) + require.Len(t, pod.Spec.InitContainers, 1) + require.EqualValues(t, resources, pod.Spec.InitContainers[0].Resources) + }) + } +} + func TestTransformValidator(t *testing.T) { testCases := []struct { description string