From 3a95a0872da6e08e97086b1c674ace5a1fec5a73 Mon Sep 17 00:00:00 2001 From: Nicolas De Loof Date: Fri, 4 Oct 2024 15:59:17 +0200 Subject: [PATCH] add support for CDI device request using `devices` Signed-off-by: Nicolas De Loof --- go.mod | 2 +- pkg/compose/create.go | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 4a170c8bc..02354cd43 100644 --- a/go.mod +++ b/go.mod @@ -57,6 +57,7 @@ require ( google.golang.org/grpc v1.62.0 gopkg.in/yaml.v3 v3.0.1 gotest.tools/v3 v3.5.1 + tags.cncf.io/container-device-interface v0.8.0 ) require ( @@ -190,5 +191,4 @@ require ( sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect sigs.k8s.io/yaml v1.3.0 // indirect - tags.cncf.io/container-device-interface v0.8.0 // indirect ) diff --git a/pkg/compose/create.go b/pkg/compose/create.go index 3a1c4041d..ba624a0a8 100644 --- a/pkg/compose/create.go +++ b/pkg/compose/create.go @@ -48,6 +48,7 @@ import ( "github.com/docker/docker/errdefs" "github.com/docker/go-connections/nat" "github.com/sirupsen/logrus" + cdi "tags.cncf.io/container-device-interface/pkg/parser" ) type createOptions struct { @@ -645,7 +646,14 @@ func getDeployResources(s types.ServiceConfig) container.Resources { setReservations(s.Deploy.Resources.Reservations, &resources) } + var cdiDeviceNames []string for _, device := range s.Devices { + + if device.Source == device.Target && cdi.IsQualifiedName(device.Source) { + cdiDeviceNames = append(cdiDeviceNames, device.Source) + continue + } + resources.Devices = append(resources.Devices, container.DeviceMapping{ PathOnHost: device.Source, PathInContainer: device.Target, @@ -653,6 +661,13 @@ func getDeployResources(s types.ServiceConfig) container.Resources { }) } + if len(cdiDeviceNames) > 0 { + resources.DeviceRequests = append(resources.DeviceRequests, container.DeviceRequest{ + Driver: "cdi", + DeviceIDs: cdiDeviceNames, + }) + } + ulimits := toUlimits(s.Ulimits) resources.Ulimits = ulimits return resources