@@ -3207,17 +3207,27 @@ func TestTransformDriver(t *testing.T) {
32073207 client : mockClientMap ["secret-env-client" ],
32083208 expectedDs : NewDaemonset ().WithContainer (corev1.Container {
32093209 Name : "nvidia-driver-ctr" ,
3210- Image : "nvcr.io/nvidia/driver:570.172.08-" ,
3210+ Image : "nvcr.io/nvidia/driver:570.172.08-ubuntu20.04 " ,
32113211 ImagePullPolicy : corev1 .PullIfNotPresent ,
32123212 Env : []corev1.EnvVar {
32133213 {
32143214 Name : "FABRIC_MANAGER_FABRIC_MODE" ,
32153215 Value : "1" ,
32163216 },
3217+ {
3218+ Name : "DRIVER_CONFIG_DIGEST" ,
3219+ Value : "2205091877" ,
3220+ },
32173221 },
32183222 }).WithInitContainer (corev1.Container {
32193223 Name : "k8s-driver-manager" ,
32203224 Image : "nvcr.io/nvidia/cloud-native/k8s-driver-manager:v0.8.0" ,
3225+ Env : []corev1.EnvVar {
3226+ {
3227+ Name : "DRIVER_CONFIG_DIGEST" ,
3228+ Value : "2205091877" ,
3229+ },
3230+ },
32213231 }),
32223232 errorExpected : false ,
32233233 },
@@ -3243,17 +3253,27 @@ func TestTransformDriver(t *testing.T) {
32433253 client : mockClientMap ["secret-env-client" ],
32443254 expectedDs : NewDaemonset ().WithContainer (corev1.Container {
32453255 Name : "nvidia-driver-ctr" ,
3246- Image : "nvcr.io/nvidia/driver:570.172.08-" ,
3256+ Image : "nvcr.io/nvidia/driver:570.172.08-ubuntu20.04 " ,
32473257 ImagePullPolicy : corev1 .PullIfNotPresent ,
32483258 Env : []corev1.EnvVar {
32493259 {
32503260 Name : "FABRIC_MANAGER_FABRIC_MODE" ,
32513261 Value : "0" ,
32523262 },
3263+ {
3264+ Name : "DRIVER_CONFIG_DIGEST" ,
3265+ Value : "240528038" ,
3266+ },
32533267 },
32543268 }).WithInitContainer (corev1.Container {
32553269 Name : "k8s-driver-manager" ,
32563270 Image : "nvcr.io/nvidia/cloud-native/k8s-driver-manager:v0.8.0" ,
3271+ Env : []corev1.EnvVar {
3272+ {
3273+ Name : "DRIVER_CONFIG_DIGEST" ,
3274+ Value : "240528038" ,
3275+ },
3276+ },
32573277 }),
32583278 errorExpected : false ,
32593279 },
@@ -4721,3 +4741,109 @@ func TestHashDriverInstallConfigZeroFieldInvariant(t *testing.T) {
47214741 assert .NotEqual (t , originalDigest , changedDigest ,
47224742 "a non-zero new field should change the digest" )
47234743}
4744+
4745+ func TestTransformSandboxDevicePlugin (t * testing.T ) {
4746+ initMockK8sClients ()
4747+ testCases := []struct {
4748+ description string
4749+ ds Daemonset
4750+ cpSpec * gpuv1.ClusterPolicySpec
4751+ expectedDs Daemonset
4752+ errorExpected bool
4753+ }{
4754+ {
4755+ description : "sandbox device plugin with fabric manager shared-nvswitch mode" ,
4756+ ds : NewDaemonset ().WithContainer (corev1.Container {Name : "nvidia-sandbox-device-plugin-ctr" }).
4757+ WithInitContainer (corev1.Container {Name : "toolkit-validation" }),
4758+ cpSpec : & gpuv1.ClusterPolicySpec {
4759+ SandboxDevicePlugin : gpuv1.SandboxDevicePluginSpec {
4760+ Repository : "nvcr.io/nvidia" ,
4761+ Image : "kubevirt-device-plugin" ,
4762+ Version : "v1.2.0" ,
4763+ },
4764+ FabricManager : gpuv1.FabricManagerSpec {
4765+ Mode : gpuv1 .FabricModeSharedNVSwitch ,
4766+ },
4767+ Validator : gpuv1.ValidatorSpec {
4768+ Repository : "nvcr.io/nvidia/cloud-native" ,
4769+ Image : "gpu-operator-validator" ,
4770+ Version : "v1.0.0" ,
4771+ },
4772+ },
4773+ expectedDs : NewDaemonset ().WithContainer (corev1.Container {
4774+ Name : "nvidia-sandbox-device-plugin-ctr" ,
4775+ Image : "nvcr.io/nvidia/kubevirt-device-plugin:v1.2.0" ,
4776+ ImagePullPolicy : corev1 .PullIfNotPresent ,
4777+ Env : []corev1.EnvVar {
4778+ {
4779+ Name : "ENABLE_FABRIC_MANAGER" ,
4780+ Value : "true" ,
4781+ },
4782+ },
4783+ VolumeMounts : []corev1.VolumeMount {
4784+ {
4785+ Name : "run-nvidia-fabricmanager" ,
4786+ MountPath : "/run/nvidia-fabricmanager" ,
4787+ },
4788+ },
4789+ }).WithInitContainer (corev1.Container {
4790+ Name : "toolkit-validation" ,
4791+ Image : "nvcr.io/nvidia/cloud-native/gpu-operator-validator:v1.0.0" ,
4792+ SecurityContext : & corev1.SecurityContext {
4793+ RunAsUser : rootUID ,
4794+ },
4795+ }).WithVolume (corev1.Volume {
4796+ Name : "run-nvidia-fabricmanager" ,
4797+ VolumeSource : corev1.VolumeSource {
4798+ HostPath : & corev1.HostPathVolumeSource {
4799+ Path : "/run/nvidia-fabricmanager" ,
4800+ Type : ptr .To (corev1 .HostPathDirectoryOrCreate ),
4801+ },
4802+ },
4803+ }),
4804+ errorExpected : false ,
4805+ },
4806+ {
4807+ description : "sandbox device plugin without fabric manager shared-nvswitch mode" ,
4808+ ds : NewDaemonset ().WithContainer (corev1.Container {Name : "nvidia-sandbox-device-plugin-ctr" }).
4809+ WithInitContainer (corev1.Container {Name : "toolkit-validation" }),
4810+ cpSpec : & gpuv1.ClusterPolicySpec {
4811+ SandboxDevicePlugin : gpuv1.SandboxDevicePluginSpec {
4812+ Repository : "nvcr.io/nvidia" ,
4813+ Image : "kubevirt-device-plugin" ,
4814+ Version : "v1.2.0" ,
4815+ },
4816+ Validator : gpuv1.ValidatorSpec {
4817+ Repository : "nvcr.io/nvidia/cloud-native" ,
4818+ Image : "gpu-operator-validator" ,
4819+ Version : "v1.0.0" ,
4820+ },
4821+ },
4822+ expectedDs : NewDaemonset ().WithContainer (corev1.Container {
4823+ Name : "nvidia-sandbox-device-plugin-ctr" ,
4824+ Image : "nvcr.io/nvidia/kubevirt-device-plugin:v1.2.0" ,
4825+ ImagePullPolicy : corev1 .PullIfNotPresent ,
4826+ }).WithInitContainer (corev1.Container {
4827+ Name : "toolkit-validation" ,
4828+ Image : "nvcr.io/nvidia/cloud-native/gpu-operator-validator:v1.0.0" ,
4829+ SecurityContext : & corev1.SecurityContext {
4830+ RunAsUser : rootUID ,
4831+ },
4832+ }),
4833+ errorExpected : false ,
4834+ },
4835+ }
4836+
4837+ for _ , tc := range testCases {
4838+ t .Run (tc .description , func (t * testing.T ) {
4839+ err := TransformSandboxDevicePlugin (tc .ds .DaemonSet , tc .cpSpec ,
4840+ ClusterPolicyController {operatorNamespace : "test-ns" , logger : ctrl .Log .WithName ("test" )})
4841+ if tc .errorExpected {
4842+ require .Error (t , err )
4843+ return
4844+ }
4845+ require .NoError (t , err )
4846+ require .EqualValues (t , tc .expectedDs , tc .ds )
4847+ })
4848+ }
4849+ }
0 commit comments