@@ -48,6 +48,7 @@ import (
4848 "github.com/docker/docker/errdefs"
4949 "github.com/docker/go-connections/nat"
5050 "github.com/sirupsen/logrus"
51+ cdi "tags.cncf.io/container-device-interface/pkg/parser"
5152)
5253
5354type createOptions struct {
@@ -645,14 +646,28 @@ func getDeployResources(s types.ServiceConfig) container.Resources {
645646 setReservations (s .Deploy .Resources .Reservations , & resources )
646647 }
647648
649+ var cdiDeviceNames []string
648650 for _ , device := range s .Devices {
651+
652+ if device .Source == device .Target && cdi .IsQualifiedName (device .Source ) {
653+ cdiDeviceNames = append (cdiDeviceNames , device .Source )
654+ continue
655+ }
656+
649657 resources .Devices = append (resources .Devices , container.DeviceMapping {
650658 PathOnHost : device .Source ,
651659 PathInContainer : device .Target ,
652660 CgroupPermissions : device .Permissions ,
653661 })
654662 }
655663
664+ if len (cdiDeviceNames ) > 0 {
665+ resources .DeviceRequests = append (resources .DeviceRequests , container.DeviceRequest {
666+ Driver : "cdi" ,
667+ DeviceIDs : cdiDeviceNames ,
668+ })
669+ }
670+
656671 ulimits := toUlimits (s .Ulimits )
657672 resources .Ulimits = ulimits
658673 return resources
0 commit comments