mirror of https://github.com/containers/podman.git
specgen: support CDI devices from containers.conf
Closes: https://github.com/containers/podman/issues/16232 Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
This commit is contained in:
parent
7eb11e7bb3
commit
5d26628df6
|
@ -8,6 +8,7 @@ import (
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"github.com/container-orchestrated-devices/container-device-interface/pkg/cdi"
|
||||||
"github.com/containers/podman/v4/libpod/define"
|
"github.com/containers/podman/v4/libpod/define"
|
||||||
"github.com/containers/podman/v4/pkg/rootless"
|
"github.com/containers/podman/v4/pkg/rootless"
|
||||||
"github.com/containers/podman/v4/pkg/util"
|
"github.com/containers/podman/v4/pkg/util"
|
||||||
|
@ -19,6 +20,19 @@ import (
|
||||||
|
|
||||||
// DevicesFromPath computes a list of devices
|
// DevicesFromPath computes a list of devices
|
||||||
func DevicesFromPath(g *generate.Generator, devicePath string) error {
|
func DevicesFromPath(g *generate.Generator, devicePath string) error {
|
||||||
|
if isCDIDevice(devicePath) {
|
||||||
|
registry := cdi.GetRegistry(
|
||||||
|
cdi.WithAutoRefresh(false),
|
||||||
|
)
|
||||||
|
if err := registry.Refresh(); err != nil {
|
||||||
|
logrus.Debugf("The following error was triggered when refreshing the CDI registry: %v", err)
|
||||||
|
}
|
||||||
|
_, err := registry.InjectDevices(g.Config, devicePath)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("setting up CDI devices: %w", err)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
devs := strings.Split(devicePath, ":")
|
devs := strings.Split(devicePath, ":")
|
||||||
resolvedDevicePath := devs[0]
|
resolvedDevicePath := devs[0]
|
||||||
// check if it is a symbolic link
|
// check if it is a symbolic link
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
package integration
|
package integration
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
|
"path/filepath"
|
||||||
|
|
||||||
. "github.com/containers/podman/v4/test/utils"
|
. "github.com/containers/podman/v4/test/utils"
|
||||||
. "github.com/onsi/ginkgo"
|
. "github.com/onsi/ginkgo"
|
||||||
|
@ -10,6 +12,19 @@ import (
|
||||||
. "github.com/onsi/gomega/gexec"
|
. "github.com/onsi/gomega/gexec"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func createContainersConfFileWithDevices(pTest *PodmanTestIntegration, devices string) {
|
||||||
|
configPath := filepath.Join(pTest.TempDir, "containers.conf")
|
||||||
|
containersConf := []byte(fmt.Sprintf("[containers]\ndevices = [%s]\n", devices))
|
||||||
|
err := os.WriteFile(configPath, containersConf, os.ModePerm)
|
||||||
|
Expect(err).To(BeNil())
|
||||||
|
|
||||||
|
// Set custom containers.conf file
|
||||||
|
os.Setenv("CONTAINERS_CONF", configPath)
|
||||||
|
if IsRemote() {
|
||||||
|
pTest.RestartRemoteService()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var _ = Describe("Podman run device", func() {
|
var _ = Describe("Podman run device", func() {
|
||||||
var (
|
var (
|
||||||
tempdir string
|
tempdir string
|
||||||
|
@ -30,7 +45,7 @@ var _ = Describe("Podman run device", func() {
|
||||||
podmanTest.Cleanup()
|
podmanTest.Cleanup()
|
||||||
f := CurrentGinkgoTestDescription()
|
f := CurrentGinkgoTestDescription()
|
||||||
processTestResult(f)
|
processTestResult(f)
|
||||||
|
os.Unsetenv("CONTAINERS_CONF")
|
||||||
})
|
})
|
||||||
|
|
||||||
It("podman run bad device test", func() {
|
It("podman run bad device test", func() {
|
||||||
|
@ -116,6 +131,11 @@ var _ = Describe("Podman run device", func() {
|
||||||
session := podmanTest.Podman([]string{"run", "-q", "--security-opt", "label=disable", "--device", "vendor.com/device=myKmsg", ALPINE, "test", "-c", "/dev/kmsg1"})
|
session := podmanTest.Podman([]string{"run", "-q", "--security-opt", "label=disable", "--device", "vendor.com/device=myKmsg", ALPINE, "test", "-c", "/dev/kmsg1"})
|
||||||
session.WaitWithDefaultTimeout()
|
session.WaitWithDefaultTimeout()
|
||||||
Expect(session).Should(Exit(0))
|
Expect(session).Should(Exit(0))
|
||||||
|
|
||||||
|
createContainersConfFileWithDevices(podmanTest, "\"vendor.com/device=myKmsg\"")
|
||||||
|
session = podmanTest.Podman([]string{"run", "-q", "--security-opt", "label=disable", ALPINE, "test", "-c", "/dev/kmsg1"})
|
||||||
|
session.WaitWithDefaultTimeout()
|
||||||
|
Expect(session).Should(Exit(0))
|
||||||
})
|
})
|
||||||
|
|
||||||
It("podman run --gpus noop", func() {
|
It("podman run --gpus noop", func() {
|
||||||
|
|
Loading…
Reference in New Issue