mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-21 20:15:17 +00:00
VMX: Add support for 'auto detect' fileNames
VMWare Fusion 5 can set the CD-ROM's device name to be 'auto detect' when using the physical drive via 'cdrom-raw' device type. VMWare will then connect to first available host CD-ROM to the virtual machine upon start up according to VMWare documentation. If no device is available, it appears that the device will remain disconnected. To better model this a CD-ROM that is marked as "auto detect" when in the off state would be modeled as the following with this patch: <disk type='block' device='lun'> <source startupPolicy='optional'/> <target dev='hda' bus='ide'/> <address type='drive' controller='0' bus='0' target='0' unit='0'/> </disk> Once the domain transitions to the powered on state, libvirt can populate the remaining source data with what is connected, if anything. However future power cycles, the domain may not always start with that device attached.
This commit is contained in:
parent
4b5652d0dc
commit
834aebcc2f
@ -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);
|
||||
}
|
||||
|
5
tests/vmx2xmldata/vmx2xml-cdrom-ide-raw-auto-detect.vmx
Normal file
5
tests/vmx2xmldata/vmx2xml-cdrom-ide-raw-auto-detect.vmx
Normal file
@ -0,0 +1,5 @@
|
||||
config.version = "8"
|
||||
virtualHW.version = "4"
|
||||
ide0:0.present = "true"
|
||||
ide0:0.deviceType = "cdrom-raw"
|
||||
ide0:0.fileName = "auto detect"
|
24
tests/vmx2xmldata/vmx2xml-cdrom-ide-raw-auto-detect.xml
Normal file
24
tests/vmx2xmldata/vmx2xml-cdrom-ide-raw-auto-detect.xml
Normal file
@ -0,0 +1,24 @@
|
||||
<domain type='vmware'>
|
||||
<uuid>00000000-0000-0000-0000-000000000000</uuid>
|
||||
<memory unit='KiB'>32768</memory>
|
||||
<currentMemory unit='KiB'>32768</currentMemory>
|
||||
<vcpu placement='static'>1</vcpu>
|
||||
<os>
|
||||
<type arch='i686'>hvm</type>
|
||||
</os>
|
||||
<clock offset='utc'/>
|
||||
<on_poweroff>destroy</on_poweroff>
|
||||
<on_reboot>restart</on_reboot>
|
||||
<on_crash>destroy</on_crash>
|
||||
<devices>
|
||||
<disk type='block' device='lun'>
|
||||
<source startupPolicy='optional'/>
|
||||
<target dev='hda' bus='ide'/>
|
||||
<address type='drive' controller='0' bus='0' target='0' unit='0'/>
|
||||
</disk>
|
||||
<controller type='ide' index='0'/>
|
||||
<video>
|
||||
<model type='vmvga' vram='4096'/>
|
||||
</video>
|
||||
</devices>
|
||||
</domain>
|
6
tests/vmx2xmldata/vmx2xml-cdrom-scsi-raw-auto-detect.vmx
Normal file
6
tests/vmx2xmldata/vmx2xml-cdrom-scsi-raw-auto-detect.vmx
Normal file
@ -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"
|
24
tests/vmx2xmldata/vmx2xml-cdrom-scsi-raw-auto-detect.xml
Normal file
24
tests/vmx2xmldata/vmx2xml-cdrom-scsi-raw-auto-detect.xml
Normal file
@ -0,0 +1,24 @@
|
||||
<domain type='vmware'>
|
||||
<uuid>00000000-0000-0000-0000-000000000000</uuid>
|
||||
<memory unit='KiB'>32768</memory>
|
||||
<currentMemory unit='KiB'>32768</currentMemory>
|
||||
<vcpu placement='static'>1</vcpu>
|
||||
<os>
|
||||
<type arch='i686'>hvm</type>
|
||||
</os>
|
||||
<clock offset='utc'/>
|
||||
<on_poweroff>destroy</on_poweroff>
|
||||
<on_reboot>restart</on_reboot>
|
||||
<on_crash>destroy</on_crash>
|
||||
<devices>
|
||||
<disk type='block' device='lun'>
|
||||
<source startupPolicy='optional'/>
|
||||
<target dev='sda' bus='scsi'/>
|
||||
<address type='drive' controller='0' bus='0' target='0' unit='0'/>
|
||||
</disk>
|
||||
<controller type='scsi' index='0'/>
|
||||
<video>
|
||||
<model type='vmvga' vram='4096'/>
|
||||
</video>
|
||||
</devices>
|
||||
</domain>
|
@ -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");
|
||||
|
14
tests/xml2vmxdata/xml2vmx-cdrom-ide-raw-auto-detect.vmx
Normal file
14
tests/xml2vmxdata/xml2vmx-cdrom-ide-raw-auto-detect.vmx
Normal file
@ -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"
|
14
tests/xml2vmxdata/xml2vmx-cdrom-ide-raw-auto-detect.xml
Normal file
14
tests/xml2vmxdata/xml2vmx-cdrom-ide-raw-auto-detect.xml
Normal file
@ -0,0 +1,14 @@
|
||||
<domain type='vmware'>
|
||||
<name>cdrom-ide-device</name>
|
||||
<uuid>564d9bef-acd9-b4e0-c8f0-aea8b9103515</uuid>
|
||||
<memory unit='KiB'>4096</memory>
|
||||
<os>
|
||||
<type>hvm</type>
|
||||
</os>
|
||||
<devices>
|
||||
<disk type='block' device='lun'>
|
||||
<source startupPolicy='optional'/>
|
||||
<target dev='hda' bus='ide'/>
|
||||
</disk>
|
||||
</devices>
|
||||
</domain>
|
15
tests/xml2vmxdata/xml2vmx-cdrom-scsi-raw-auto-detect.vmx
Normal file
15
tests/xml2vmxdata/xml2vmx-cdrom-scsi-raw-auto-detect.vmx
Normal file
@ -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"
|
14
tests/xml2vmxdata/xml2vmx-cdrom-scsi-raw-auto-detect.xml
Normal file
14
tests/xml2vmxdata/xml2vmx-cdrom-scsi-raw-auto-detect.xml
Normal file
@ -0,0 +1,14 @@
|
||||
<domain type='vmware'>
|
||||
<name>cdrom-scsi-device</name>
|
||||
<uuid>564d9bef-acd9-b4e0-c8f0-aea8b9103515</uuid>
|
||||
<memory unit='KiB'>4096</memory>
|
||||
<os>
|
||||
<type>hvm</type>
|
||||
</os>
|
||||
<devices>
|
||||
<disk type='block' device='lun'>
|
||||
<source startupPolicy='optional'/>
|
||||
<target dev='sda' bus='scsi'/>
|
||||
</disk>
|
||||
</devices>
|
||||
</domain>
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user