@@ -326,6 +326,7 @@ func TestTransformForRuntime(t *testing.T) {
326326 WithContainer (corev1.Container {Name : "test-ctr" }),
327327 expectedOutput : NewDaemonset ().
328328 WithHostPathVolume ("containerd-config" , filepath .Dir (DefaultContainerdConfigFile ), newHostPathType (corev1 .HostPathDirectoryOrCreate )).
329+ WithHostPathVolume ("containerd-drop-in-config" , "/run/nvidia/toolkit/config" , newHostPathType (corev1 .HostPathDirectoryOrCreate )).
329330 WithHostPathVolume ("containerd-socket" , filepath .Dir (DefaultContainerdSocketFile ), nil ).
330331 WithContainer (corev1.Container {
331332 Name : "test-ctr" ,
@@ -334,11 +335,14 @@ func TestTransformForRuntime(t *testing.T) {
334335 {Name : "CONTAINERD_RUNTIME_CLASS" , Value : DefaultRuntimeClass },
335336 {Name : "RUNTIME_CONFIG" , Value : filepath .Join (DefaultRuntimeConfigTargetDir , filepath .Base (DefaultContainerdConfigFile ))},
336337 {Name : "CONTAINERD_CONFIG" , Value : filepath .Join (DefaultRuntimeConfigTargetDir , filepath .Base (DefaultContainerdConfigFile ))},
338+ {Name : "RUNTIME_DROP_IN_CONFIG" , Value : "/runtime/config-dir.d/99-nvidia.toml" },
339+ {Name : "RUNTIME_DROP_IN_CONFIG_HOST_PATH" , Value : "/run/nvidia/toolkit/config/99-nvidia.toml" },
337340 {Name : "RUNTIME_SOCKET" , Value : filepath .Join (DefaultRuntimeSocketTargetDir , filepath .Base (DefaultContainerdSocketFile ))},
338341 {Name : "CONTAINERD_SOCKET" , Value : filepath .Join (DefaultRuntimeSocketTargetDir , filepath .Base (DefaultContainerdSocketFile ))},
339342 },
340343 VolumeMounts : []corev1.VolumeMount {
341344 {Name : "containerd-config" , MountPath : DefaultRuntimeConfigTargetDir },
345+ {Name : "containerd-drop-in-config" , MountPath : "/runtime/config-dir.d/" },
342346 {Name : "containerd-socket" , MountPath : DefaultRuntimeSocketTargetDir },
343347 },
344348 }),
@@ -348,16 +352,20 @@ func TestTransformForRuntime(t *testing.T) {
348352 runtime : gpuv1 .CRIO ,
349353 input : NewDaemonset ().WithContainer (corev1.Container {Name : "test-ctr" }),
350354 expectedOutput : NewDaemonset ().
351- WithHostPathVolume ("crio-config" , filepath .Dir (DefaultCRIOConfigFile ), newHostPathType (corev1 .HostPathDirectoryOrCreate )).
355+ WithHostPathVolume ("crio-config" , "/etc/crio" , newHostPathType (corev1 .HostPathDirectoryOrCreate )).
356+ WithHostPathVolume ("crio-drop-in-config" , "/etc/crio/crio.conf.d" , newHostPathType (corev1 .HostPathDirectoryOrCreate )).
352357 WithContainer (corev1.Container {
353358 Name : "test-ctr" ,
354359 Env : []corev1.EnvVar {
355360 {Name : "RUNTIME" , Value : gpuv1 .CRIO .String ()},
356- {Name : "RUNTIME_CONFIG" , Value : filepath .Join (DefaultRuntimeConfigTargetDir , filepath .Base (DefaultCRIOConfigFile ))},
357- {Name : "CRIO_CONFIG" , Value : filepath .Join (DefaultRuntimeConfigTargetDir , filepath .Base (DefaultCRIOConfigFile ))},
361+ {Name : "RUNTIME_CONFIG" , Value : "/runtime/config-dir/config.toml" },
362+ {Name : "CRIO_CONFIG" , Value : "/runtime/config-dir/config.toml" },
363+ {Name : "RUNTIME_DROP_IN_CONFIG" , Value : "/runtime/config-dir.d/99-nvidia.conf" },
364+ {Name : "RUNTIME_DROP_IN_CONFIG_HOST_PATH" , Value : "/etc/crio/crio.conf.d/99-nvidia.conf" },
358365 },
359366 VolumeMounts : []corev1.VolumeMount {
360367 {Name : "crio-config" , MountPath : DefaultRuntimeConfigTargetDir },
368+ {Name : "crio-drop-in-config" , MountPath : "/runtime/config-dir.d/" },
361369 },
362370 }),
363371 },
@@ -647,15 +655,19 @@ func TestTransformToolkit(t *testing.T) {
647655 {Name : "CONTAINERD_RUNTIME_CLASS" , Value : "nvidia" },
648656 {Name : "RUNTIME_CONFIG" , Value : "/runtime/config-dir/config.toml" },
649657 {Name : "CONTAINERD_CONFIG" , Value : "/runtime/config-dir/config.toml" },
658+ {Name : "RUNTIME_DROP_IN_CONFIG" , Value : "/runtime/config-dir.d/99-nvidia.toml" },
659+ {Name : "RUNTIME_DROP_IN_CONFIG_HOST_PATH" , Value : "/run/nvidia/toolkit/config/99-nvidia.toml" },
650660 {Name : "RUNTIME_SOCKET" , Value : "/runtime/sock-dir/containerd.sock" },
651661 {Name : "CONTAINERD_SOCKET" , Value : "/runtime/sock-dir/containerd.sock" },
652662 },
653663 VolumeMounts : []corev1.VolumeMount {
654664 {Name : "containerd-config" , MountPath : "/runtime/config-dir/" },
665+ {Name : "containerd-drop-in-config" , MountPath : "/runtime/config-dir.d/" },
655666 {Name : "containerd-socket" , MountPath : "/runtime/sock-dir/" },
656667 },
657668 }).
658669 WithHostPathVolume ("containerd-config" , "/etc/containerd" , newHostPathType (corev1 .HostPathDirectoryOrCreate )).
670+ WithHostPathVolume ("containerd-drop-in-config" , "/run/nvidia/toolkit/config" , newHostPathType (corev1 .HostPathDirectoryOrCreate )).
659671 WithHostPathVolume ("containerd-socket" , "/run/containerd" , nil ).
660672 WithPullSecret ("pull-secret" ),
661673 },
@@ -718,14 +730,18 @@ func TestTransformToolkit(t *testing.T) {
718730 {Name : "CONTAINERD_SET_AS_DEFAULT" , Value : "true" },
719731 {Name : "RUNTIME" , Value : "containerd" },
720732 {Name : "RUNTIME_CONFIG" , Value : "/runtime/config-dir/config.toml" },
733+ {Name : "RUNTIME_DROP_IN_CONFIG" , Value : "/runtime/config-dir.d/99-nvidia.toml" },
734+ {Name : "RUNTIME_DROP_IN_CONFIG_HOST_PATH" , Value : "/run/nvidia/toolkit/config/99-nvidia.toml" },
721735 {Name : "RUNTIME_SOCKET" , Value : "/runtime/sock-dir/containerd.sock" },
722736 },
723737 VolumeMounts : []corev1.VolumeMount {
724738 {Name : "containerd-config" , MountPath : "/runtime/config-dir/" },
739+ {Name : "containerd-drop-in-config" , MountPath : "/runtime/config-dir.d/" },
725740 {Name : "containerd-socket" , MountPath : "/runtime/sock-dir/" },
726741 },
727742 }).
728743 WithHostPathVolume ("containerd-config" , "/var/lib/rancher/k3s/agent/etc/containerd" , newHostPathType (corev1 .HostPathDirectoryOrCreate )).
744+ WithHostPathVolume ("containerd-drop-in-config" , "/run/nvidia/toolkit/config" , newHostPathType (corev1 .HostPathDirectoryOrCreate )).
729745 WithHostPathVolume ("containerd-socket" , "/run/k3s/containerd" , nil ).
730746 WithPullSecret ("pull-secret" ),
731747 },
@@ -1821,3 +1837,108 @@ func TestTransformDriver(t *testing.T) {
18211837 })
18221838 }
18231839}
1840+
1841+ func TestGetRuntimeConfigFiles (t * testing.T ) {
1842+ testCases := []struct {
1843+ description string
1844+ container corev1.Container
1845+ runtime string
1846+ expectedRuntimeConfigFiles runtimeConfigFiles
1847+ errorExpected bool
1848+ }{
1849+ {
1850+ description : "invalid runtime" ,
1851+ container : corev1.Container {},
1852+ runtime : "foo" ,
1853+ expectedRuntimeConfigFiles : runtimeConfigFiles {},
1854+ errorExpected : true ,
1855+ },
1856+ {
1857+ description : "docker" ,
1858+ container : corev1.Container {},
1859+ runtime : gpuv1 .Docker .String (),
1860+ expectedRuntimeConfigFiles : runtimeConfigFiles {
1861+ topLevelConfigFile : DefaultDockerConfigFile ,
1862+ dropInConfigFile : "" ,
1863+ envvarName : "DOCKER_CONFIG" ,
1864+ },
1865+ },
1866+ {
1867+ description : "docker, config path overridden" ,
1868+ container : corev1.Container {
1869+ Env : []corev1.EnvVar {
1870+ {Name : "DOCKER_CONFIG" , Value : "/path/to/docker/daemon.json" },
1871+ },
1872+ },
1873+ runtime : gpuv1 .Docker .String (),
1874+ expectedRuntimeConfigFiles : runtimeConfigFiles {
1875+ topLevelConfigFile : "/path/to/docker/daemon.json" ,
1876+ dropInConfigFile : "" ,
1877+ envvarName : "DOCKER_CONFIG" ,
1878+ },
1879+ },
1880+ {
1881+ description : "containerd" ,
1882+ container : corev1.Container {},
1883+ runtime : gpuv1 .Containerd .String (),
1884+ expectedRuntimeConfigFiles : runtimeConfigFiles {
1885+ topLevelConfigFile : DefaultContainerdConfigFile ,
1886+ dropInConfigFile : DefaultContainerdDropInConfigFile ,
1887+ envvarName : "CONTAINERD_CONFIG" ,
1888+ },
1889+ },
1890+ {
1891+ description : "containerd, config path overridden" ,
1892+ container : corev1.Container {
1893+ Env : []corev1.EnvVar {
1894+ {Name : "CONTAINERD_CONFIG" , Value : "/path/to/containerd/config.toml" },
1895+ {Name : "RUNTIME_DROP_IN_CONFIG" , Value : "/path/to/containerd/drop-in/config.toml" },
1896+ },
1897+ },
1898+ runtime : gpuv1 .Containerd .String (),
1899+ expectedRuntimeConfigFiles : runtimeConfigFiles {
1900+ topLevelConfigFile : "/path/to/containerd/config.toml" ,
1901+ dropInConfigFile : "/path/to/containerd/drop-in/config.toml" ,
1902+ envvarName : "CONTAINERD_CONFIG" ,
1903+ },
1904+ },
1905+ {
1906+ description : "crio" ,
1907+ container : corev1.Container {},
1908+ runtime : gpuv1 .CRIO .String (),
1909+ expectedRuntimeConfigFiles : runtimeConfigFiles {
1910+ topLevelConfigFile : DefaultCRIOConfigFile ,
1911+ dropInConfigFile : DefaultCRIODropInConfigFile ,
1912+ envvarName : "CRIO_CONFIG" ,
1913+ },
1914+ },
1915+ {
1916+ description : "crio, config path overridden" ,
1917+ container : corev1.Container {
1918+ Env : []corev1.EnvVar {
1919+ {Name : "CRIO_CONFIG" , Value : "/path/to/crio/config.toml" },
1920+ {Name : "RUNTIME_DROP_IN_CONFIG" , Value : "/path/to/crio/drop-in/config.toml" },
1921+ },
1922+ },
1923+ runtime : gpuv1 .CRIO .String (),
1924+ expectedRuntimeConfigFiles : runtimeConfigFiles {
1925+ topLevelConfigFile : "/path/to/crio/config.toml" ,
1926+ dropInConfigFile : "/path/to/crio/drop-in/config.toml" ,
1927+ envvarName : "CRIO_CONFIG" ,
1928+ },
1929+ },
1930+ }
1931+
1932+ for _ , tc := range testCases {
1933+ t .Run (tc .description , func (t * testing.T ) {
1934+ runtimeConfigFiles , err := getRuntimeConfigFiles (& tc .container , tc .runtime )
1935+ if tc .errorExpected {
1936+ require .Error (t , err )
1937+ return
1938+ }
1939+ require .NoError (t , err )
1940+ require .EqualValues (t , tc .expectedRuntimeConfigFiles , runtimeConfigFiles )
1941+ })
1942+ }
1943+
1944+ }
0 commit comments