Skip to content

Commit 4afe4db

Browse files
authored
Merge pull request #1835 from bensmrs/usb-disk
Add `io.bus=usb` for disks
2 parents c3a1d65 + 6594b0c commit 4afe4db

File tree

6 files changed

+13
-3
lines changed

6 files changed

+13
-3
lines changed

doc/api-extensions.md

+4
Original file line numberDiff line numberDiff line change
@@ -2756,3 +2756,7 @@ This adds an `allocated_time` field below `CPU` in the instance state API.
27562756
## `network_io_bus`
27572757

27582758
This introduces a new `io.bus` property for compatible network devices allowing to choose between `virtio` (default) and `usb`.
2759+
2760+
## `disk_io_bus_usb`
2761+
2762+
Adds a new `usb` value for `io.bus` on `disk` devices.

doc/config_options.txt

+1
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ For block devices (disks), this is one of:
8383
- `nvme`
8484
- `virtio-blk`
8585
- `virtio-scsi` (default)
86+
- `usb`
8687

8788
For file systems (shared directories or custom volumes), this is one of:
8889
- `9p`

internal/server/device/disk.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -351,6 +351,7 @@ func (d *disk) validateConfig(instConf instance.ConfigReader) error {
351351
// - `nvme`
352352
// - `virtio-blk`
353353
// - `virtio-scsi` (default)
354+
// - `usb`
354355
//
355356
// For file systems (shared directories or custom volumes), this is one of:
356357
// - `9p`
@@ -361,7 +362,7 @@ func (d *disk) validateConfig(instConf instance.ConfigReader) error {
361362
// default: `virtio-scsi` for block, `auto` for file system
362363
// required: no
363364
// shortdesc: Only for VMs: Override the bus for the device
364-
"io.bus": validate.Optional(validate.IsOneOf("nvme", "virtio-blk", "virtio-scsi", "auto", "9p", "virtiofs")),
365+
"io.bus": validate.Optional(validate.IsOneOf("nvme", "virtio-blk", "virtio-scsi", "auto", "9p", "virtiofs", "usb")),
365366
}
366367

367368
err := d.config.Validate(rules)
@@ -1350,7 +1351,7 @@ func (d *disk) startVM() (*deviceConfig.RunConfig, error) {
13501351
}
13511352
} else {
13521353
// Confirm we're dealing with block options.
1353-
err := validate.Optional(validate.IsOneOf("nvme", "virtio-blk", "virtio-scsi"))(d.config["io.bus"])
1354+
err := validate.Optional(validate.IsOneOf("nvme", "virtio-blk", "virtio-scsi", "usb"))(d.config["io.bus"])
13541355
if err != nil {
13551356
return nil, err
13561357
}

internal/server/instance/drivers/driver_qemu.go

+3
Original file line numberDiff line numberDiff line change
@@ -4366,6 +4366,9 @@ func (d *qemu) addDriveConfig(qemuDev map[string]any, bootIndexes map[string]int
43664366
}
43674367

43684368
qemuDev["driver"] = bus
4369+
} else if bus == "usb" {
4370+
qemuDev["driver"] = "usb-storage"
4371+
qemuDev["bus"] = "qemu_usb.0"
43694372
}
43704373

43714374
if bootIndexes != nil {

internal/server/metadata/configuration.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@
8888
{
8989
"io.bus": {
9090
"default": "`virtio-scsi` for block, `auto` for file system",
91-
"longdesc": "This controls what bus a disk device should be attached to.\n\nFor block devices (disks), this is one of:\n- `nvme`\n- `virtio-blk`\n- `virtio-scsi` (default)\n\nFor file systems (shared directories or custom volumes), this is one of:\n- `9p`\n- `auto` (default) (`virtiofs` + `9p`, just `9p` if `virtiofsd` is missing)\n- `virtiofs`",
91+
"longdesc": "This controls what bus a disk device should be attached to.\n\nFor block devices (disks), this is one of:\n- `nvme`\n- `virtio-blk`\n- `virtio-scsi` (default)\n- `usb`\n\nFor file systems (shared directories or custom volumes), this is one of:\n- `9p`\n- `auto` (default) (`virtiofs` + `9p`, just `9p` if `virtiofsd` is missing)\n- `virtiofs`",
9292
"required": "no",
9393
"shortdesc": "Only for VMs: Override the bus for the device",
9494
"type": "string"

internal/version/api.go

+1
Original file line numberDiff line numberDiff line change
@@ -473,6 +473,7 @@ var APIExtensions = []string{
473473
"network_ovn_ipv4_dhcp_expiry",
474474
"instance_state_cpu_time",
475475
"network_io_bus",
476+
"disk_io_bus_usb",
476477
}
477478

478479
// APIExtensionsCount returns the number of available API extensions.

0 commit comments

Comments
 (0)