Refactor the way we create CDI Hooks

Signed-off-by: Carlos Eduardo Arango Gutierrez <eduardoa@nvidia.com>
This commit is contained in:
Carlos Eduardo Arango Gutierrez
2025-05-16 18:44:59 +02:00
parent ac8f190c99
commit a3ca7fd98c
30 changed files with 201 additions and 210 deletions

View File

@@ -27,11 +27,11 @@ import (
// byPathHookDiscoverer discovers the entities required for injecting by-path DRM device links
type byPathHookDiscoverer struct {
logger logger.Interface
devRoot string
nvidiaCDIHookPath string
pciBusID string
deviceNodes discover.Discover
logger logger.Interface
devRoot string
hookCreator discover.HookCreator
pciBusID string
deviceNodes discover.Discover
}
var _ discover.Discover = (*byPathHookDiscoverer)(nil)
@@ -53,18 +53,9 @@ func (d *byPathHookDiscoverer) Hooks() ([]discover.Hook, error) {
return nil, nil
}
var args []string
for _, l := range links {
args = append(args, "--link", l)
}
hook := d.hookCreator.Create("create-symlinks", links...)
hook := discover.CreateNvidiaCDIHook(
d.nvidiaCDIHookPath,
"create-symlinks",
args...,
)
return []discover.Hook{hook}, nil
return hook.Hooks()
}
// Mounts returns an empty slice for a full GPU

View File

@@ -58,11 +58,11 @@ func (o *options) newNvmlDGPUDiscoverer(d requiredInfo) (discover.Discover, erro
)
byPathHooks := &byPathHookDiscoverer{
logger: o.logger,
devRoot: o.devRoot,
nvidiaCDIHookPath: o.nvidiaCDIHookPath,
pciBusID: pciBusID,
deviceNodes: deviceNodes,
logger: o.logger,
devRoot: o.devRoot,
hookCreator: o.hookCreator,
pciBusID: pciBusID,
deviceNodes: deviceNodes,
}
dd := discover.Merge(

View File

@@ -28,12 +28,12 @@ import (
)
type nvsandboxutilsDGPU struct {
lib nvsandboxutils.Interface
uuid string
devRoot string
isMig bool
nvidiaCDIHookPath string
deviceLinks []string
lib nvsandboxutils.Interface
uuid string
devRoot string
isMig bool
hookCreator discover.HookCreator
deviceLinks []string
}
var _ discover.Discover = (*nvsandboxutilsDGPU)(nil)
@@ -53,11 +53,11 @@ func (o *options) newNvsandboxutilsDGPUDiscoverer(d UUIDer) (discover.Discover,
}
nvd := nvsandboxutilsDGPU{
lib: o.nvsandboxutilslib,
uuid: uuid,
devRoot: strings.TrimSuffix(filepath.Clean(o.devRoot), "/dev"),
isMig: o.isMigDevice,
nvidiaCDIHookPath: o.nvidiaCDIHookPath,
lib: o.nvsandboxutilslib,
uuid: uuid,
devRoot: strings.TrimSuffix(filepath.Clean(o.devRoot), "/dev"),
isMig: o.isMigDevice,
hookCreator: o.hookCreator,
}
return &nvd, nil
@@ -112,18 +112,9 @@ func (d *nvsandboxutilsDGPU) Hooks() ([]discover.Hook, error) {
return nil, nil
}
var args []string
for _, l := range d.deviceLinks {
args = append(args, "--link", l)
}
hook := d.hookCreator.Create("create-symlinks", d.deviceLinks...)
hook := discover.CreateNvidiaCDIHook(
d.nvidiaCDIHookPath,
"create-symlinks",
args...,
)
return []discover.Hook{hook}, nil
return hook.Hooks()
}
func (d *nvsandboxutilsDGPU) Mounts() ([]discover.Mount, error) {

View File

@@ -17,15 +17,16 @@
package dgpu
import (
"github.com/NVIDIA/nvidia-container-toolkit/internal/discover"
"github.com/NVIDIA/nvidia-container-toolkit/internal/logger"
"github.com/NVIDIA/nvidia-container-toolkit/internal/nvcaps"
"github.com/NVIDIA/nvidia-container-toolkit/internal/nvsandboxutils"
)
type options struct {
logger logger.Interface
devRoot string
nvidiaCDIHookPath string
logger logger.Interface
devRoot string
hookCreator discover.HookCreator
isMigDevice bool
// migCaps stores the MIG capabilities for the system.
@@ -52,10 +53,10 @@ func WithLogger(logger logger.Interface) Option {
}
}
// WithNVIDIACDIHookPath sets the path to the NVIDIA Container Toolkit CLI path for the library
func WithNVIDIACDIHookPath(path string) Option {
// WithHookCreator sets the hook creator for the library
func WithHookCreator(hookCreator discover.HookCreator) Option {
return func(l *options) {
l.nvidiaCDIHookPath = path
l.hookCreator = hookCreator
}
}