From 5d011c13337c189e4726b4950f42f21be32c6c59 Mon Sep 17 00:00:00 2001 From: Evan Lezar Date: Tue, 7 Feb 2023 23:32:04 +0100 Subject: [PATCH] Add Discoverer to create a single symlink Signed-off-by: Evan Lezar --- internal/discover/hooks.go | 41 +++++++++++++++++++++++++++++++++++--- 1 file changed, 38 insertions(+), 3 deletions(-) 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...), } }