diff --git a/go.mod b/go.mod index 83afa1977..9904f0010 100644 --- a/go.mod +++ b/go.mod @@ -31,7 +31,7 @@ replace ( require ( github.com/NVIDIA/go-nvlib v0.0.0-20231116150931-9fd385bace0d github.com/NVIDIA/go-nvml v0.12.0-2 - github.com/NVIDIA/nvidia-container-toolkit v1.14.4-0.20231120225202-039d7fd32429 + github.com/NVIDIA/nvidia-container-toolkit v1.15.0-rc.1 github.com/prometheus/client_golang v1.14.0 github.com/sirupsen/logrus v1.9.3 github.com/spf13/pflag v1.0.5 diff --git a/go.sum b/go.sum index 90d0bb3b5..8613f0e19 100644 --- a/go.sum +++ b/go.sum @@ -37,8 +37,8 @@ github.com/NVIDIA/go-nvlib v0.0.0-20231116150931-9fd385bace0d h1:XxRHS7eNkZVcPpZ github.com/NVIDIA/go-nvlib v0.0.0-20231116150931-9fd385bace0d/go.mod h1:HPFNPAYqQeoos58MKUboWsdZMu71EzSQrbmd+QBRD40= github.com/NVIDIA/go-nvml v0.12.0-2 h1:Sg239yy7jmopu/cuvYauoMj9fOpcGMngxVxxS1EBXeY= github.com/NVIDIA/go-nvml v0.12.0-2/go.mod h1:7ruy85eOM73muOc/I37euONSwEyFqZsv5ED9AogD4G0= -github.com/NVIDIA/nvidia-container-toolkit v1.14.4-0.20231120225202-039d7fd32429 h1:+iGAHhhsREKFiJb1A+txLMVi3oPAoNC2kH8AtQsbzRc= -github.com/NVIDIA/nvidia-container-toolkit v1.14.4-0.20231120225202-039d7fd32429/go.mod h1:yd+UnaIUSX3vjLVfewaDQ+R7XrgG38+hMZZXrygK3w0= +github.com/NVIDIA/nvidia-container-toolkit v1.15.0-rc.1 h1:tA6+3ZfGEv1JlylkQyIGp+pwGb9DChXuQyppmyUbMRc= +github.com/NVIDIA/nvidia-container-toolkit v1.15.0-rc.1/go.mod h1:yd+UnaIUSX3vjLVfewaDQ+R7XrgG38+hMZZXrygK3w0= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= diff --git a/vendor/github.com/NVIDIA/nvidia-container-toolkit/internal/discover/graphics.go b/vendor/github.com/NVIDIA/nvidia-container-toolkit/internal/discover/graphics.go index 73145c89e..73bedb2b9 100644 --- a/vendor/github.com/NVIDIA/nvidia-container-toolkit/internal/discover/graphics.go +++ b/vendor/github.com/NVIDIA/nvidia-container-toolkit/internal/discover/graphics.go @@ -28,6 +28,7 @@ import ( "github.com/NVIDIA/nvidia-container-toolkit/internal/logger" "github.com/NVIDIA/nvidia-container-toolkit/internal/lookup" "github.com/NVIDIA/nvidia-container-toolkit/internal/lookup/cuda" + "github.com/NVIDIA/nvidia-container-toolkit/internal/lookup/root" ) // NewDRMNodesDiscoverer returns a discoverrer for the DRM device nodes associated with the specified visible devices. @@ -48,17 +49,13 @@ func NewDRMNodesDiscoverer(logger logger.Interface, devices image.VisibleDevices } // NewGraphicsMountsDiscoverer creates a discoverer for the mounts required by graphics tools such as vulkan. -func NewGraphicsMountsDiscoverer(logger logger.Interface, driverRoot string, nvidiaCTKPath string) (Discover, error) { - locator, err := lookup.NewLibraryLocator(logger, driverRoot) - if err != nil { - return nil, fmt.Errorf("failed to construct library locator: %v", err) - } +func NewGraphicsMountsDiscoverer(logger logger.Interface, driver *root.Driver, nvidiaCTKPath string) (Discover, error) { libraries := NewMounts( logger, - locator, - driverRoot, + driver.Libraries(), + driver.Root, []string{ - "libnvidia-egl-gbm.so", + "libnvidia-egl-gbm.so.*", }, ) @@ -66,20 +63,22 @@ func NewGraphicsMountsDiscoverer(logger logger.Interface, driverRoot string, nvi logger, lookup.NewFileLocator( lookup.WithLogger(logger), - lookup.WithRoot(driverRoot), + lookup.WithRoot(driver.Root), lookup.WithSearchPaths("/etc", "/usr/share"), ), - driverRoot, + driver.Root, []string{ "glvnd/egl_vendor.d/10_nvidia.json", "vulkan/icd.d/nvidia_icd.json", + "vulkan/icd.d/nvidia_layers.json", "vulkan/implicit_layer.d/nvidia_layers.json", "egl/egl_external_platform.d/15_nvidia_gbm.json", "egl/egl_external_platform.d/10_nvidia_wayland.json", + "nvidia/nvoptix.bin", }, ) - xorg := optionalXorgDiscoverer(logger, driverRoot, nvidiaCTKPath) + xorg := optionalXorgDiscoverer(logger, driver, nvidiaCTKPath) discover := Merge( libraries, @@ -247,8 +246,8 @@ var _ Discover = (*xorgHooks)(nil) // optionalXorgDiscoverer creates a discoverer for Xorg libraries. // If the creation of the discoverer fails, a None discoverer is returned. -func optionalXorgDiscoverer(logger logger.Interface, driverRoot string, nvidiaCTKPath string) Discover { - xorg, err := newXorgDiscoverer(logger, driverRoot, nvidiaCTKPath) +func optionalXorgDiscoverer(logger logger.Interface, driver *root.Driver, nvidiaCTKPath string) Discover { + xorg, err := newXorgDiscoverer(logger, driver, nvidiaCTKPath) if err != nil { logger.Warningf("Failed to create Xorg discoverer: %v; skipping xorg libraries", err) return None{} @@ -256,10 +255,9 @@ func optionalXorgDiscoverer(logger logger.Interface, driverRoot string, nvidiaCT return xorg } -func newXorgDiscoverer(logger logger.Interface, driverRoot string, nvidiaCTKPath string) (Discover, error) { +func newXorgDiscoverer(logger logger.Interface, driver *root.Driver, nvidiaCTKPath string) (Discover, error) { libCudaPaths, err := cuda.New( - cuda.WithLogger(logger), - cuda.WithDriverRoot(driverRoot), + driver.Libraries(), ).Locate(".*.*") if err != nil { return nil, fmt.Errorf("failed to locate libcuda.so: %v", err) @@ -276,11 +274,11 @@ func newXorgDiscoverer(logger logger.Interface, driverRoot string, nvidiaCTKPath logger, lookup.NewFileLocator( lookup.WithLogger(logger), - lookup.WithRoot(driverRoot), + lookup.WithRoot(driver.Root), lookup.WithSearchPaths(libRoot, "/usr/lib/x86_64-linux-gnu"), lookup.WithCount(1), ), - driverRoot, + driver.Root, []string{ "nvidia/xorg/nvidia_drv.so", fmt.Sprintf("nvidia/xorg/libglxserver_nvidia.so.%s", version), @@ -296,10 +294,10 @@ func newXorgDiscoverer(logger logger.Interface, driverRoot string, nvidiaCTKPath logger, lookup.NewFileLocator( lookup.WithLogger(logger), - lookup.WithRoot(driverRoot), + lookup.WithRoot(driver.Root), lookup.WithSearchPaths("/usr/share"), ), - driverRoot, + driver.Root, []string{"X11/xorg.conf.d/10-nvidia.conf"}, ) diff --git a/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/transform/no-op.go b/vendor/github.com/NVIDIA/nvidia-container-toolkit/internal/discover/nvswitch.go similarity index 54% rename from vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/transform/no-op.go rename to vendor/github.com/NVIDIA/nvidia-container-toolkit/internal/discover/nvswitch.go index be2bacf70..fb956d115 100644 --- a/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/transform/no-op.go +++ b/vendor/github.com/NVIDIA/nvidia-container-toolkit/internal/discover/nvswitch.go @@ -1,5 +1,5 @@ /** -# Copyright (c) NVIDIA CORPORATION. All rights reserved. +# Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -14,22 +14,20 @@ # limitations under the License. **/ -package transform +package discover -import ( - "tags.cncf.io/container-device-interface/specs-go" -) +import "github.com/NVIDIA/nvidia-container-toolkit/internal/logger" -type noop struct{} +// NewNvSwitchDiscoverer creates a discoverer for NVSWITCH devices. +func NewNvSwitchDiscoverer(logger logger.Interface, devRoot string) (Discover, error) { + devices := NewCharDeviceDiscoverer( + logger, + devRoot, + []string{ + "/dev/nvidia-nvswitchctl", + "/dev/nvidia-nvswitch*", + }, + ) -var _ Transformer = (*noop)(nil) - -// NewNoopTransformer returns a no-op transformer -func NewNoopTransformer() Transformer { - return noop{} -} - -// Transform is a no-op -func (n noop) Transform(spec *specs.Spec) error { - return nil + return devices, nil } diff --git a/vendor/github.com/NVIDIA/nvidia-container-toolkit/internal/edits/device.go b/vendor/github.com/NVIDIA/nvidia-container-toolkit/internal/edits/device.go index 2a5d71c26..d04df1537 100644 --- a/vendor/github.com/NVIDIA/nvidia-container-toolkit/internal/edits/device.go +++ b/vendor/github.com/NVIDIA/nvidia-container-toolkit/internal/edits/device.go @@ -17,9 +17,10 @@ package edits import ( - "github.com/NVIDIA/nvidia-container-toolkit/internal/discover" "tags.cncf.io/container-device-interface/pkg/cdi" "tags.cncf.io/container-device-interface/specs-go" + + "github.com/NVIDIA/nvidia-container-toolkit/internal/discover" ) type device discover.Device diff --git a/vendor/github.com/NVIDIA/nvidia-container-toolkit/internal/edits/edits.go b/vendor/github.com/NVIDIA/nvidia-container-toolkit/internal/edits/edits.go index bc86f499d..029e7885b 100644 --- a/vendor/github.com/NVIDIA/nvidia-container-toolkit/internal/edits/edits.go +++ b/vendor/github.com/NVIDIA/nvidia-container-toolkit/internal/edits/edits.go @@ -19,12 +19,13 @@ package edits import ( "fmt" - "github.com/NVIDIA/nvidia-container-toolkit/internal/discover" - "github.com/NVIDIA/nvidia-container-toolkit/internal/logger" - "github.com/NVIDIA/nvidia-container-toolkit/internal/oci" ociSpecs "github.com/opencontainers/runtime-spec/specs-go" "tags.cncf.io/container-device-interface/pkg/cdi" "tags.cncf.io/container-device-interface/specs-go" + + "github.com/NVIDIA/nvidia-container-toolkit/internal/discover" + "github.com/NVIDIA/nvidia-container-toolkit/internal/logger" + "github.com/NVIDIA/nvidia-container-toolkit/internal/oci" ) type edits struct { diff --git a/vendor/github.com/NVIDIA/nvidia-container-toolkit/internal/edits/hook.go b/vendor/github.com/NVIDIA/nvidia-container-toolkit/internal/edits/hook.go index ec894f86d..f528fe1db 100644 --- a/vendor/github.com/NVIDIA/nvidia-container-toolkit/internal/edits/hook.go +++ b/vendor/github.com/NVIDIA/nvidia-container-toolkit/internal/edits/hook.go @@ -17,9 +17,10 @@ package edits import ( - "github.com/NVIDIA/nvidia-container-toolkit/internal/discover" "tags.cncf.io/container-device-interface/pkg/cdi" "tags.cncf.io/container-device-interface/specs-go" + + "github.com/NVIDIA/nvidia-container-toolkit/internal/discover" ) type hook discover.Hook diff --git a/vendor/github.com/NVIDIA/nvidia-container-toolkit/internal/edits/mount.go b/vendor/github.com/NVIDIA/nvidia-container-toolkit/internal/edits/mount.go index 53b9f45d2..a588ec045 100644 --- a/vendor/github.com/NVIDIA/nvidia-container-toolkit/internal/edits/mount.go +++ b/vendor/github.com/NVIDIA/nvidia-container-toolkit/internal/edits/mount.go @@ -17,9 +17,10 @@ package edits import ( - "github.com/NVIDIA/nvidia-container-toolkit/internal/discover" "tags.cncf.io/container-device-interface/pkg/cdi" "tags.cncf.io/container-device-interface/specs-go" + + "github.com/NVIDIA/nvidia-container-toolkit/internal/discover" ) type mount discover.Mount diff --git a/vendor/github.com/NVIDIA/nvidia-container-toolkit/internal/lookup/cuda/cuda.go b/vendor/github.com/NVIDIA/nvidia-container-toolkit/internal/lookup/cuda/cuda.go index b95e81b4a..68c4db359 100644 --- a/vendor/github.com/NVIDIA/nvidia-container-toolkit/internal/lookup/cuda/cuda.go +++ b/vendor/github.com/NVIDIA/nvidia-container-toolkit/internal/lookup/cuda/cuda.go @@ -17,55 +17,19 @@ package cuda import ( - "github.com/NVIDIA/nvidia-container-toolkit/internal/logger" "github.com/NVIDIA/nvidia-container-toolkit/internal/lookup" ) type cudaLocator struct { lookup.Locator - logger logger.Interface - driverRoot string -} - -// Options is a function that configures a cudaLocator. -type Options func(*cudaLocator) - -// WithLogger is an option that configures the logger used by the locator. -func WithLogger(logger logger.Interface) Options { - return func(c *cudaLocator) { - c.logger = logger - } -} - -// WithDriverRoot is an option that configures the driver root used by the locator. -func WithDriverRoot(driverRoot string) Options { - return func(c *cudaLocator) { - c.driverRoot = driverRoot - } } // New creates a new CUDA library locator. -func New(opts ...Options) lookup.Locator { - c := &cudaLocator{} - for _, opt := range opts { - opt(c) - } - - if c.logger == nil { - c.logger = logger.New() +func New(libraries lookup.Locator) lookup.Locator { + c := cudaLocator{ + Locator: libraries, } - if c.driverRoot == "" { - c.driverRoot = "/" - } - - // TODO: Do we want to set the Count to 1 here? - l, _ := lookup.NewLibraryLocator( - c.logger, - c.driverRoot, - ) - - c.Locator = l - return c + return &c } // Locate returns the path to the libcuda.so.RMVERSION file. diff --git a/vendor/github.com/NVIDIA/nvidia-container-toolkit/internal/lookup/file.go b/vendor/github.com/NVIDIA/nvidia-container-toolkit/internal/lookup/file.go index 20a1f164e..8f3302731 100644 --- a/vendor/github.com/NVIDIA/nvidia-container-toolkit/internal/lookup/file.go +++ b/vendor/github.com/NVIDIA/nvidia-container-toolkit/internal/lookup/file.go @@ -17,7 +17,6 @@ package lookup import ( - "errors" "fmt" "os" "path/filepath" @@ -25,55 +24,58 @@ import ( "github.com/NVIDIA/nvidia-container-toolkit/internal/logger" ) -// ErrNotFound indicates that a specified pattern or file could not be found. -var ErrNotFound = errors.New("not found") - // file can be used to locate file (or file-like elements) at a specified set of // prefixes. The validity of a file is determined by a filter function. type file struct { - logger logger.Interface - root string - prefixes []string - filter func(string) error - count int - isOptional bool + builder + prefixes []string +} + +// builder defines the builder for a file locator. +type builder struct { + logger logger.Interface + root string + searchPaths []string + filter func(string) error + count int + isOptional bool } -// Option defines a function for passing options to the NewFileLocator() call -type Option func(*file) +// Option defines a function for passing builder to the NewFileLocator() call +type Option func(*builder) // WithRoot sets the root for the file locator func WithRoot(root string) Option { - return func(f *file) { + return func(f *builder) { f.root = root } } // WithLogger sets the logger for the file locator func WithLogger(logger logger.Interface) Option { - return func(f *file) { + return func(f *builder) { f.logger = logger } } // WithSearchPaths sets the search paths for the file locator. func WithSearchPaths(paths ...string) Option { - return func(f *file) { - f.prefixes = paths + return func(f *builder) { + f.searchPaths = paths } } // WithFilter sets the filter for the file locator // The filter is called for each candidate file and candidates that return nil are considered. func WithFilter(assert func(string) error) Option { - return func(f *file) { + return func(f *builder) { f.filter = assert } } // WithCount sets the maximum number of candidates to discover func WithCount(count int) Option { - return func(f *file) { + return func(f *builder) { f.count = count } } @@ -81,32 +83,42 @@ func WithCount(count int) Option { // WithOptional sets the optional flag for the file locator // If the optional flag is set, the locator will not return an error if the file is not found. func WithOptional(optional bool) Option { - return func(f *file) { + return func(f *builder) { f.isOptional = optional } } -// NewFileLocator creates a Locator that can be used to find files with the specified options. -func NewFileLocator(opts ...Option) Locator { - return newFileLocator(opts...) -} - -func newFileLocator(opts ...Option) *file { - f := &file{} +func newBuilder(opts ...Option) *builder { + o := &builder{} for _, opt := range opts { - opt(f) + opt(o) } - if f.logger == nil { - f.logger = logger.New() + if o.logger == nil { + o.logger = logger.New() } - if f.filter == nil { - f.filter = assertFile + if o.filter == nil { + o.filter = assertFile } - // Since the `Locate` implementations rely on the root already being specified we update - // the prefixes to include the root. - f.prefixes = getSearchPrefixes(f.root, f.prefixes...) + return o +} - return f +func (o builder) build() *file { + f := file{ + builder: o, + // Since the `Locate` implementations rely on the root already being specified we update + // the prefixes to include the root. + prefixes: getSearchPrefixes(o.root, o.searchPaths...), + } + return &f +} + +// NewFileLocator creates a Locator that can be used to find files with the specified builder. +func NewFileLocator(opts ...Option) Locator { + return newFileLocator(opts...) +} + +func newFileLocator(opts ...Option) *file { + return newBuilder(opts...).build() } // getSearchPrefixes generates a list of unique paths to be searched by a file locator. diff --git a/vendor/github.com/NVIDIA/nvidia-container-toolkit/internal/lookup/library.go b/vendor/github.com/NVIDIA/nvidia-container-toolkit/internal/lookup/library.go index 73ad69845..7f5cf7c85 100644 --- a/vendor/github.com/NVIDIA/nvidia-container-toolkit/internal/lookup/library.go +++ b/vendor/github.com/NVIDIA/nvidia-container-toolkit/internal/lookup/library.go @@ -30,12 +30,20 @@ type ldcacheLocator struct { var _ Locator = (*ldcacheLocator)(nil) -// NewLibraryLocator creates a library locator using the specified logger. -func NewLibraryLocator(logger logger.Interface, root string) (Locator, error) { - // We construct a symlink locator for expected library locations. - symlinkLocator := NewSymlinkLocator( - WithLogger(logger), - WithRoot(root), +// NewLibraryLocator creates a library locator using the specified options. +func NewLibraryLocator(opts ...Option) Locator { + b := newBuilder(opts...) + + // If search paths are already specified, we return a locator for the specified search paths. + if len(b.searchPaths) > 0 { + return NewSymlinkLocator( + WithLogger(b.logger), + WithSearchPaths(b.searchPaths...), + WithRoot("/"), + ) + } + + opts = append(opts, WithSearchPaths([]string{ "/", "/usr/lib64", @@ -50,24 +58,28 @@ func NewLibraryLocator(logger logger.Interface, root string) (Locator, error) { "/lib/aarch64-linux-gnu/nvidia/current", }...), ) + // We construct a symlink locator for expected library locations. + symlinkLocator := NewSymlinkLocator(opts...) l := First( symlinkLocator, - newLdcacheLocator(logger, root), + newLdcacheLocator(opts...), ) - return l, nil + return l } -func newLdcacheLocator(logger logger.Interface, root string) Locator { - cache, err := ldcache.New(logger, root) +func newLdcacheLocator(opts ...Option) Locator { + b := newBuilder(opts...) + + cache, err := ldcache.New(b.logger, b.root) if err != nil { // If we failed to open the LDCache, we default to a symlink locator. - logger.Warningf("Failed to load ldcache: %v", err) + b.logger.Warningf("Failed to load ldcache: %v", err) return nil } return &ldcacheLocator{ - logger: logger, + logger: b.logger, cache: cache, } } @@ -82,7 +94,7 @@ func (l ldcacheLocator) Locate(libname string) ([]string, error) { } if len(paths64) == 0 { - return nil, fmt.Errorf("64-bit library %v: %w", libname, errNotFound) + return nil, fmt.Errorf("64-bit library %v: %w", libname, ErrNotFound) } return paths64, nil diff --git a/vendor/github.com/NVIDIA/nvidia-container-toolkit/internal/lookup/locator.go b/vendor/github.com/NVIDIA/nvidia-container-toolkit/internal/lookup/locator.go index af5633fba..73ade2322 100644 --- a/vendor/github.com/NVIDIA/nvidia-container-toolkit/internal/lookup/locator.go +++ b/vendor/github.com/NVIDIA/nvidia-container-toolkit/internal/lookup/locator.go @@ -25,4 +25,5 @@ type Locator interface { Locate(string) ([]string, error) } -var errNotFound = errors.New("not found") +// ErrNotFound indicates that a specified pattern or file could not be found. +var ErrNotFound = errors.New("not found") diff --git a/vendor/github.com/NVIDIA/nvidia-container-toolkit/internal/lookup/root/root.go b/vendor/github.com/NVIDIA/nvidia-container-toolkit/internal/lookup/root/root.go new file mode 100644 index 000000000..f96e6b992 --- /dev/null +++ b/vendor/github.com/NVIDIA/nvidia-container-toolkit/internal/lookup/root/root.go @@ -0,0 +1,65 @@ +/** +# Copyright 2023 NVIDIA CORPORATION +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +**/ + +package root + +import ( + "path/filepath" + + "github.com/NVIDIA/nvidia-container-toolkit/internal/logger" + "github.com/NVIDIA/nvidia-container-toolkit/internal/lookup" +) + +// Driver represents a filesystem in which a set of drivers or devices is defined. +type Driver struct { + logger logger.Interface + // Root represents the root from the perspective of the driver libraries and binaries. + Root string + // librarySearchPaths specifies explicit search paths for discovering libraries. + librarySearchPaths []string +} + +// New creates a new Driver root at the specified path. +// TODO: Use functional options here. +func New(logger logger.Interface, path string, librarySearchPaths []string) *Driver { + return &Driver{ + logger: logger, + Root: path, + librarySearchPaths: normalizeSearchPaths(librarySearchPaths...), + } +} + +// Drivers returns a Locator for driver libraries. +func (r *Driver) Libraries() lookup.Locator { + return lookup.NewLibraryLocator( + lookup.WithLogger(r.logger), + lookup.WithRoot(r.Root), + lookup.WithSearchPaths(r.librarySearchPaths...), + ) +} + +// normalizeSearchPaths takes a list of paths and normalized these. +// Each of the elements in the list is expanded if it is a path list and the +// resultant list is returned. +// This allows, for example, for the contents of `PATH` or `LD_LIBRARY_PATH` to +// be passed as a search path directly. +func normalizeSearchPaths(paths ...string) []string { + var normalized []string + for _, path := range paths { + normalized = append(normalized, filepath.SplitList(path)...) + } + return normalized +} diff --git a/vendor/github.com/NVIDIA/nvidia-container-toolkit/internal/oci/spec.go b/vendor/github.com/NVIDIA/nvidia-container-toolkit/internal/oci/spec.go index f433e1c48..2daa7503d 100644 --- a/vendor/github.com/NVIDIA/nvidia-container-toolkit/internal/oci/spec.go +++ b/vendor/github.com/NVIDIA/nvidia-container-toolkit/internal/oci/spec.go @@ -19,8 +19,9 @@ package oci import ( "fmt" - "github.com/NVIDIA/nvidia-container-toolkit/internal/logger" "github.com/opencontainers/runtime-spec/specs-go" + + "github.com/NVIDIA/nvidia-container-toolkit/internal/logger" ) // SpecModifier defines an interface for modifying a (raw) OCI spec diff --git a/vendor/github.com/NVIDIA/nvidia-container-toolkit/internal/oci/spec_mock.go b/vendor/github.com/NVIDIA/nvidia-container-toolkit/internal/oci/spec_mock.go index ff8ff6476..f004d69c3 100644 --- a/vendor/github.com/NVIDIA/nvidia-container-toolkit/internal/oci/spec_mock.go +++ b/vendor/github.com/NVIDIA/nvidia-container-toolkit/internal/oci/spec_mock.go @@ -4,8 +4,9 @@ package oci import ( - "github.com/opencontainers/runtime-spec/specs-go" "sync" + + "github.com/opencontainers/runtime-spec/specs-go" ) // Ensure, that SpecMock does implement Spec. diff --git a/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/api.go b/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/api.go index 9d158d8d2..43aad6346 100644 --- a/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/api.go +++ b/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/api.go @@ -18,9 +18,10 @@ package nvcdi import ( "github.com/NVIDIA/go-nvlib/pkg/nvlib/device" - "github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/spec" "tags.cncf.io/container-device-interface/pkg/cdi" "tags.cncf.io/container-device-interface/specs-go" + + "github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/spec" ) const ( diff --git a/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/common-nvml.go b/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/common-nvml.go index a33cfc61a..4c634a72d 100644 --- a/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/common-nvml.go +++ b/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/common-nvml.go @@ -36,12 +36,12 @@ func (l *nvmllib) newCommonNVMLDiscoverer() (discover.Discover, error) { }, ) - graphicsMounts, err := discover.NewGraphicsMountsDiscoverer(l.logger, l.driverRoot, l.nvidiaCTKPath) + graphicsMounts, err := discover.NewGraphicsMountsDiscoverer(l.logger, l.driver, l.nvidiaCTKPath) if err != nil { l.logger.Warningf("failed to create discoverer for graphics mounts: %v", err) } - driverFiles, err := NewDriverDiscoverer(l.logger, l.driverRoot, l.nvidiaCTKPath, l.nvmllib) + driverFiles, err := NewDriverDiscoverer(l.logger, l.driver, l.nvidiaCTKPath, l.nvmllib) if err != nil { return nil, fmt.Errorf("failed to create discoverer for driver files: %v", err) } diff --git a/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/driver-nvml.go b/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/driver-nvml.go index cbc892af5..052e3241a 100644 --- a/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/driver-nvml.go +++ b/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/driver-nvml.go @@ -23,16 +23,18 @@ import ( "strings" "github.com/NVIDIA/go-nvlib/pkg/nvml" + "golang.org/x/sys/unix" + "github.com/NVIDIA/nvidia-container-toolkit/internal/discover" "github.com/NVIDIA/nvidia-container-toolkit/internal/logger" "github.com/NVIDIA/nvidia-container-toolkit/internal/lookup" "github.com/NVIDIA/nvidia-container-toolkit/internal/lookup/cuda" - "golang.org/x/sys/unix" + "github.com/NVIDIA/nvidia-container-toolkit/internal/lookup/root" ) // NewDriverDiscoverer creates a discoverer for the libraries and binaries associated with a driver installation. // The supplied NVML Library is used to query the expected driver version. -func NewDriverDiscoverer(logger logger.Interface, driverRoot string, nvidiaCTKPath string, nvmllib nvml.Interface) (discover.Discover, error) { +func NewDriverDiscoverer(logger logger.Interface, driver *root.Driver, nvidiaCTKPath string, nvmllib nvml.Interface) (discover.Discover, error) { if r := nvmllib.Init(); r != nvml.SUCCESS { return nil, fmt.Errorf("failed to initialize NVML: %v", r) } @@ -47,26 +49,26 @@ func NewDriverDiscoverer(logger logger.Interface, driverRoot string, nvidiaCTKPa return nil, fmt.Errorf("failed to determine driver version: %v", r) } - return newDriverVersionDiscoverer(logger, driverRoot, nvidiaCTKPath, version) + return newDriverVersionDiscoverer(logger, driver, nvidiaCTKPath, version) } -func newDriverVersionDiscoverer(logger logger.Interface, driverRoot string, nvidiaCTKPath string, version string) (discover.Discover, error) { - libraries, err := NewDriverLibraryDiscoverer(logger, driverRoot, nvidiaCTKPath, version) +func newDriverVersionDiscoverer(logger logger.Interface, driver *root.Driver, nvidiaCTKPath string, version string) (discover.Discover, error) { + libraries, err := NewDriverLibraryDiscoverer(logger, driver, nvidiaCTKPath, version) if err != nil { return nil, fmt.Errorf("failed to create discoverer for driver libraries: %v", err) } - ipcs, err := discover.NewIPCDiscoverer(logger, driverRoot) + ipcs, err := discover.NewIPCDiscoverer(logger, driver.Root) if err != nil { return nil, fmt.Errorf("failed to create discoverer for IPC sockets: %v", err) } - firmwares, err := NewDriverFirmwareDiscoverer(logger, driverRoot, version) + firmwares, err := NewDriverFirmwareDiscoverer(logger, driver.Root, version) if err != nil { return nil, fmt.Errorf("failed to create discoverer for GSP firmware: %v", err) } - binaries := NewDriverBinariesDiscoverer(logger, driverRoot) + binaries := NewDriverBinariesDiscoverer(logger, driver.Root) d := discover.Merge( libraries, @@ -79,8 +81,8 @@ func newDriverVersionDiscoverer(logger logger.Interface, driverRoot string, nvid } // NewDriverLibraryDiscoverer creates a discoverer for the libraries associated with the specified driver version. -func NewDriverLibraryDiscoverer(logger logger.Interface, driverRoot string, nvidiaCTKPath string, version string) (discover.Discover, error) { - libraryPaths, err := getVersionLibs(logger, driverRoot, version) +func NewDriverLibraryDiscoverer(logger logger.Interface, driver *root.Driver, nvidiaCTKPath string, version string) (discover.Discover, error) { + libraryPaths, err := getVersionLibs(logger, driver, version) if err != nil { return nil, fmt.Errorf("failed to get libraries for driver version: %v", err) } @@ -89,9 +91,9 @@ func NewDriverLibraryDiscoverer(logger logger.Interface, driverRoot string, nvid logger, lookup.NewFileLocator( lookup.WithLogger(logger), - lookup.WithRoot(driverRoot), + lookup.WithRoot(driver.Root), ), - driverRoot, + driver.Root, libraryPaths, ) @@ -185,12 +187,11 @@ func NewDriverBinariesDiscoverer(logger logger.Interface, driverRoot string) dis // getVersionLibs checks the LDCache for libraries ending in the specified driver version. // Although the ldcache at the specified driverRoot is queried, the paths are returned relative to this driverRoot. // This allows the standard mount location logic to be used for resolving the mounts. -func getVersionLibs(logger logger.Interface, driverRoot string, version string) ([]string, error) { +func getVersionLibs(logger logger.Interface, driver *root.Driver, version string) ([]string, error) { logger.Infof("Using driver version %v", version) libCudaPaths, err := cuda.New( - cuda.WithLogger(logger), - cuda.WithDriverRoot(driverRoot), + driver.Libraries(), ).Locate("." + version) if err != nil { return nil, fmt.Errorf("failed to locate libcuda.so.%v: %v", version, err) @@ -208,13 +209,13 @@ func getVersionLibs(logger logger.Interface, driverRoot string, version string) return nil, fmt.Errorf("failed to locate libraries for driver version %v: %v", version, err) } - if driverRoot == "/" || driverRoot == "" { + if driver.Root == "/" || driver.Root == "" { return libs, nil } var relative []string for _, l := range libs { - relative = append(relative, strings.TrimPrefix(l, driverRoot)) + relative = append(relative, strings.TrimPrefix(l, driver.Root)) } return relative, nil diff --git a/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/full-gpu-nvml.go b/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/full-gpu-nvml.go index d47c802dd..6793cbbc5 100644 --- a/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/full-gpu-nvml.go +++ b/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/full-gpu-nvml.go @@ -24,12 +24,13 @@ import ( "github.com/NVIDIA/go-nvlib/pkg/nvlib/device" "github.com/NVIDIA/go-nvlib/pkg/nvml" + "tags.cncf.io/container-device-interface/pkg/cdi" + "tags.cncf.io/container-device-interface/specs-go" + "github.com/NVIDIA/nvidia-container-toolkit/internal/discover" "github.com/NVIDIA/nvidia-container-toolkit/internal/edits" "github.com/NVIDIA/nvidia-container-toolkit/internal/info/drm" "github.com/NVIDIA/nvidia-container-toolkit/internal/logger" - "tags.cncf.io/container-device-interface/pkg/cdi" - "tags.cncf.io/container-device-interface/specs-go" ) // GetGPUDeviceSpecs returns the CDI device specs for the full GPU represented by 'device'. diff --git a/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/gds.go b/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/gds.go index c50ab5e5d..cb1bf760c 100644 --- a/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/gds.go +++ b/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/gds.go @@ -20,11 +20,12 @@ import ( "fmt" "github.com/NVIDIA/go-nvlib/pkg/nvlib/device" + "tags.cncf.io/container-device-interface/pkg/cdi" + "tags.cncf.io/container-device-interface/specs-go" + "github.com/NVIDIA/nvidia-container-toolkit/internal/discover" "github.com/NVIDIA/nvidia-container-toolkit/internal/edits" "github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/spec" - "tags.cncf.io/container-device-interface/pkg/cdi" - "tags.cncf.io/container-device-interface/specs-go" ) type gdslib nvcdilib diff --git a/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/lib-csv.go b/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/lib-csv.go index 14b6b5a08..86d86f93e 100644 --- a/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/lib-csv.go +++ b/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/lib-csv.go @@ -20,12 +20,13 @@ import ( "fmt" "github.com/NVIDIA/go-nvlib/pkg/nvlib/device" + "tags.cncf.io/container-device-interface/pkg/cdi" + "tags.cncf.io/container-device-interface/specs-go" + "github.com/NVIDIA/nvidia-container-toolkit/internal/discover" "github.com/NVIDIA/nvidia-container-toolkit/internal/edits" "github.com/NVIDIA/nvidia-container-toolkit/internal/platform-support/tegra" "github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/spec" - "tags.cncf.io/container-device-interface/pkg/cdi" - "tags.cncf.io/container-device-interface/specs-go" ) type csvlib nvcdilib diff --git a/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/lib-nvml.go b/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/lib-nvml.go index 82cc9b6e8..3ce68ec9d 100644 --- a/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/lib-nvml.go +++ b/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/lib-nvml.go @@ -21,10 +21,11 @@ import ( "github.com/NVIDIA/go-nvlib/pkg/nvlib/device" "github.com/NVIDIA/go-nvlib/pkg/nvml" - "github.com/NVIDIA/nvidia-container-toolkit/internal/edits" - "github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/spec" "tags.cncf.io/container-device-interface/pkg/cdi" "tags.cncf.io/container-device-interface/specs-go" + + "github.com/NVIDIA/nvidia-container-toolkit/internal/edits" + "github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/spec" ) type nvmllib nvcdilib diff --git a/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/lib-wsl.go b/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/lib-wsl.go index b2ecf1737..b01c82683 100644 --- a/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/lib-wsl.go +++ b/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/lib-wsl.go @@ -20,10 +20,11 @@ import ( "fmt" "github.com/NVIDIA/go-nvlib/pkg/nvlib/device" - "github.com/NVIDIA/nvidia-container-toolkit/internal/edits" - "github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/spec" "tags.cncf.io/container-device-interface/pkg/cdi" "tags.cncf.io/container-device-interface/specs-go" + + "github.com/NVIDIA/nvidia-container-toolkit/internal/edits" + "github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/spec" ) type wsllib nvcdilib diff --git a/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/lib.go b/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/lib.go index 8a60ac6b7..2424c84b1 100644 --- a/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/lib.go +++ b/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/lib.go @@ -22,7 +22,9 @@ import ( "github.com/NVIDIA/go-nvlib/pkg/nvlib/device" "github.com/NVIDIA/go-nvlib/pkg/nvlib/info" "github.com/NVIDIA/go-nvlib/pkg/nvml" + "github.com/NVIDIA/nvidia-container-toolkit/internal/logger" + "github.com/NVIDIA/nvidia-container-toolkit/internal/lookup/root" "github.com/NVIDIA/nvidia-container-toolkit/internal/platform-support/tegra/csv" "github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/spec" "github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/transform" @@ -54,6 +56,7 @@ type nvcdilib struct { vendor string class string + driver *root.Driver infolib info.Interface mergedDeviceOptions []transform.MergedDeviceOption @@ -87,6 +90,9 @@ func New(opts ...Option) (Interface, error) { l.infolib = info.New() } + // TODO: We need to improve the construction of this driver root. + l.driver = root.New(l.logger, l.driverRoot, l.librarySearchPaths) + var lib Interface switch l.resolveMode() { case ModeCSV: diff --git a/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/management.go b/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/management.go index 9352e110c..36b4b27bf 100644 --- a/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/management.go +++ b/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/management.go @@ -22,12 +22,13 @@ import ( "strings" "github.com/NVIDIA/go-nvlib/pkg/nvlib/device" + "tags.cncf.io/container-device-interface/pkg/cdi" + "tags.cncf.io/container-device-interface/specs-go" + "github.com/NVIDIA/nvidia-container-toolkit/internal/discover" "github.com/NVIDIA/nvidia-container-toolkit/internal/edits" "github.com/NVIDIA/nvidia-container-toolkit/internal/lookup/cuda" "github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/spec" - "tags.cncf.io/container-device-interface/pkg/cdi" - "tags.cncf.io/container-device-interface/specs-go" ) type managementlib nvcdilib @@ -65,7 +66,7 @@ func (m *managementlib) GetCommonEdits() (*cdi.ContainerEdits, error) { return nil, fmt.Errorf("failed to get CUDA version: %v", err) } - driver, err := newDriverVersionDiscoverer(m.logger, m.driverRoot, m.nvidiaCTKPath, version) + driver, err := newDriverVersionDiscoverer(m.logger, m.driver, m.nvidiaCTKPath, version) if err != nil { return nil, fmt.Errorf("failed to create driver library discoverer: %v", err) } @@ -86,8 +87,7 @@ func (m *managementlib) getCudaVersion() (string, error) { } libCudaPaths, err := cuda.New( - cuda.WithLogger(m.logger), - cuda.WithDriverRoot(m.driverRoot), + m.driver.Libraries(), ).Locate(".*.*") if err != nil { return "", fmt.Errorf("failed to locate libcuda.so: %v", err) diff --git a/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/mig-device-nvml.go b/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/mig-device-nvml.go index db8601d9b..aa51a0f77 100644 --- a/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/mig-device-nvml.go +++ b/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/mig-device-nvml.go @@ -21,12 +21,13 @@ import ( "github.com/NVIDIA/go-nvlib/pkg/nvlib/device" "github.com/NVIDIA/go-nvlib/pkg/nvml" + "tags.cncf.io/container-device-interface/pkg/cdi" + "tags.cncf.io/container-device-interface/specs-go" + "github.com/NVIDIA/nvidia-container-toolkit/internal/discover" "github.com/NVIDIA/nvidia-container-toolkit/internal/edits" "github.com/NVIDIA/nvidia-container-toolkit/internal/logger" "github.com/NVIDIA/nvidia-container-toolkit/internal/nvcaps" - "tags.cncf.io/container-device-interface/pkg/cdi" - "tags.cncf.io/container-device-interface/specs-go" ) // GetMIGDeviceSpecs returns the CDI device specs for the full GPU represented by 'device'. diff --git a/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/mofed.go b/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/mofed.go index 39b0f5379..3f56b2d5b 100644 --- a/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/mofed.go +++ b/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/mofed.go @@ -20,11 +20,12 @@ import ( "fmt" "github.com/NVIDIA/go-nvlib/pkg/nvlib/device" + "tags.cncf.io/container-device-interface/pkg/cdi" + "tags.cncf.io/container-device-interface/specs-go" + "github.com/NVIDIA/nvidia-container-toolkit/internal/discover" "github.com/NVIDIA/nvidia-container-toolkit/internal/edits" "github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/spec" - "tags.cncf.io/container-device-interface/pkg/cdi" - "tags.cncf.io/container-device-interface/specs-go" ) type mofedlib nvcdilib diff --git a/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/namer_nvml_mock.go b/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/namer_nvml_mock.go index 4cc958f7d..68bc1782c 100644 --- a/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/namer_nvml_mock.go +++ b/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/namer_nvml_mock.go @@ -4,8 +4,9 @@ package nvcdi import ( - "github.com/NVIDIA/go-nvlib/pkg/nvml" "sync" + + "github.com/NVIDIA/go-nvlib/pkg/nvml" ) // Ensure, that nvmlUUIDerMock does implement nvmlUUIDer. diff --git a/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/options.go b/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/options.go index 86bb877de..e1c7cf526 100644 --- a/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/options.go +++ b/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/options.go @@ -19,6 +19,7 @@ package nvcdi import ( "github.com/NVIDIA/go-nvlib/pkg/nvlib/device" "github.com/NVIDIA/go-nvlib/pkg/nvml" + "github.com/NVIDIA/nvidia-container-toolkit/internal/logger" "github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/transform" ) diff --git a/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/spec/builder.go b/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/spec/builder.go index c69308007..8fb80a68a 100644 --- a/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/spec/builder.go +++ b/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/spec/builder.go @@ -20,10 +20,11 @@ import ( "fmt" "os" - "github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/transform" "tags.cncf.io/container-device-interface/pkg/cdi" "tags.cncf.io/container-device-interface/pkg/parser" "tags.cncf.io/container-device-interface/specs-go" + + "github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/transform" ) type builder struct { diff --git a/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/transform/root.go b/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/transform/root.go deleted file mode 100644 index 555b9e51a..000000000 --- a/vendor/github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/transform/root.go +++ /dev/null @@ -1,114 +0,0 @@ -/** -# Copyright (c) NVIDIA CORPORATION. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -**/ - -package transform - -import ( - "fmt" - "path/filepath" - "strings" - - "tags.cncf.io/container-device-interface/specs-go" -) - -type rootTransformer struct { - root string - targetRoot string -} - -var _ Transformer = (*rootTransformer)(nil) - -// NewRootTransformer creates a new transformer for modifying -// the root for paths in a CDI spec. If both roots are identical, -// this tranformer is a no-op. -func NewRootTransformer(root string, targetRoot string) Transformer { - if root == targetRoot { - return NewNoopTransformer() - } - - t := rootTransformer{ - root: root, - targetRoot: targetRoot, - } - return t -} - -// Transform replaces the root in a spec with a new root. -// It walks the spec and replaces all host paths that start with root with the target root. -func (t rootTransformer) Transform(spec *specs.Spec) error { - if spec == nil { - return nil - } - - for _, d := range spec.Devices { - d := d - if err := t.applyToEdits(&d.ContainerEdits); err != nil { - return fmt.Errorf("failed to apply root transform to device %s: %w", d.Name, err) - } - } - - if err := t.applyToEdits(&spec.ContainerEdits); err != nil { - return fmt.Errorf("failed to apply root transform to spec: %w", err) - } - return nil -} - -func (t rootTransformer) applyToEdits(edits *specs.ContainerEdits) error { - for i, dn := range edits.DeviceNodes { - dn.HostPath = t.transformPath(dn.HostPath) - edits.DeviceNodes[i] = dn - } - - for i, hook := range edits.Hooks { - hook.Path = t.transformPath(hook.Path) - - var args []string - for _, arg := range hook.Args { - if !strings.Contains(arg, "::") { - args = append(args, t.transformPath(arg)) - continue - } - - // For the 'create-symlinks' hook, special care is taken for the - // '--link' flag argument which takes the form ::. - // Both paths, the target and link paths, are transformed. - split := strings.Split(arg, "::") - if len(split) != 2 { - return fmt.Errorf("unexpected number of '::' separators in hook argument") - } - split[0] = t.transformPath(split[0]) - split[1] = t.transformPath(split[1]) - args = append(args, strings.Join(split, "::")) - } - hook.Args = args - edits.Hooks[i] = hook - } - - for i, mount := range edits.Mounts { - mount.HostPath = t.transformPath(mount.HostPath) - edits.Mounts[i] = mount - } - - return nil -} - -func (t rootTransformer) transformPath(path string) string { - if !strings.HasPrefix(path, t.root) { - return path - } - - return filepath.Join(t.targetRoot, strings.TrimPrefix(path, t.root)) -} diff --git a/vendor/modules.txt b/vendor/modules.txt index 57379854a..69b44b773 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -7,7 +7,7 @@ github.com/NVIDIA/go-nvlib/pkg/nvml ## explicit; go 1.15 github.com/NVIDIA/go-nvml/pkg/dl github.com/NVIDIA/go-nvml/pkg/nvml -# github.com/NVIDIA/nvidia-container-toolkit v1.14.4-0.20231120225202-039d7fd32429 +# github.com/NVIDIA/nvidia-container-toolkit v1.15.0-rc.1 ## explicit; go 1.20 github.com/NVIDIA/nvidia-container-toolkit/internal/config/image github.com/NVIDIA/nvidia-container-toolkit/internal/discover @@ -19,6 +19,7 @@ github.com/NVIDIA/nvidia-container-toolkit/internal/ldcache github.com/NVIDIA/nvidia-container-toolkit/internal/logger github.com/NVIDIA/nvidia-container-toolkit/internal/lookup github.com/NVIDIA/nvidia-container-toolkit/internal/lookup/cuda +github.com/NVIDIA/nvidia-container-toolkit/internal/lookup/root github.com/NVIDIA/nvidia-container-toolkit/internal/lookup/symlinks github.com/NVIDIA/nvidia-container-toolkit/internal/nvcaps github.com/NVIDIA/nvidia-container-toolkit/internal/oci