| /** |
| # 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 nvcdi |
| |
| import ( |
| "github.com/NVIDIA/go-nvlib/pkg/nvlib/device" |
| "github.com/NVIDIA/go-nvlib/pkg/nvlib/info" |
| "github.com/NVIDIA/go-nvml/pkg/nvml" |
| |
| "github.com/NVIDIA/nvidia-container-toolkit/internal/logger" |
| "github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/transform" |
| ) |
| |
| // Option is a function that configures the nvcdilib |
| type Option func(*nvcdilib) |
| |
| // WithDeviceLib sets the device library for the library |
| func WithDeviceLib(devicelib device.Interface) Option { |
| return func(l *nvcdilib) { |
| l.devicelib = devicelib |
| } |
| } |
| |
| // WithInfoLib sets the info library for CDI spec generation. |
| func WithInfoLib(infolib info.Interface) Option { |
| return func(l *nvcdilib) { |
| l.infolib = infolib |
| } |
| } |
| |
| // WithDeviceNamers sets the device namer for the library |
| func WithDeviceNamers(namers ...DeviceNamer) Option { |
| return func(l *nvcdilib) { |
| l.deviceNamers = namers |
| } |
| } |
| |
| // WithDriverRoot sets the driver root for the library |
| func WithDriverRoot(root string) Option { |
| return func(l *nvcdilib) { |
| l.driverRoot = root |
| } |
| } |
| |
| // WithDevRoot sets the root where /dev is located. |
| func WithDevRoot(root string) Option { |
| return func(l *nvcdilib) { |
| l.devRoot = root |
| } |
| } |
| |
| // WithLogger sets the logger for the library |
| func WithLogger(logger logger.Interface) Option { |
| return func(l *nvcdilib) { |
| l.logger = logger |
| } |
| } |
| |
| // WithNVIDIACTKPath sets the path to the NVIDIA Container Toolkit CLI path for the library |
| // |
| // Deprecated: Use WithNVIDIACDIHookPath instead. |
| func WithNVIDIACTKPath(path string) Option { |
| return WithNVIDIACDIHookPath(path) |
| } |
| |
| // WithNVIDIACDIHookPath sets the path to the NVIDIA Container Toolkit CLI path for the library |
| func WithNVIDIACDIHookPath(path string) Option { |
| return func(l *nvcdilib) { |
| l.nvidiaCDIHookPath = path |
| } |
| } |
| |
| // WithLdconfigPath sets the path to the ldconfig program |
| func WithLdconfigPath(path string) Option { |
| return func(l *nvcdilib) { |
| l.ldconfigPath = path |
| } |
| } |
| |
| // WithNvmlLib sets the nvml library for the library |
| func WithNvmlLib(nvmllib nvml.Interface) Option { |
| return func(l *nvcdilib) { |
| l.nvmllib = nvmllib |
| } |
| } |
| |
| // WithMode sets the discovery mode for the library |
| func WithMode(mode string) Option { |
| return func(l *nvcdilib) { |
| l.mode = mode |
| } |
| } |
| |
| // WithVendor sets the vendor for the library |
| func WithVendor(vendor string) Option { |
| return func(o *nvcdilib) { |
| o.vendor = vendor |
| } |
| } |
| |
| // WithClass sets the class for the library |
| func WithClass(class string) Option { |
| return func(o *nvcdilib) { |
| o.class = class |
| } |
| } |
| |
| // WithMergedDeviceOptions sets the merged device options for the library |
| // If these are not set, no merged device will be generated. |
| func WithMergedDeviceOptions(opts ...transform.MergedDeviceOption) Option { |
| return func(o *nvcdilib) { |
| o.mergedDeviceOptions = opts |
| } |
| } |
| |
| // WithCSVFiles sets the CSV files for the library |
| func WithCSVFiles(csvFiles []string) Option { |
| return func(o *nvcdilib) { |
| o.csvFiles = csvFiles |
| } |
| } |
| |
| // WithCSVIgnorePatterns sets the ignore patterns for entries in the CSV files. |
| func WithCSVIgnorePatterns(csvIgnorePatterns []string) Option { |
| return func(o *nvcdilib) { |
| o.csvIgnorePatterns = csvIgnorePatterns |
| } |
| } |
| |
| // WithConfigSearchPaths sets the search paths for config files. |
| func WithConfigSearchPaths(paths []string) Option { |
| return func(o *nvcdilib) { |
| o.configSearchPaths = paths |
| } |
| } |
| |
| // WithLibrarySearchPaths sets the library search paths. |
| // This is currently only used for CSV-mode. |
| func WithLibrarySearchPaths(paths []string) Option { |
| return func(o *nvcdilib) { |
| o.librarySearchPaths = paths |
| } |
| } |
| |
| // WithDisabledHook allows specific hooks to the disabled. |
| // This option can be specified multiple times for each hook. |
| func WithDisabledHook(hook HookName) Option { |
| return func(o *nvcdilib) { |
| if o.disabledHooks == nil { |
| o.disabledHooks = make(map[HookName]bool) |
| } |
| o.disabledHooks[hook] = true |
| } |
| } |