diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c
index 40416a0f88..5c2c79430f 100644
--- a/src/vmx/vmx.c
+++ b/src/vmx/vmx.c
@@ -2221,14 +2221,26 @@ virVMXParseDisk(virVMXContext *ctx, virDomainXMLOptionPtr xmlopt, virConfPtr con
goto ignore;
} else if (STRCASEEQ(deviceType, "atapi-cdrom")) {
(*def)->type = VIR_DOMAIN_DISK_TYPE_BLOCK;
- (*def)->src = fileName;
- fileName = NULL;
+
+ if (STRCASEEQ(fileName, "auto detect")) {
+ (*def)->src = NULL;
+ (*def)->startupPolicy = VIR_DOMAIN_STARTUP_POLICY_OPTIONAL;
+ } else {
+ (*def)->src = fileName;
+ fileName = NULL;
+ }
} else if (STRCASEEQ(deviceType, "cdrom-raw")) {
/* Raw access CD-ROMs actually are device='lun' */
(*def)->device = VIR_DOMAIN_DISK_DEVICE_LUN;
(*def)->type = VIR_DOMAIN_DISK_TYPE_BLOCK;
- (*def)->src = fileName;
- fileName = NULL;
+
+ if (STRCASEEQ(fileName, "auto detect")) {
+ (*def)->src = NULL;
+ (*def)->startupPolicy = VIR_DOMAIN_STARTUP_POLICY_OPTIONAL;
+ } else {
+ (*def)->src = fileName;
+ fileName = NULL;
+ }
} else {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("Invalid or not yet handled value '%s' "
@@ -3473,7 +3485,13 @@ virVMXFormatDisk(virVMXContext *ctx, virDomainDiskDefPtr def,
VIR_FREE(fileName);
} else if (def->type == VIR_DOMAIN_DISK_TYPE_BLOCK) {
- if (def->src != NULL) {
+ if (!def->src &&
+ def->startupPolicy == VIR_DOMAIN_STARTUP_POLICY_OPTIONAL) {
+ virBufferAsprintf(buffer, "%s%d:%d.autodetect = \"true\"\n",
+ busType, controllerOrBus, unit);
+ virBufferAsprintf(buffer, "%s%d:%d.fileName = \"auto detect\"\n",
+ busType, controllerOrBus, unit);
+ } else {
virBufferAsprintf(buffer, "%s%d:%d.fileName = \"%s\"\n",
busType, controllerOrBus, unit, def->src);
}
diff --git a/tests/vmx2xmldata/vmx2xml-cdrom-ide-raw-auto-detect.vmx b/tests/vmx2xmldata/vmx2xml-cdrom-ide-raw-auto-detect.vmx
new file mode 100644
index 0000000000..b2c4caf20f
--- /dev/null
+++ b/tests/vmx2xmldata/vmx2xml-cdrom-ide-raw-auto-detect.vmx
@@ -0,0 +1,5 @@
+config.version = "8"
+virtualHW.version = "4"
+ide0:0.present = "true"
+ide0:0.deviceType = "cdrom-raw"
+ide0:0.fileName = "auto detect"
diff --git a/tests/vmx2xmldata/vmx2xml-cdrom-ide-raw-auto-detect.xml b/tests/vmx2xmldata/vmx2xml-cdrom-ide-raw-auto-detect.xml
new file mode 100644
index 0000000000..bce708d1f7
--- /dev/null
+++ b/tests/vmx2xmldata/vmx2xml-cdrom-ide-raw-auto-detect.xml
@@ -0,0 +1,24 @@
+
+ 00000000-0000-0000-0000-000000000000
+ 32768
+ 32768
+ 1
+
+ hvm
+
+
+ destroy
+ restart
+ destroy
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/vmx2xmldata/vmx2xml-cdrom-scsi-raw-auto-detect.vmx b/tests/vmx2xmldata/vmx2xml-cdrom-scsi-raw-auto-detect.vmx
new file mode 100644
index 0000000000..0209b291e6
--- /dev/null
+++ b/tests/vmx2xmldata/vmx2xml-cdrom-scsi-raw-auto-detect.vmx
@@ -0,0 +1,6 @@
+config.version = "8"
+virtualHW.version = "4"
+scsi0.present = "true"
+scsi0:0.present = "true"
+scsi0:0.deviceType = "cdrom-raw"
+scsi0:0.fileName = "auto detect"
diff --git a/tests/vmx2xmldata/vmx2xml-cdrom-scsi-raw-auto-detect.xml b/tests/vmx2xmldata/vmx2xml-cdrom-scsi-raw-auto-detect.xml
new file mode 100644
index 0000000000..a81646a28e
--- /dev/null
+++ b/tests/vmx2xmldata/vmx2xml-cdrom-scsi-raw-auto-detect.xml
@@ -0,0 +1,24 @@
+
+ 00000000-0000-0000-0000-000000000000
+ 32768
+ 32768
+ 1
+
+ hvm
+
+
+ destroy
+ restart
+ destroy
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/vmx2xmltest.c b/tests/vmx2xmltest.c
index 479c84c14c..5eb04e9ea4 100644
--- a/tests/vmx2xmltest.c
+++ b/tests/vmx2xmltest.c
@@ -238,9 +238,11 @@ mymain(void)
DO_TEST("cdrom-scsi-file", "cdrom-scsi-file");
DO_TEST("cdrom-scsi-device", "cdrom-scsi-device");
DO_TEST("cdrom-scsi-raw-device", "cdrom-scsi-raw-device");
+ DO_TEST("cdrom-scsi-raw-auto-detect", "cdrom-scsi-raw-auto-detect");
DO_TEST("cdrom-ide-file", "cdrom-ide-file");
DO_TEST("cdrom-ide-device", "cdrom-ide-device");
DO_TEST("cdrom-ide-raw-device", "cdrom-ide-raw-device");
+ DO_TEST("cdrom-ide-raw-auto-detect", "cdrom-ide-raw-auto-detect");
DO_TEST("floppy-file", "floppy-file");
DO_TEST("floppy-device", "floppy-device");
diff --git a/tests/xml2vmxdata/xml2vmx-cdrom-ide-raw-auto-detect.vmx b/tests/xml2vmxdata/xml2vmx-cdrom-ide-raw-auto-detect.vmx
new file mode 100644
index 0000000000..34e1467e1f
--- /dev/null
+++ b/tests/xml2vmxdata/xml2vmx-cdrom-ide-raw-auto-detect.vmx
@@ -0,0 +1,14 @@
+.encoding = "UTF-8"
+config.version = "8"
+virtualHW.version = "4"
+guestOS = "other"
+uuid.bios = "56 4d 9b ef ac d9 b4 e0-c8 f0 ae a8 b9 10 35 15"
+displayName = "cdrom-ide-device"
+memsize = "4"
+numvcpus = "1"
+ide0:0.present = "true"
+ide0:0.deviceType = "cdrom-raw"
+ide0:0.autodetect = "true"
+ide0:0.fileName = "auto detect"
+floppy0.present = "false"
+floppy1.present = "false"
diff --git a/tests/xml2vmxdata/xml2vmx-cdrom-ide-raw-auto-detect.xml b/tests/xml2vmxdata/xml2vmx-cdrom-ide-raw-auto-detect.xml
new file mode 100644
index 0000000000..166410c09e
--- /dev/null
+++ b/tests/xml2vmxdata/xml2vmx-cdrom-ide-raw-auto-detect.xml
@@ -0,0 +1,14 @@
+
+ cdrom-ide-device
+ 564d9bef-acd9-b4e0-c8f0-aea8b9103515
+ 4096
+
+ hvm
+
+
+
+
+
+
+
+
diff --git a/tests/xml2vmxdata/xml2vmx-cdrom-scsi-raw-auto-detect.vmx b/tests/xml2vmxdata/xml2vmx-cdrom-scsi-raw-auto-detect.vmx
new file mode 100644
index 0000000000..84ec646cef
--- /dev/null
+++ b/tests/xml2vmxdata/xml2vmx-cdrom-scsi-raw-auto-detect.vmx
@@ -0,0 +1,15 @@
+.encoding = "UTF-8"
+config.version = "8"
+virtualHW.version = "4"
+guestOS = "other"
+uuid.bios = "56 4d 9b ef ac d9 b4 e0-c8 f0 ae a8 b9 10 35 15"
+displayName = "cdrom-scsi-device"
+memsize = "4"
+numvcpus = "1"
+scsi0.present = "true"
+scsi0:0.present = "true"
+scsi0:0.deviceType = "cdrom-raw"
+scsi0:0.autodetect = "true"
+scsi0:0.fileName = "auto detect"
+floppy0.present = "false"
+floppy1.present = "false"
diff --git a/tests/xml2vmxdata/xml2vmx-cdrom-scsi-raw-auto-detect.xml b/tests/xml2vmxdata/xml2vmx-cdrom-scsi-raw-auto-detect.xml
new file mode 100644
index 0000000000..6531ec8ba1
--- /dev/null
+++ b/tests/xml2vmxdata/xml2vmx-cdrom-scsi-raw-auto-detect.xml
@@ -0,0 +1,14 @@
+
+ cdrom-scsi-device
+ 564d9bef-acd9-b4e0-c8f0-aea8b9103515
+ 4096
+
+ hvm
+
+
+
+
+
+
+
+
diff --git a/tests/xml2vmxtest.c b/tests/xml2vmxtest.c
index cb1c29c46d..cafcc368ff 100644
--- a/tests/xml2vmxtest.c
+++ b/tests/xml2vmxtest.c
@@ -254,9 +254,11 @@ mymain(void)
DO_TEST("cdrom-scsi-file", "cdrom-scsi-file", 4);
DO_TEST("cdrom-scsi-device", "cdrom-scsi-device", 4);
DO_TEST("cdrom-scsi-raw-device", "cdrom-scsi-raw-device", 4);
+ DO_TEST("cdrom-scsi-raw-auto-detect", "cdrom-scsi-raw-auto-detect", 4);
DO_TEST("cdrom-ide-file", "cdrom-ide-file", 4);
DO_TEST("cdrom-ide-device", "cdrom-ide-device", 4);
DO_TEST("cdrom-ide-raw-device", "cdrom-ide-raw-device", 4);
+ DO_TEST("cdrom-ide-raw-auto-detect", "cdrom-ide-raw-auto-detect", 4);
DO_TEST("floppy-file", "floppy-file", 4);
DO_TEST("floppy-device", "floppy-device", 4);