Fix create-device-node test when devices exist

This changes fixes the TestCreateControlDevices test on systems
where device nodes exist.

Signed-off-by: Evan Lezar <elezar@nvidia.com>
This commit is contained in:
Evan Lezar 2024-12-06 14:05:31 +01:00
parent b0a5fb9f86
commit 2529aebd6c
No known key found for this signature in database
2 changed files with 15 additions and 10 deletions

View File

@ -19,7 +19,6 @@ package nvdevices
import (
"errors"
"fmt"
"os"
"path/filepath"
"strings"
@ -66,7 +65,7 @@ func New(opts ...Option) (*Interface, error) {
if i.dryRun {
i.mknoder = &mknodLogger{i.logger}
} else {
i.mknoder = &mknodUnix{}
i.mknoder = &mknodUnix{i.logger}
}
return i, nil
}
@ -107,13 +106,6 @@ func (m *Interface) CreateNVIDIADevice(node string) error {
// If a devRoot is configured, this is prepended to the path.
func (m *Interface) createDeviceNode(path string, major int, minor int) error {
path = filepath.Join(m.devRoot, path)
if _, err := os.Stat(path); err == nil {
m.logger.Infof("Skipping: %s already exists", path)
return nil
} else if !os.IsNotExist(err) {
return fmt.Errorf("failed to stat %s: %v", path, err)
}
return m.Mknode(path, major, minor)
}

View File

@ -17,6 +17,9 @@
package nvdevices
import (
"fmt"
"os"
"golang.org/x/sys/unix"
"github.com/NVIDIA/nvidia-container-toolkit/internal/logger"
@ -36,9 +39,19 @@ func (m *mknodLogger) Mknode(path string, major, minor int) error {
return nil
}
type mknodUnix struct{}
type mknodUnix struct {
logger logger.Interface
}
func (m *mknodUnix) Mknode(path string, major, minor int) error {
// TODO: Ensure that the existing device node has the correct properties.
if _, err := os.Stat(path); err == nil {
m.logger.Infof("Skipping: %s already exists", path)
return nil
} else if !os.IsNotExist(err) {
return fmt.Errorf("failed to stat %s: %v", path, err)
}
err := unix.Mknod(path, unix.S_IFCHR, int(unix.Mkdev(uint32(major), uint32(minor))))
if err != nil {
return err