Rename NewGraphicsDiscoverer as NewDRMNodesDiscoverer

This change renames NewGraphicsDiscoverer to NewDRMNodesDiscoverer and
instead calls NewGraphicsMountsDiscoverer explicitly when constructing
a graphics modifier.

This avoids the import of config.Config into the discover package
which leads to a transitive dependency on toml-specifics and
requires that the vendor/github.com/pelletier/ package
be vendored in to consumers.

Signed-off-by: Evan Lezar <elezar@nvidia.com>
This commit is contained in:
Evan Lezar 2023-11-20 22:32:46 +01:00
parent e315d7d74b
commit 255181a5ff
2 changed files with 28 additions and 20 deletions

View File

@ -22,7 +22,6 @@ import (
"path/filepath" "path/filepath"
"strings" "strings"
"github.com/NVIDIA/nvidia-container-toolkit/internal/config"
"github.com/NVIDIA/nvidia-container-toolkit/internal/config/image" "github.com/NVIDIA/nvidia-container-toolkit/internal/config/image"
"github.com/NVIDIA/nvidia-container-toolkit/internal/info/drm" "github.com/NVIDIA/nvidia-container-toolkit/internal/info/drm"
"github.com/NVIDIA/nvidia-container-toolkit/internal/info/proc" "github.com/NVIDIA/nvidia-container-toolkit/internal/info/proc"
@ -31,18 +30,12 @@ import (
"github.com/NVIDIA/nvidia-container-toolkit/internal/lookup/cuda" "github.com/NVIDIA/nvidia-container-toolkit/internal/lookup/cuda"
) )
// NewGraphicsDiscoverer returns the discoverer for graphics tools such as Vulkan. // NewDRMNodesDiscoverer returns a discoverrer for the DRM device nodes associated with the specified visible devices.
func NewGraphicsDiscoverer(logger logger.Interface, cfg *config.Config, devices image.VisibleDevices) (Discover, error) { //
driverRoot := cfg.NVIDIAContainerCLIConfig.Root // TODO: The logic for creating DRM devices should be consolidated between this
// In standard usage, the devRoot is the same as the driverRoot. // and the logic for generating CDI specs for a single device. This is only used
devRoot := driverRoot // when applying OCI spec modifications to an incoming spec in "legacy" mode.
nvidiaCTKPath := cfg.NVIDIACTKConfig.Path func NewDRMNodesDiscoverer(logger logger.Interface, devices image.VisibleDevices, devRoot string, nvidiaCTKPath string) (Discover, error) {
mounts, err := NewGraphicsMountsDiscoverer(logger, driverRoot, nvidiaCTKPath)
if err != nil {
return nil, fmt.Errorf("failed to create mounts discoverer: %v", err)
}
drmDeviceNodes, err := newDRMDeviceDiscoverer(logger, devices, devRoot) drmDeviceNodes, err := newDRMDeviceDiscoverer(logger, devices, devRoot)
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to create DRM device discoverer: %v", err) return nil, fmt.Errorf("failed to create DRM device discoverer: %v", err)
@ -50,11 +43,7 @@ func NewGraphicsDiscoverer(logger logger.Interface, cfg *config.Config, devices
drmByPathSymlinks := newCreateDRMByPathSymlinks(logger, drmDeviceNodes, devRoot, nvidiaCTKPath) drmByPathSymlinks := newCreateDRMByPathSymlinks(logger, drmDeviceNodes, devRoot, nvidiaCTKPath)
discover := Merge( discover := Merge(drmDeviceNodes, drmByPathSymlinks)
Merge(drmDeviceNodes, drmByPathSymlinks),
mounts,
)
return discover, nil return discover, nil
} }

View File

@ -34,15 +34,34 @@ func NewGraphicsModifier(logger logger.Interface, cfg *config.Config, image imag
return nil, nil return nil, nil
} }
d, err := discover.NewGraphicsDiscoverer( driverRoot := cfg.NVIDIAContainerCLIConfig.Root
nvidiaCTKPath := cfg.NVIDIACTKConfig.Path
mounts, err := discover.NewGraphicsMountsDiscoverer(
logger,
driverRoot,
nvidiaCTKPath,
)
if err != nil {
return nil, fmt.Errorf("failed to create mounts discoverer: %v", err)
}
// In standard usage, the devRoot is the same as the driverRoot.
devRoot := driverRoot
drmNodes, err := discover.NewDRMNodesDiscoverer(
logger, logger,
cfg,
image.DevicesFromEnvvars(visibleDevicesEnvvar), image.DevicesFromEnvvars(visibleDevicesEnvvar),
devRoot,
nvidiaCTKPath,
) )
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to construct discoverer: %v", err) return nil, fmt.Errorf("failed to construct discoverer: %v", err)
} }
d := discover.Merge(
drmNodes,
mounts,
)
return NewModifierFromDiscoverer(logger, d) return NewModifierFromDiscoverer(logger, d)
} }