mirror of
https://github.com/NVIDIA/nvidia-container-toolkit
synced 2025-04-01 08:02:41 +00:00
Move tegra-specifics to new package
Signed-off-by: Evan Lezar <elezar@nvidia.com>
This commit is contained in:
parent
01a7f7bb8e
commit
918bd03488
@ -23,8 +23,8 @@ 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/csv"
|
|
||||||
"github.com/NVIDIA/nvidia-container-toolkit/internal/logger"
|
"github.com/NVIDIA/nvidia-container-toolkit/internal/logger"
|
||||||
|
"github.com/NVIDIA/nvidia-container-toolkit/internal/platform-support/tegra/csv"
|
||||||
"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"
|
||||||
"github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/transform"
|
"github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/transform"
|
||||||
|
@ -22,11 +22,11 @@ import (
|
|||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/NVIDIA/nvidia-container-toolkit/internal/discover/csv"
|
|
||||||
"github.com/NVIDIA/nvidia-container-toolkit/internal/logger"
|
"github.com/NVIDIA/nvidia-container-toolkit/internal/logger"
|
||||||
"github.com/NVIDIA/nvidia-container-toolkit/internal/lookup"
|
"github.com/NVIDIA/nvidia-container-toolkit/internal/lookup"
|
||||||
"github.com/NVIDIA/nvidia-container-toolkit/internal/lookup/symlinks"
|
"github.com/NVIDIA/nvidia-container-toolkit/internal/lookup/symlinks"
|
||||||
"github.com/NVIDIA/nvidia-container-toolkit/internal/oci"
|
"github.com/NVIDIA/nvidia-container-toolkit/internal/oci"
|
||||||
|
"github.com/NVIDIA/nvidia-container-toolkit/internal/platform-support/tegra/csv"
|
||||||
"github.com/urfave/cli/v2"
|
"github.com/urfave/cli/v2"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -23,10 +23,10 @@ import (
|
|||||||
"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/cuda"
|
"github.com/NVIDIA/nvidia-container-toolkit/internal/cuda"
|
||||||
"github.com/NVIDIA/nvidia-container-toolkit/internal/discover"
|
"github.com/NVIDIA/nvidia-container-toolkit/internal/discover"
|
||||||
"github.com/NVIDIA/nvidia-container-toolkit/internal/discover/csv"
|
|
||||||
"github.com/NVIDIA/nvidia-container-toolkit/internal/logger"
|
"github.com/NVIDIA/nvidia-container-toolkit/internal/logger"
|
||||||
"github.com/NVIDIA/nvidia-container-toolkit/internal/modifier/cdi"
|
"github.com/NVIDIA/nvidia-container-toolkit/internal/modifier/cdi"
|
||||||
"github.com/NVIDIA/nvidia-container-toolkit/internal/oci"
|
"github.com/NVIDIA/nvidia-container-toolkit/internal/oci"
|
||||||
|
"github.com/NVIDIA/nvidia-container-toolkit/internal/platform-support/tegra/csv"
|
||||||
"github.com/NVIDIA/nvidia-container-toolkit/internal/requirements"
|
"github.com/NVIDIA/nvidia-container-toolkit/internal/requirements"
|
||||||
"github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi"
|
"github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi"
|
||||||
)
|
)
|
||||||
|
@ -14,23 +14,24 @@
|
|||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
**/
|
**/
|
||||||
|
|
||||||
package discover
|
package tegra
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/NVIDIA/nvidia-container-toolkit/internal/discover/csv"
|
"github.com/NVIDIA/nvidia-container-toolkit/internal/discover"
|
||||||
"github.com/NVIDIA/nvidia-container-toolkit/internal/logger"
|
"github.com/NVIDIA/nvidia-container-toolkit/internal/logger"
|
||||||
"github.com/NVIDIA/nvidia-container-toolkit/internal/lookup"
|
"github.com/NVIDIA/nvidia-container-toolkit/internal/lookup"
|
||||||
|
"github.com/NVIDIA/nvidia-container-toolkit/internal/platform-support/tegra/csv"
|
||||||
)
|
)
|
||||||
|
|
||||||
// NewFromCSVFiles creates a discoverer for the specified CSV files. A logger is also supplied.
|
// newDiscovererFromCSVFiles creates a discoverer for the specified CSV files. A logger is also supplied.
|
||||||
// The constructed discoverer is comprised of a list, with each element in the list being associated with a
|
// The constructed discoverer is comprised of a list, with each element in the list being associated with a
|
||||||
// single CSV files.
|
// single CSV files.
|
||||||
func NewFromCSVFiles(logger logger.Interface, files []string, driverRoot string) (Discover, error) {
|
func newDiscovererFromCSVFiles(logger logger.Interface, files []string, driverRoot string) (discover.Discover, error) {
|
||||||
if len(files) == 0 {
|
if len(files) == 0 {
|
||||||
logger.Warningf("No CSV files specified")
|
logger.Warningf("No CSV files specified")
|
||||||
return None{}, nil
|
return discover.None{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
symlinkLocator := lookup.NewSymlinkLocator(
|
symlinkLocator := lookup.NewSymlinkLocator(
|
||||||
@ -74,12 +75,12 @@ func loadCSVFile(logger logger.Interface, filename string) ([]*csv.MountSpec, er
|
|||||||
|
|
||||||
// newFromMountSpecs creates a discoverer for the CSV file. A logger is also supplied.
|
// newFromMountSpecs creates a discoverer for the CSV file. A logger is also supplied.
|
||||||
// A list of csvDiscoverers is returned, with each being associated with a single MountSpecType.
|
// A list of csvDiscoverers is returned, with each being associated with a single MountSpecType.
|
||||||
func newFromMountSpecs(logger logger.Interface, locators map[csv.MountSpecType]lookup.Locator, driverRoot string, targets []*csv.MountSpec) (Discover, error) {
|
func newFromMountSpecs(logger logger.Interface, locators map[csv.MountSpecType]lookup.Locator, driverRoot string, targets []*csv.MountSpec) (discover.Discover, error) {
|
||||||
if len(targets) == 0 {
|
if len(targets) == 0 {
|
||||||
return &None{}, nil
|
return &discover.None{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
var discoverers []Discover
|
var discoverers []discover.Discover
|
||||||
var mountSpecTypes []csv.MountSpecType
|
var mountSpecTypes []csv.MountSpecType
|
||||||
candidatesByType := make(map[csv.MountSpecType][]string)
|
candidatesByType := make(map[csv.MountSpecType][]string)
|
||||||
for _, t := range targets {
|
for _, t := range targets {
|
||||||
@ -95,16 +96,16 @@ func newFromMountSpecs(logger logger.Interface, locators map[csv.MountSpecType]l
|
|||||||
return nil, fmt.Errorf("no locator defined for '%v'", t)
|
return nil, fmt.Errorf("no locator defined for '%v'", t)
|
||||||
}
|
}
|
||||||
|
|
||||||
var m Discover
|
var m discover.Discover
|
||||||
switch t {
|
switch t {
|
||||||
case csv.MountSpecDev:
|
case csv.MountSpecDev:
|
||||||
m = NewDeviceDiscoverer(logger, locator, driverRoot, candidatesByType[t])
|
m = discover.NewDeviceDiscoverer(logger, locator, driverRoot, candidatesByType[t])
|
||||||
default:
|
default:
|
||||||
m = NewMounts(logger, locator, driverRoot, candidatesByType[t])
|
m = discover.NewMounts(logger, locator, driverRoot, candidatesByType[t])
|
||||||
}
|
}
|
||||||
discoverers = append(discoverers, m)
|
discoverers = append(discoverers, m)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return &list{discoverers: discoverers}, nil
|
return discover.Merge(discoverers...), nil
|
||||||
}
|
}
|
@ -14,14 +14,15 @@
|
|||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
**/
|
**/
|
||||||
|
|
||||||
package discover
|
package tegra
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/NVIDIA/nvidia-container-toolkit/internal/discover/csv"
|
"github.com/NVIDIA/nvidia-container-toolkit/internal/discover"
|
||||||
"github.com/NVIDIA/nvidia-container-toolkit/internal/lookup"
|
"github.com/NVIDIA/nvidia-container-toolkit/internal/lookup"
|
||||||
|
"github.com/NVIDIA/nvidia-container-toolkit/internal/platform-support/tegra/csv"
|
||||||
testlog "github.com/sirupsen/logrus/hooks/test"
|
testlog "github.com/sirupsen/logrus/hooks/test"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
@ -30,20 +31,32 @@ func TestNewFromMountSpec(t *testing.T) {
|
|||||||
logger, _ := testlog.NewNullLogger()
|
logger, _ := testlog.NewNullLogger()
|
||||||
|
|
||||||
locators := map[csv.MountSpecType]lookup.Locator{
|
locators := map[csv.MountSpecType]lookup.Locator{
|
||||||
"dev": &lookup.LocatorMock{},
|
"dev": &lookup.LocatorMock{
|
||||||
"lib": &lookup.LocatorMock{},
|
LocateFunc: func(pattern string) ([]string, error) {
|
||||||
|
return []string{"/dev/" + pattern}, nil
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"lib": &lookup.LocatorMock{
|
||||||
|
LocateFunc: func(pattern string) ([]string, error) {
|
||||||
|
return []string{"/lib/" + pattern}, nil
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
testCases := []struct {
|
testCases := []struct {
|
||||||
description string
|
description string
|
||||||
root string
|
root string
|
||||||
targets []*csv.MountSpec
|
targets []*csv.MountSpec
|
||||||
expectedError error
|
expectedError error
|
||||||
expectedDiscoverer Discover
|
expectedDevices []discover.Device
|
||||||
|
expectedMounts []discover.Mount
|
||||||
|
expectedHooks []discover.Hook
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
description: "empty targets returns None discoverer list",
|
description: "empty targets returns None discoverer list",
|
||||||
expectedDiscoverer: &None{},
|
expectedDevices: []discover.Device{},
|
||||||
|
expectedMounts: []discover.Mount{},
|
||||||
|
expectedHooks: []discover.Hook{},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
description: "unexpected locator returns error",
|
description: "unexpected locator returns error",
|
||||||
@ -71,59 +84,12 @@ func TestNewFromMountSpec(t *testing.T) {
|
|||||||
Path: "dev1",
|
Path: "dev1",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
expectedDiscoverer: &list{
|
expectedDevices: []discover.Device{
|
||||||
discoverers: []Discover{
|
{Path: "/dev/dev0", HostPath: "/dev/dev0"},
|
||||||
(*charDevices)(
|
{Path: "/dev/dev1", HostPath: "/dev/dev1"},
|
||||||
&mounts{
|
|
||||||
logger: logger,
|
|
||||||
lookup: locators["dev"],
|
|
||||||
root: "/",
|
|
||||||
required: []string{"dev0", "dev1"},
|
|
||||||
},
|
|
||||||
),
|
|
||||||
&mounts{
|
|
||||||
logger: logger,
|
|
||||||
lookup: locators["lib"],
|
|
||||||
root: "/",
|
|
||||||
required: []string{"lib0"},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
},
|
expectedMounts: []discover.Mount{
|
||||||
{
|
{Path: "/lib/lib0", HostPath: "/lib/lib0", Options: []string{"ro", "nosuid", "nodev", "bind"}},
|
||||||
description: "sets root",
|
|
||||||
targets: []*csv.MountSpec{
|
|
||||||
{
|
|
||||||
Type: "dev",
|
|
||||||
Path: "dev0",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
Type: "lib",
|
|
||||||
Path: "lib0",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
Type: "dev",
|
|
||||||
Path: "dev1",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
root: "/some/root",
|
|
||||||
expectedDiscoverer: &list{
|
|
||||||
discoverers: []Discover{
|
|
||||||
(*charDevices)(
|
|
||||||
&mounts{
|
|
||||||
logger: logger,
|
|
||||||
lookup: locators["dev"],
|
|
||||||
root: "/some/root",
|
|
||||||
required: []string{"dev0", "dev1"},
|
|
||||||
},
|
|
||||||
),
|
|
||||||
&mounts{
|
|
||||||
logger: logger,
|
|
||||||
lookup: locators["lib"],
|
|
||||||
root: "/some/root",
|
|
||||||
required: []string{"lib0"},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@ -136,7 +102,18 @@ func TestNewFromMountSpec(t *testing.T) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.EqualValues(t, tc.expectedDiscoverer, discoverer)
|
|
||||||
|
devices, err := discoverer.Devices()
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.EqualValues(t, tc.expectedDevices, devices)
|
||||||
|
|
||||||
|
mounts, err := discoverer.Mounts()
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.EqualValues(t, tc.expectedMounts, mounts)
|
||||||
|
|
||||||
|
hooks, err := discoverer.Hooks()
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.EqualValues(t, tc.expectedHooks, hooks)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -14,30 +14,31 @@
|
|||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
**/
|
**/
|
||||||
|
|
||||||
package discover
|
package tegra
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/NVIDIA/nvidia-container-toolkit/internal/discover/csv"
|
"github.com/NVIDIA/nvidia-container-toolkit/internal/discover"
|
||||||
"github.com/NVIDIA/nvidia-container-toolkit/internal/logger"
|
"github.com/NVIDIA/nvidia-container-toolkit/internal/logger"
|
||||||
"github.com/NVIDIA/nvidia-container-toolkit/internal/lookup"
|
"github.com/NVIDIA/nvidia-container-toolkit/internal/lookup"
|
||||||
"github.com/NVIDIA/nvidia-container-toolkit/internal/lookup/symlinks"
|
"github.com/NVIDIA/nvidia-container-toolkit/internal/lookup/symlinks"
|
||||||
|
"github.com/NVIDIA/nvidia-container-toolkit/internal/platform-support/tegra/csv"
|
||||||
)
|
)
|
||||||
|
|
||||||
type symlinkHook struct {
|
type symlinkHook struct {
|
||||||
None
|
discover.None
|
||||||
logger logger.Interface
|
logger logger.Interface
|
||||||
driverRoot string
|
driverRoot string
|
||||||
nvidiaCTKPath string
|
nvidiaCTKPath string
|
||||||
csvFiles []string
|
csvFiles []string
|
||||||
mountsFrom Discover
|
mountsFrom discover.Discover
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewCreateSymlinksHook creates a discoverer for a hook that creates required symlinks in the container
|
// createCSVSymlinkHooks creates a discoverer for a hook that creates required symlinks in the container
|
||||||
func NewCreateSymlinksHook(logger logger.Interface, csvFiles []string, mounts Discover, nvidiaCTKPath string) (Discover, error) {
|
func createCSVSymlinkHooks(logger logger.Interface, csvFiles []string, mounts discover.Discover, nvidiaCTKPath string) (discover.Discover, error) {
|
||||||
d := symlinkHook{
|
d := symlinkHook{
|
||||||
logger: logger,
|
logger: logger,
|
||||||
nvidiaCTKPath: nvidiaCTKPath,
|
nvidiaCTKPath: nvidiaCTKPath,
|
||||||
@ -49,25 +50,18 @@ func NewCreateSymlinksHook(logger logger.Interface, csvFiles []string, mounts Di
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Hooks returns a hook to create the symlinks from the required CSV files
|
// Hooks returns a hook to create the symlinks from the required CSV files
|
||||||
func (d symlinkHook) Hooks() ([]Hook, error) {
|
func (d symlinkHook) Hooks() ([]discover.Hook, error) {
|
||||||
specificLinks, err := d.getSpecificLinks()
|
specificLinks, err := d.getSpecificLinks()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("failed to determine specific links: %v", err)
|
return nil, fmt.Errorf("failed to determine specific links: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
csvSymlinks := d.getCSVFileSymlinks()
|
csvSymlinks := d.getCSVFileSymlinks()
|
||||||
var args []string
|
|
||||||
for _, link := range append(csvSymlinks, specificLinks...) {
|
|
||||||
args = append(args, "--link", link)
|
|
||||||
}
|
|
||||||
|
|
||||||
hook := CreateNvidiaCTKHook(
|
return discover.CreateCreateSymlinkHook(
|
||||||
d.nvidiaCTKPath,
|
d.nvidiaCTKPath,
|
||||||
"create-symlinks",
|
append(csvSymlinks, specificLinks...),
|
||||||
args...,
|
).Hooks()
|
||||||
)
|
|
||||||
|
|
||||||
return []Hook{hook}, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// getSpecificLinks returns the required specic links that need to be created
|
// getSpecificLinks returns the required specic links that need to be created
|
@ -41,12 +41,12 @@ func New(opts ...Option) (discover.Discover, error) {
|
|||||||
opt(o)
|
opt(o)
|
||||||
}
|
}
|
||||||
|
|
||||||
csvDiscoverer, err := discover.NewFromCSVFiles(o.logger, o.csvFiles, o.driverRoot)
|
csvDiscoverer, err := newDiscovererFromCSVFiles(o.logger, o.csvFiles, o.driverRoot)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("failed to create CSV discoverer: %v", err)
|
return nil, fmt.Errorf("failed to create CSV discoverer: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
createSymlinksHook, err := discover.NewCreateSymlinksHook(o.logger, o.csvFiles, csvDiscoverer, o.nvidiaCTKPath)
|
createSymlinksHook, err := createCSVSymlinkHooks(o.logger, o.csvFiles, csvDiscoverer, o.nvidiaCTKPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("failed to create symlink hook discoverer: %v", err)
|
return nil, fmt.Errorf("failed to create symlink hook discoverer: %v", err)
|
||||||
}
|
}
|
@ -20,8 +20,8 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/NVIDIA/nvidia-container-toolkit/internal/discover"
|
"github.com/NVIDIA/nvidia-container-toolkit/internal/discover"
|
||||||
"github.com/NVIDIA/nvidia-container-toolkit/internal/discover/tegra"
|
|
||||||
"github.com/NVIDIA/nvidia-container-toolkit/internal/edits"
|
"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"
|
"github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/spec"
|
||||||
"github.com/container-orchestrated-devices/container-device-interface/pkg/cdi"
|
"github.com/container-orchestrated-devices/container-device-interface/pkg/cdi"
|
||||||
"github.com/container-orchestrated-devices/container-device-interface/specs-go"
|
"github.com/container-orchestrated-devices/container-device-interface/specs-go"
|
||||||
|
@ -19,8 +19,8 @@ package nvcdi
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/NVIDIA/nvidia-container-toolkit/internal/discover/csv"
|
|
||||||
"github.com/NVIDIA/nvidia-container-toolkit/internal/logger"
|
"github.com/NVIDIA/nvidia-container-toolkit/internal/logger"
|
||||||
|
"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/spec"
|
||||||
"github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/transform"
|
"github.com/NVIDIA/nvidia-container-toolkit/pkg/nvcdi/transform"
|
||||||
"gitlab.com/nvidia/cloud-native/go-nvlib/pkg/nvlib/device"
|
"gitlab.com/nvidia/cloud-native/go-nvlib/pkg/nvlib/device"
|
||||||
|
Loading…
Reference in New Issue
Block a user