From a7ebf09cbe18787ae7c05e4cce03a7d8dceda1d0 Mon Sep 17 00:00:00 2001 From: Evan Lezar Date: Tue, 13 Jan 2026 21:56:09 +0100 Subject: [PATCH 1/2] Add test for missing toolkit container Signed-off-by: Evan Lezar --- controllers/transforms_test.go | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/controllers/transforms_test.go b/controllers/transforms_test.go index 986308a16..cf4496310 100644 --- a/controllers/transforms_test.go +++ b/controllers/transforms_test.go @@ -17,6 +17,7 @@ package controllers import ( + "errors" "path/filepath" "testing" @@ -777,11 +778,12 @@ func TestApplyCommonDaemonsetMetadata(t *testing.T) { func TestTransformToolkit(t *testing.T) { testCases := []struct { - description string - ds Daemonset // Input DaemonSet - cpSpec *gpuv1.ClusterPolicySpec // Input configuration - runtime gpuv1.Runtime - expectedDs Daemonset // Expected output DaemonSet + description string + ds Daemonset // Input DaemonSet + cpSpec *gpuv1.ClusterPolicySpec // Input configuration + runtime gpuv1.Runtime + expectedError error + expectedDs Daemonset // Expected output DaemonSet }{ { description: "transform nvidia-container-toolkit-ctr container", @@ -1002,6 +1004,12 @@ func TestTransformToolkit(t *testing.T) { WithHostPathVolume("crio-config", "/etc/crio", ptr.To(corev1.HostPathDirectoryOrCreate)). WithHostPathVolume("crio-drop-in-config", "/etc/crio/crio.conf.d", ptr.To(corev1.HostPathDirectoryOrCreate)), }, + { + description: "no nvidia-container-toolkit-ctr container", + ds: NewDaemonset(), + expectedError: errors.New(`failed to find toolkit container "nvidia-container-toolkit-ctr"`), + expectedDs: NewDaemonset(), + }, } for _, tc := range testCases { @@ -1012,7 +1020,7 @@ func TestTransformToolkit(t *testing.T) { } err := TransformToolkit(tc.ds.DaemonSet, tc.cpSpec, controller) - require.NoError(t, err) + require.EqualValues(t, tc.expectedError, err) require.EqualValues(t, tc.expectedDs, tc.ds) }) } From 11d1c5e96ce1dbbdc2fc8d816142ac6fe7c721be Mon Sep 17 00:00:00 2001 From: Evan Lezar Date: Tue, 13 Jan 2026 21:10:32 +0100 Subject: [PATCH 2/2] Add a check for NO_RUNTIME_CONFIG=true to disable runtime config in the nvidia-container-toolkit Signed-off-by: Evan Lezar --- controllers/object_controls.go | 27 +++++++++++++++++++++------ controllers/transforms_test.go | 30 ++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 6 deletions(-) diff --git a/controllers/object_controls.go b/controllers/object_controls.go index fe7e9df4b..68de45ca5 100644 --- a/controllers/object_controls.go +++ b/controllers/object_controls.go @@ -1366,14 +1366,29 @@ func TransformToolkit(obj *appsv1.DaemonSet, config *gpuv1.ClusterPolicySpec, n } } - if len(config.Toolkit.Env) > 0 { - for _, env := range config.Toolkit.Env { - setContainerEnv(toolkitMainContainer, env.Name, env.Value) - } - } - // configure runtime runtime := n.runtime.String() + var noRuntimeConfig bool + // Update the main container environment from the user-specified values. + for _, env := range config.Toolkit.Env { + switch env.Name { + case "RUNTIME": + // If the user has specified the runtime, we overide the detected + // value. + // TODO: Add logging. + runtime = env.Value + case "NO_RUNTIME_CONFIG": + noRuntimeConfig = func() bool { + v, _ := strconv.ParseBool(env.Value) + return v + }() + } + setContainerEnv(toolkitMainContainer, env.Name, env.Value) + } + + if noRuntimeConfig { + return nil + } err = transformForRuntime(obj, config, runtime, toolkitMainContainer) if err != nil { return fmt.Errorf("error transforming toolkit daemonset : %w", err) diff --git a/controllers/transforms_test.go b/controllers/transforms_test.go index cf4496310..ed368ff91 100644 --- a/controllers/transforms_test.go +++ b/controllers/transforms_test.go @@ -1010,6 +1010,36 @@ func TestTransformToolkit(t *testing.T) { expectedError: errors.New(`failed to find toolkit container "nvidia-container-toolkit-ctr"`), expectedDs: NewDaemonset(), }, + { + description: "transform nvidia-container-toolkit-ctr container with no-runtime-config", + ds: NewDaemonset(). + WithContainer(corev1.Container{Name: "nvidia-container-toolkit-ctr"}), + runtime: gpuv1.Containerd, + cpSpec: &gpuv1.ClusterPolicySpec{ + Toolkit: gpuv1.ToolkitSpec{ + Repository: "nvcr.io/nvidia/cloud-native", + Image: "nvidia-container-toolkit", + Version: "v1.0.0", + Env: []gpuv1.EnvVar{ + {Name: "NO_RUNTIME_CONFIG", Value: "true"}, + }, + }, + }, + expectedDs: NewDaemonset(). + WithContainer(corev1.Container{ + Name: "nvidia-container-toolkit-ctr", + Image: "nvcr.io/nvidia/cloud-native/nvidia-container-toolkit:v1.0.0", + ImagePullPolicy: corev1.PullIfNotPresent, + Env: []corev1.EnvVar{ + {Name: "CDI_ENABLED", Value: "true"}, + {Name: "NVIDIA_RUNTIME_SET_AS_DEFAULT", Value: "false"}, + {Name: "NVIDIA_CONTAINER_RUNTIME_MODE", Value: "cdi"}, + {Name: "CRIO_CONFIG_MODE", Value: "config"}, + {Name: "NO_RUNTIME_CONFIG", Value: "true"}, + }, + VolumeMounts: nil, + }), + }, } for _, tc := range testCases {