diff --git a/internal/discover/hooks.go b/internal/discover/hooks.go index dfe98988..87202e7c 100644 --- a/internal/discover/hooks.go +++ b/internal/discover/hooks.go @@ -29,12 +29,47 @@ const ( nvidiaCTKDefaultFilePath = "/usr/bin/nvidia-ctk" ) +var _ Discover = (*Hook)(nil) + +// Devices returns an empty list of devices for a Hook discoverer. +func (h Hook) Devices() ([]Device, error) { + return nil, nil +} + +// Mounts returns an empty list of mounts for a Hook discoverer. +func (h Hook) Mounts() ([]Mount, error) { + return nil, nil +} + +// Hooks allows the Hook type to also implement the Discoverer interface. +// It returns a single hook +func (h Hook) Hooks() ([]Hook, error) { + return []Hook{h}, nil +} + +// CreateCreateSymlinkHook creates a hook which creates a symlink from link -> target. +func CreateCreateSymlinkHook(nvidiaCTKPath string, links []string) Discover { + if len(links) == 0 { + return None{} + } + + var args []string + for _, link := range links { + args = append(args, "--link", link) + } + return CreateNvidiaCTKHook( + nvidiaCTKPath, + "create-symlinks", + args..., + ) +} + // CreateNvidiaCTKHook creates a hook which invokes the NVIDIA Container CLI hook subcommand. -func CreateNvidiaCTKHook(executable string, hookName string, additionalArgs ...string) Hook { +func CreateNvidiaCTKHook(nvidiaCTKPath string, hookName string, additionalArgs ...string) Hook { return Hook{ Lifecycle: cdi.CreateContainerHook, - Path: executable, - Args: append([]string{filepath.Base(executable), "hook", hookName}, additionalArgs...), + Path: nvidiaCTKPath, + Args: append([]string{filepath.Base(nvidiaCTKPath), "hook", hookName}, additionalArgs...), } }