Skip to content

Commit 64375df

Browse files
Add all option to disable all hooks
Signed-off-by: Carlos Eduardo Arango Gutierrez <[email protected]>
1 parent ec49e43 commit 64375df

File tree

3 files changed

+151
-5
lines changed

3 files changed

+151
-5
lines changed

cmd/nvidia-ctk/cdi/generate/generate.go

+9-1
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,15 @@ func (m command) generateSpec(opts *options) (spec.Interface, error) {
287287

288288
if len(opts.disableHooks.Value()) > 0 {
289289
for _, hook := range opts.disableHooks.Value() {
290-
initOpts = append(initOpts, nvcdi.WithDisabledHook(nvcdi.HookName(hook)))
290+
if hook == "all" {
291+
initOpts = append(initOpts, nvcdi.WithDisabledHook(nvcdi.HookEnableCudaCompat))
292+
initOpts = append(initOpts, nvcdi.WithDisabledHook(nvcdi.HookCreateSymlinks))
293+
initOpts = append(initOpts, nvcdi.WithDisabledHook(nvcdi.HookUpdateLDCache))
294+
break
295+
}
296+
if nvcdi.IsValidHook(hook) {
297+
initOpts = append(initOpts, nvcdi.WithDisabledHook(nvcdi.HookName(hook)))
298+
}
291299
}
292300
}
293301

cmd/nvidia-ctk/cdi/generate/generate_test.go

+127-4
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,9 @@ func TestGenerateSpec(t *testing.T) {
3737
require.NoError(t, err)
3838

3939
driverRoot := filepath.Join(moduleRoot, "testdata", "lookup", "rootfs-1")
40-
disableHook := cli.NewStringSlice("enable-cuda-compat", "create-symlinks", "update-ldcache")
40+
disableHook1 := cli.NewStringSlice("enable-cuda-compat")
41+
disableHook2 := cli.NewStringSlice("enable-cuda-compat", "update-ldcache")
42+
disableHook3 := cli.NewStringSlice("all")
4143

4244
logger, _ := testlog.NewNullLogger()
4345
testCases := []struct {
@@ -117,14 +119,14 @@ containerEdits:
117119
`,
118120
},
119121
{
120-
description: "disableHooks",
122+
description: "disableHooks1",
121123
options: options{
122124
format: "yaml",
123125
mode: "nvml",
124126
vendor: "example.com",
125127
class: "device",
126128
driverRoot: driverRoot,
127-
disableHooks: *disableHook,
129+
disableHooks: *disableHook1,
128130
},
129131
expectedOptions: options{
130132
format: "yaml",
@@ -133,7 +135,128 @@ containerEdits:
133135
class: "device",
134136
nvidiaCDIHookPath: "/usr/bin/nvidia-cdi-hook",
135137
driverRoot: driverRoot,
136-
disableHooks: *disableHook,
138+
disableHooks: *disableHook1,
139+
},
140+
expectedSpec: `---
141+
cdiVersion: 0.5.0
142+
kind: example.com/device
143+
devices:
144+
- name: "0"
145+
containerEdits:
146+
deviceNodes:
147+
- path: /dev/nvidia0
148+
hostPath: {{ .driverRoot }}/dev/nvidia0
149+
- name: all
150+
containerEdits:
151+
deviceNodes:
152+
- path: /dev/nvidia0
153+
hostPath: {{ .driverRoot }}/dev/nvidia0
154+
containerEdits:
155+
env:
156+
- NVIDIA_VISIBLE_DEVICES=void
157+
deviceNodes:
158+
- path: /dev/nvidiactl
159+
hostPath: {{ .driverRoot }}/dev/nvidiactl
160+
hooks:
161+
- hookName: createContainer
162+
path: /usr/bin/nvidia-cdi-hook
163+
args:
164+
- nvidia-cdi-hook
165+
- create-symlinks
166+
- --link
167+
- libcuda.so.1::/lib/x86_64-linux-gnu/libcuda.so
168+
- hookName: createContainer
169+
path: /usr/bin/nvidia-cdi-hook
170+
args:
171+
- nvidia-cdi-hook
172+
- update-ldcache
173+
- --folder
174+
- /lib/x86_64-linux-gnu
175+
mounts:
176+
- hostPath: {{ .driverRoot }}/lib/x86_64-linux-gnu/libcuda.so.999.88.77
177+
containerPath: /lib/x86_64-linux-gnu/libcuda.so.999.88.77
178+
options:
179+
- ro
180+
- nosuid
181+
- nodev
182+
- bind
183+
`,
184+
},
185+
{
186+
description: "disableHooks2",
187+
options: options{
188+
format: "yaml",
189+
mode: "nvml",
190+
vendor: "example.com",
191+
class: "device",
192+
driverRoot: driverRoot,
193+
disableHooks: *disableHook2,
194+
},
195+
expectedOptions: options{
196+
format: "yaml",
197+
mode: "nvml",
198+
vendor: "example.com",
199+
class: "device",
200+
nvidiaCDIHookPath: "/usr/bin/nvidia-cdi-hook",
201+
driverRoot: driverRoot,
202+
disableHooks: *disableHook2,
203+
},
204+
expectedSpec: `---
205+
cdiVersion: 0.5.0
206+
kind: example.com/device
207+
devices:
208+
- name: "0"
209+
containerEdits:
210+
deviceNodes:
211+
- path: /dev/nvidia0
212+
hostPath: {{ .driverRoot }}/dev/nvidia0
213+
- name: all
214+
containerEdits:
215+
deviceNodes:
216+
- path: /dev/nvidia0
217+
hostPath: {{ .driverRoot }}/dev/nvidia0
218+
containerEdits:
219+
env:
220+
- NVIDIA_VISIBLE_DEVICES=void
221+
deviceNodes:
222+
- path: /dev/nvidiactl
223+
hostPath: {{ .driverRoot }}/dev/nvidiactl
224+
hooks:
225+
- hookName: createContainer
226+
path: /usr/bin/nvidia-cdi-hook
227+
args:
228+
- nvidia-cdi-hook
229+
- create-symlinks
230+
- --link
231+
- libcuda.so.1::/lib/x86_64-linux-gnu/libcuda.so
232+
mounts:
233+
- hostPath: {{ .driverRoot }}/lib/x86_64-linux-gnu/libcuda.so.999.88.77
234+
containerPath: /lib/x86_64-linux-gnu/libcuda.so.999.88.77
235+
options:
236+
- ro
237+
- nosuid
238+
- nodev
239+
- bind
240+
`,
241+
},
242+
{
243+
description: "disableHooksAll",
244+
options: options{
245+
format: "yaml",
246+
mode: "nvml",
247+
vendor: "example.com",
248+
class: "device",
249+
driverRoot: driverRoot,
250+
disableHooks: *disableHook3,
251+
},
252+
expectedOptions: options{
253+
format: "yaml",
254+
mode: "nvml",
255+
vendor: "example.com",
256+
class: "device",
257+
nvidiaCDIHookPath: "/usr/bin/nvidia-cdi-hook",
258+
driverRoot: driverRoot,
259+
disableHooks: *disableHook3,
137260
},
138261
expectedSpec: `---
139262
cdiVersion: 0.5.0

pkg/nvcdi/api.go

+15
Original file line numberDiff line numberDiff line change
@@ -44,4 +44,19 @@ const (
4444
// HookEnableCudaCompat refers to the hook used to enable CUDA Forward Compatibility.
4545
// This was added with v1.17.5 of the NVIDIA Container Toolkit.
4646
HookEnableCudaCompat = HookName("enable-cuda-compat")
47+
// HookCreateSymlinks refers to the hook used create symlinks inside the
48+
// directory path to be mounted into a container.
49+
HookCreateSymlinks = HookName("create-symlinks")
50+
// HookUpdateLDCache refers to the hook used to Update the dynamic linker
51+
// cache inside the directory path to be mounted into a container.
52+
HookUpdateLDCache = HookName("update-ldcache")
4753
)
54+
55+
func IsValidHook(hook string) bool {
56+
switch HookName(hook) {
57+
case HookEnableCudaCompat, HookCreateSymlinks, HookUpdateLDCache:
58+
return true
59+
default:
60+
return false
61+
}
62+
}

0 commit comments

Comments
 (0)