Skip to content

Commit

Permalink
Merge pull request #25171 from giuseppe/pass-device-requests-to-cli
Browse files Browse the repository at this point in the history
pkg/api: honor cdi devices from the hostconfig
  • Loading branch information
openshift-merge-bot[bot] authored Jan 31, 2025
2 parents 48f8742 + 18e2907 commit a923409
Show file tree
Hide file tree
Showing 7 changed files with 66 additions and 0 deletions.
5 changes: 5 additions & 0 deletions pkg/api/handlers/compat/containers_create.go
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,11 @@ func cliOpts(cc handlers.CreateContainerConfig, rtc *config.Config) (*entities.C
for _, dev := range cc.HostConfig.Devices {
devices = append(devices, fmt.Sprintf("%s:%s:%s", dev.PathOnHost, dev.PathInContainer, dev.CgroupPermissions))
}
for _, r := range cc.HostConfig.Resources.DeviceRequests {
if r.Driver == "cdi" {
devices = append(devices, r.DeviceIDs...)
}
}

// iterate blkreaddevicebps
readBps := make([]string, 0, len(cc.HostConfig.BlkioDeviceReadBps))
Expand Down
9 changes: 9 additions & 0 deletions test/compose/cdi_device/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
cdi devices
===========

This test copies a CDI device file on a tmpfs mounted on /etc/cdi, then checks that the CDI device in the compose file is present in a container. The test is skipped when running as rootless.

Validation
------------

* The CDI device is present in the container.
14 changes: 14 additions & 0 deletions test/compose/cdi_device/device.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"cdiVersion": "0.3.0",
"kind": "vendor.com/device",
"devices": [
{
"name": "myKmsg",
"containerEdits": {
"mounts": [
{"hostPath": "/dev/kmsg", "containerPath": "/dev/kmsg1", "options": ["rw", "rprivate", "rbind"]}
]
}
}
]
}
15 changes: 15 additions & 0 deletions test/compose/cdi_device/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
services:
test:
image: alpine
command: ["top"]
volumes:
- /dev:/dev-host
security_opt:
- label=disable
deploy:
resources:
reservations:
devices:
- driver: cdi
device_ids: ['vendor.com/device=myKmsg']
capabilities: []
9 changes: 9 additions & 0 deletions test/compose/cdi_device/setup.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
if is_rootless; then
reason=" - can't write to /etc/cdi"
_show_ok skip "$testname # skip$reason"
exit 0
fi

mkdir -p /etc/cdi
mount -t tmpfs tmpfs /etc/cdi
cp device.json /etc/cdi
3 changes: 3 additions & 0 deletions test/compose/cdi_device/teardown.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
if ! is_rootless; then
umount -l /etc/cdi
fi
11 changes: 11 additions & 0 deletions test/compose/cdi_device/tests.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# -*- bash -*-

ctr_name="cdi_device-test-1"

podman exec "$ctr_name" sh -c 'stat -c "%t:%T" /dev-host/kmsg'

expected=$output

podman exec "$ctr_name" sh -c 'stat -c "%t:%T" /dev/kmsg1'

is "$output" "$expected" "$testname : device /dev/kmsg1 has the same rdev as /dev/kmsg on the host"

0 comments on commit a923409

Please sign in to comment.