Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 10 additions & 2 deletions controllers/object_controls.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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])

Expand Down
46 changes: 46 additions & 0 deletions controllers/transforms_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Loading