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
22 changes: 22 additions & 0 deletions controllers/object_controls.go
Original file line number Diff line number Diff line change
Expand Up @@ -3553,6 +3553,28 @@ func transformDriverContainer(obj *appsv1.DaemonSet, config *gpuv1.ClusterPolicy
}
}

// Mount /lib/modules for precompiled drivers
if config.Driver.UsePrecompiledDrivers() {
n.logger.Info("Mounting /lib/modules into the driver container")
libModulesVolMount := corev1.VolumeMount{
Name: "lib-modules",
MountPath: "/run/host/lib/modules",
ReadOnly: true,
}
driverContainer.VolumeMounts = append(driverContainer.VolumeMounts, libModulesVolMount)

libModulesVol := corev1.Volume{
Name: "lib-modules",
VolumeSource: corev1.VolumeSource{
HostPath: &corev1.HostPathVolumeSource{
Path: "/lib/modules",
Type: ptr.To(corev1.HostPathDirectory),
},
},
}
podSpec.Volumes = append(podSpec.Volumes, libModulesVol)
}

// no further repo configuration required when using pre-compiled drivers, return here.
if config.Driver.UsePrecompiledDrivers() {
return nil
Expand Down
43 changes: 43 additions & 0 deletions controllers/object_controls_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1883,3 +1883,46 @@ func TestMIGManager(t *testing.T) {
})
}
}

// TestDriverPrecompiledLibModules tests that /lib/modules is mounted when precompiled drivers are used
func TestDriverPrecompiledLibModules(t *testing.T) {
cp := getDriverTestInput("precompiled")
output := getDriverTestOutput("precompiled")

ds, err := testDaemonsetCommon(t, cp, "Driver", output["numDaemonsets"].(int))
if err != nil {
t.Fatalf("error in testDaemonsetCommon(): %v", err)
}
require.NotNil(t, ds)

// Check for /lib/modules volume and mount
foundVolume := false
for _, vol := range ds.Spec.Template.Spec.Volumes {
if vol.Name == "lib-modules" {
foundVolume = true
require.NotNil(t, vol.HostPath)
require.Equal(t, "/lib/modules", vol.HostPath.Path)
}
}
require.True(t, foundVolume, "lib-modules volume not found for precompiled drivers")

foundMount := false
driverContainer := findContainerByName(ds.Spec.Template.Spec.Containers, "nvidia-driver-ctr")
require.NotNil(t, driverContainer)

for _, mount := range driverContainer.VolumeMounts {
if mount.Name == "lib-modules" {
foundMount = true
require.Equal(t, "/run/host/lib/modules", mount.MountPath)
require.True(t, mount.ReadOnly)
}
}
require.True(t, foundMount, "lib-modules volume mount not found for precompiled drivers")

// Cleanup
err = removeState(&clusterPolicyController, clusterPolicyController.idx-1)
if err != nil {
t.Fatalf("error removing state %v:", err)
}
clusterPolicyController.idx--
}
22 changes: 22 additions & 0 deletions internal/state/driver_volumes.go
Original file line number Diff line number Diff line change
Expand Up @@ -209,6 +209,28 @@ func (s *stateDriver) getDriverAdditionalConfigs(ctx context.Context, cr *v1alph
additionalCfgs.Volumes = append(additionalCfgs.Volumes, subscriptionVol)
}
}

// Mount /lib/modules for precompiled drivers
if cr.Spec.UsePrecompiledDrivers() {
logger.Info("Mounting /lib/modules into the driver container")
libModulesVolMount := corev1.VolumeMount{
Name: "lib-modules",
MountPath: "/run/host/lib/modules",
ReadOnly: true,
}
additionalCfgs.VolumeMounts = append(additionalCfgs.VolumeMounts, libModulesVolMount)

libModulesVol := corev1.Volume{
Name: "lib-modules",
VolumeSource: corev1.VolumeSource{
HostPath: &corev1.HostPathVolumeSource{
Path: "/lib/modules",
Type: ptr.To(corev1.HostPathDirectory),
},
},
}
additionalCfgs.Volumes = append(additionalCfgs.Volumes, libModulesVol)
}
}

// mount any custom kernel module configuration parameters at /drivers
Expand Down