elif __contains_word "$prev" ${OPTS[SSH_KEY]}; then
comps='dsa ecdsa ecdsa-sk ed25519 ed25519-sk rsa'
elif __contains_word "$prev" ${OPTS[CONSOLE]}; then
- comps='interactive native gui'
+ comps='interactive native gui read-only headless'
elif __contains_word "$prev" ${OPTS[IMAGE_FORMAT]}; then
comps='raw qcow2'
+ elif __contains_word "$prev" ${OPTS[IMAGE_DISK_TYPE]}; then
+ comps='virtio-blk virtio-scsi nvme'
elif __contains_word "$prev" ${OPTS[ARG]}; then
comps=''
else
if (strv_extend(&cmdline, "-device") < 0)
return log_oom();
- if (strv_extendf(&cmdline, "virtio-blk-pci,drive=vmspawn_extra_%zu,serial=%s", i++, escaped_drive_fn) < 0)
- return log_oom();
+ DiskType dt = drive->disk_type >= 0 ? drive->disk_type : arg_image_disk_type;
+
+ switch (dt) {
+ case DISK_TYPE_VIRTIO_BLK:
+ if (strv_extendf(&cmdline, "virtio-blk-pci,drive=vmspawn_extra_%zu,serial=%s", i++, escaped_drive_fn) < 0)
+ return log_oom();
+ break;
+ case DISK_TYPE_VIRTIO_SCSI: {
+ _cleanup_free_ char *serial = NULL;
+ r = disk_serial(escaped_drive_fn, 30, &serial);
+ if (r < 0)
+ return log_oom();
+ if (strv_extendf(&cmdline, "scsi-hd,bus=vmspawn_scsi.0,drive=vmspawn_extra_%zu,serial=%s", i++, serial) < 0)
+ return log_oom();
+ break;
+ }
+ case DISK_TYPE_NVME: {
+ _cleanup_free_ char *serial = NULL;
+ r = disk_serial(escaped_drive_fn, 20, &serial);
+ if (r < 0)
+ return log_oom();
+ if (strv_extendf(&cmdline, "nvme,drive=vmspawn_extra_%zu,serial=%s", i++, serial) < 0)
+ return log_oom();
+ break;
+ }
+ default:
+ assert_not_reached();
+ }
}
- if (arg_console_mode != CONSOLE_GUI) {
+ if (!IN_SET(arg_console_mode, CONSOLE_GUI, CONSOLE_HEADLESS)) {
r = strv_prepend(&arg_kernel_cmdline_extra, "console=hvc0");
if (r < 0)
return log_oom();