mirror of
https://github.com/NVIDIA/nvidia-container-toolkit
synced 2024-11-29 07:21:46 +00:00
Move discover.FindNvidiaCTK to config.ResolveNVIDIACTKPath
Signed-off-by: Evan Lezar <elezar@nvidia.com>
This commit is contained in:
parent
f9df36c473
commit
9378d0cd0f
@ -22,7 +22,7 @@ import (
|
|||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/NVIDIA/nvidia-container-toolkit/internal/discover"
|
"github.com/NVIDIA/nvidia-container-toolkit/internal/config"
|
||||||
"github.com/NVIDIA/nvidia-container-toolkit/internal/edits"
|
"github.com/NVIDIA/nvidia-container-toolkit/internal/edits"
|
||||||
"github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi"
|
"github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi"
|
||||||
"github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/spec"
|
"github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/spec"
|
||||||
@ -154,7 +154,7 @@ func (m command) validateFlags(c *cli.Context, opts *options) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
cfg.nvidiaCTKPath = discover.FindNvidiaCTK(m.logger, cfg.nvidiaCTKPath)
|
opts.nvidiaCTKPath = config.ResolveNVIDIACTKPath(m.logger, opts.nvidiaCTKPath)
|
||||||
|
|
||||||
if outputFileFormat := formatFromFilename(opts.output); outputFileFormat != "" {
|
if outputFileFormat := formatFromFilename(opts.output); outputFileFormat != "" {
|
||||||
m.logger.Debugf("Inferred output format as %q from output file name", outputFileFormat)
|
m.logger.Debugf("Inferred output format as %q from output file name", outputFileFormat)
|
||||||
|
@ -22,15 +22,21 @@ import (
|
|||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
"path"
|
"path"
|
||||||
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"github.com/NVIDIA/nvidia-container-toolkit/internal/lookup"
|
||||||
"github.com/container-orchestrated-devices/container-device-interface/pkg/cdi"
|
"github.com/container-orchestrated-devices/container-device-interface/pkg/cdi"
|
||||||
"github.com/pelletier/go-toml"
|
"github.com/pelletier/go-toml"
|
||||||
|
"github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
configOverride = "XDG_CONFIG_HOME"
|
configOverride = "XDG_CONFIG_HOME"
|
||||||
configFilePath = "nvidia-container-runtime/config.toml"
|
configFilePath = "nvidia-container-runtime/config.toml"
|
||||||
|
|
||||||
|
nvidiaCTKExecutable = "nvidia-ctk"
|
||||||
|
nvidiaCTKDefaultFilePath = "/usr/bin/nvidia-ctk"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -181,7 +187,7 @@ func GetDefaultConfigToml() (*toml.Tree, error) {
|
|||||||
tree.Set("nvidia-container-runtime.modes.cdi.annotation-prefixes", []string{cdi.AnnotationPrefix})
|
tree.Set("nvidia-container-runtime.modes.cdi.annotation-prefixes", []string{cdi.AnnotationPrefix})
|
||||||
|
|
||||||
// nvidia-ctk
|
// nvidia-ctk
|
||||||
tree.Set("nvidia-ctk.path", "nvidia-ctk")
|
tree.Set("nvidia-ctk.path", nvidiaCTKExecutable)
|
||||||
|
|
||||||
return tree, nil
|
return tree, nil
|
||||||
}
|
}
|
||||||
@ -232,3 +238,33 @@ func getDistIDLike() []string {
|
|||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ResolveNVIDIACTKPath resolves the path to the nvidia-ctk binary.
|
||||||
|
// This executable is used in hooks and needs to be an absolute path.
|
||||||
|
// If the path is specified as an absolute path, it is used directly
|
||||||
|
// without checking for existence of an executable at that path.
|
||||||
|
func ResolveNVIDIACTKPath(logger *logrus.Logger, nvidiaCTKPath string) string {
|
||||||
|
if filepath.IsAbs(nvidiaCTKPath) {
|
||||||
|
logger.Debugf("Using specified NVIDIA Container Toolkit CLI path %v", nvidiaCTKPath)
|
||||||
|
return nvidiaCTKPath
|
||||||
|
}
|
||||||
|
|
||||||
|
if nvidiaCTKPath == "" {
|
||||||
|
nvidiaCTKPath = nvidiaCTKExecutable
|
||||||
|
}
|
||||||
|
logger.Debugf("Locating NVIDIA Container Toolkit CLI as %v", nvidiaCTKPath)
|
||||||
|
lookup := lookup.NewExecutableLocator(logger, "")
|
||||||
|
hookPath := nvidiaCTKDefaultFilePath
|
||||||
|
targets, err := lookup.Locate(nvidiaCTKPath)
|
||||||
|
if err != nil {
|
||||||
|
logger.Warnf("Failed to locate %v: %v", nvidiaCTKPath, err)
|
||||||
|
} else if len(targets) == 0 {
|
||||||
|
logger.Warnf("%v not found", nvidiaCTKPath)
|
||||||
|
} else {
|
||||||
|
logger.Debugf("Found %v candidates: %v", nvidiaCTKPath, targets)
|
||||||
|
hookPath = targets[0]
|
||||||
|
}
|
||||||
|
logger.Debugf("Using NVIDIA Container Toolkit CLI path %v", hookPath)
|
||||||
|
|
||||||
|
return hookPath
|
||||||
|
}
|
||||||
|
@ -19,14 +19,7 @@ package discover
|
|||||||
import (
|
import (
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
|
||||||
"github.com/NVIDIA/nvidia-container-toolkit/internal/lookup"
|
|
||||||
"github.com/container-orchestrated-devices/container-device-interface/pkg/cdi"
|
"github.com/container-orchestrated-devices/container-device-interface/pkg/cdi"
|
||||||
"github.com/sirupsen/logrus"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
nvidiaCTKExecutable = "nvidia-ctk"
|
|
||||||
nvidiaCTKDefaultFilePath = "/usr/bin/nvidia-ctk"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var _ Discover = (*Hook)(nil)
|
var _ Discover = (*Hook)(nil)
|
||||||
@ -72,32 +65,3 @@ func CreateNvidiaCTKHook(nvidiaCTKPath string, hookName string, additionalArgs .
|
|||||||
Args: append([]string{filepath.Base(nvidiaCTKPath), "hook", hookName}, additionalArgs...),
|
Args: append([]string{filepath.Base(nvidiaCTKPath), "hook", hookName}, additionalArgs...),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// FindNvidiaCTK locates the nvidia-ctk executable to be used in hooks.
|
|
||||||
// If an nvidia-ctk path is specified as an absolute path, it is used directly
|
|
||||||
// without checking for existence of an executable at that path.
|
|
||||||
func FindNvidiaCTK(logger *logrus.Logger, nvidiaCTKPath string) string {
|
|
||||||
if filepath.IsAbs(nvidiaCTKPath) {
|
|
||||||
logger.Debugf("Using specified NVIDIA Container Toolkit CLI path %v", nvidiaCTKPath)
|
|
||||||
return nvidiaCTKPath
|
|
||||||
}
|
|
||||||
|
|
||||||
if nvidiaCTKPath == "" {
|
|
||||||
nvidiaCTKPath = nvidiaCTKExecutable
|
|
||||||
}
|
|
||||||
logger.Debugf("Locating NVIDIA Container Toolkit CLI as %v", nvidiaCTKPath)
|
|
||||||
lookup := lookup.NewExecutableLocator(logger, "")
|
|
||||||
hookPath := nvidiaCTKDefaultFilePath
|
|
||||||
targets, err := lookup.Locate(nvidiaCTKPath)
|
|
||||||
if err != nil {
|
|
||||||
logger.Warnf("Failed to locate %v: %v", nvidiaCTKPath, err)
|
|
||||||
} else if len(targets) == 0 {
|
|
||||||
logger.Warnf("%v not found", nvidiaCTKPath)
|
|
||||||
} else {
|
|
||||||
logger.Debugf("Found %v candidates: %v", nvidiaCTKPath, targets)
|
|
||||||
hookPath = targets[0]
|
|
||||||
}
|
|
||||||
logger.Debugf("Using NVIDIA Container Toolkit CLI path %v", hookPath)
|
|
||||||
|
|
||||||
return hookPath
|
|
||||||
}
|
|
||||||
|
@ -22,7 +22,6 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/NVIDIA/nvidia-container-toolkit/internal/config"
|
"github.com/NVIDIA/nvidia-container-toolkit/internal/config"
|
||||||
"github.com/NVIDIA/nvidia-container-toolkit/internal/discover"
|
|
||||||
"github.com/NVIDIA/nvidia-container-toolkit/internal/info"
|
"github.com/NVIDIA/nvidia-container-toolkit/internal/info"
|
||||||
"github.com/opencontainers/runtime-spec/specs-go"
|
"github.com/opencontainers/runtime-spec/specs-go"
|
||||||
)
|
)
|
||||||
@ -65,7 +64,7 @@ func (r rt) Run(argv []string) (rerr error) {
|
|||||||
if r.modeOverride != "" {
|
if r.modeOverride != "" {
|
||||||
cfg.NVIDIAContainerRuntimeConfig.Mode = r.modeOverride
|
cfg.NVIDIAContainerRuntimeConfig.Mode = r.modeOverride
|
||||||
}
|
}
|
||||||
cfg.NVIDIACTKConfig.Path = discover.FindNvidiaCTK(r.logger.Logger, cfg.NVIDIACTKConfig.Path)
|
cfg.NVIDIACTKConfig.Path = config.ResolveNVIDIACTKPath(r.logger.Logger, cfg.NVIDIACTKConfig.Path)
|
||||||
|
|
||||||
// Print the config to the output.
|
// Print the config to the output.
|
||||||
configJSON, err := json.MarshalIndent(cfg, "", " ")
|
configJSON, err := json.MarshalIndent(cfg, "", " ")
|
||||||
|
Loading…
Reference in New Issue
Block a user