esx: Make the conf parser compare names case insensitive in VMX mode

The keys of entries in a VMX file are case insensitive. Both scsi0:1.fileName
and scsi0:1.filename are valid. Therefore, make the conf parser compare names
case insensitive in VMX mode to accept every capitalization variation.

Also add test cases for this.
This commit is contained in:
Matthias Bolte committed 2010-03-24 21:03:37 +01:00
1 parent f66636e3ca
commit 5edaf95599
6 files changed
+164 -1

No files matched your search

+4 -1
View File
@@ -831,7 +831,10 @@ virConfGetValue(virConfPtr conf, const char *setting)
cur = conf->entries;
while (cur != NULL) {
if ((cur->name != NULL) && (STREQ(cur->name, setting)))
if ((cur->name != NULL) &&
((conf->flags & VIR_CONF_FLAG_VMX_FORMAT &&
STRCASEEQ(cur->name, setting)) ||
STREQ(cur->name, setting)))
return(cur->value);
cur = cur->next;
}
@@ -0,0 +1,51 @@
CONFIG.VERSION = "8"
VIRTUALHW.VERSION = "4"
FLOPPY0.PRESENT = "FALSE"
NVRAM = "FEDORA11.NVRAM"
DEPLOYMENTPLATFORM = "WINDOWS"
VIRTUALHW.PRODUCTCOMPATIBILITY = "HOSTED"
TOOLS.UPGRADE.POLICY = "USEGLOBAL"
POWERTYPE.POWEROFF = "DEFAULT"
POWERTYPE.POWERON = "DEFAULT"
POWERTYPE.SUSPEND = "DEFAULT"
POWERTYPE.RESET = "DEFAULT"
DISPLAYNAME = "FEDORA11"
EXTENDEDCONFIGFILE = "FEDORA11.VMXF"
SCSI0.PRESENT = "TRUE"
SCSI0.SHAREDBUS = "NONE"
SCSI0.VIRTUALDEV = "LSILOGIC"
MEMSIZE = "1024"
SCSI0:0.PRESENT = "TRUE"
SCSI0:0.FILENAME = "FEDORA11.vmdk"
SCSI0:0.DEVICETYPE = "SCSI-HARDDISK"
IDE0:0.PRESENT = "TRUE"
IDE0:0.CLIENTDEVICE = "TRUE"
IDE0:0.DEVICETYPE = "CDROM-RAW"
IDE0:0.STARTCONNECTED = "FALSE"
ETHERNET0.PRESENT = "TRUE"
ETHERNET0.NETWORKNAME = "VM NETWORK"
ETHERNET0.ADDRESSTYPE = "VPX"
ETHERNET0.GENERATEDADDRESS = "00:50:56:91:48:C7"
CHIPSET.ONLINESTANDBY = "FALSE"
GUESTOSALTNAME = "RED HAT ENTERPRISE LINUX 5 (32-BIT)"
GUESTOS = "RHEL5"
UUID.BIOS = "50 11 5E 16 9B DC 49 D7-F1 71 53 C4 D7 F9 17 10"
SNAPSHOT.ACTION = "KEEP"
SCHED.CPU.MIN = "0"
SCHED.CPU.UNITS = "MHZ"
SCHED.CPU.SHARES = "NORMAL"
SCHED.MEM.MINSIZE = "0"
SCHED.MEM.SHARES = "NORMAL"
TOOLSCRIPTS.AFTERPOWERON = "TRUE"
TOOLSCRIPTS.AFTERRESUME = "TRUE"
TOOLSCRIPTS.BEFORESUSPEND = "TRUE"
TOOLSCRIPTS.BEFOREPOWEROFF = "TRUE"
SCSI0:0.REDO = ""
TOOLS.SYNCTIME = "FALSE"
UUID.LOCATION = "56 4D B5 06 A2 BD FB EB-AE 86 F7 D8 49 27 D0 C4"
SCHED.CPU.MAX = "UNLIMITED"
SCHED.SWAP.DERIVEDNAME = "/VMFS/VOLUMES/498076B2-02796C1A-EF5B-000AE484A6A3/FEDORA11/FEDORA11-7DE040D8.VSWP"
TOOLS.REMINDINSTALL = "TRUE"
@@ -0,0 +1,25 @@
<domain type='vmware'>
<name>FEDORA11</name>
<uuid>50115e16-9bdc-49d7-f171-53c4d7f91710</uuid>
<memory>1048576</memory>
<currentMemory>1048576</currentMemory>
<vcpu>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='file' device='disk'>
<driver name='LSILOGIC'/>
<source file='[datastore] directory/FEDORA11.vmdk'/>
<target dev='sda' bus='scsi'/>
</disk>
<interface type='bridge'>
<mac address='00:50:56:91:48:c7'/>
<source bridge='VM NETWORK'/>
</interface>
</devices>
</domain>
@@ -0,0 +1,51 @@
config.version = "8"
virtualhw.version = "4"
floppy0.present = "false"
nvram = "fedora11.nvram"
deploymentplatform = "windows"
virtualhw.productcompatibility = "hosted"
tools.upgrade.policy = "useglobal"
powertype.poweroff = "default"
powertype.poweron = "default"
powertype.suspend = "default"
powertype.reset = "default"
displayname = "fedora11"
extendedconfigfile = "fedora11.vmxf"
scsi0.present = "true"
scsi0.sharedbus = "none"
scsi0.virtualdev = "lsilogic"
memsize = "1024"
scsi0:0.present = "true"
scsi0:0.filename = "fedora11.vmdk"
scsi0:0.devicetype = "scsi-harddisk"
ide0:0.present = "true"
ide0:0.clientdevice = "true"
ide0:0.devicetype = "cdrom-raw"
ide0:0.startconnected = "false"
ethernet0.present = "true"
ethernet0.networkname = "vm network"
ethernet0.addresstype = "vpx"
ethernet0.generatedaddress = "00:50:56:91:48:c7"
chipset.onlinestandby = "false"
guestosaltname = "red hat enterprise linux 5 (32-bit)"
guestos = "rhel5"
uuid.bios = "50 11 5e 16 9b dc 49 d7-f1 71 53 c4 d7 f9 17 10"
snapshot.action = "keep"
sched.cpu.min = "0"
sched.cpu.units = "mhz"
sched.cpu.shares = "normal"
sched.mem.minsize = "0"
sched.mem.shares = "normal"
toolscripts.afterpoweron = "true"
toolscripts.afterresume = "true"
toolscripts.beforesuspend = "true"
toolscripts.beforepoweroff = "true"
scsi0:0.redo = ""
tools.synctime = "false"
uuid.location = "56 4d b5 06 a2 bd fb eb-ae 86 f7 d8 49 27 d0 c4"
sched.cpu.max = "unlimited"
sched.swap.derivedname = "/vmfs/volumes/498076b2-02796c1a-ef5b-000ae484a6a3/fedora11/fedora11-7de040d8.vswp"
tools.remindinstall = "true"
@@ -0,0 +1,25 @@
<domain type='vmware'>
<name>fedora11</name>
<uuid>50115e16-9bdc-49d7-f171-53c4d7f91710</uuid>
<memory>1048576</memory>
<currentMemory>1048576</currentMemory>
<vcpu>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='file' device='disk'>
<driver name='lsilogic'/>
<source file='[datastore] directory/fedora11.vmdk'/>
<target dev='sda' bus='scsi'/>
</disk>
<interface type='bridge'>
<mac address='00:50:56:91:48:c7'/>
<source bridge='vm network'/>
</interface>
</devices>
</domain>
+8
View File
@@ -26,6 +26,7 @@ testCompareFiles(const char *vmx, const char *xml, esxVI_APIVersion apiVersion)
char *vmxPtr = &(vmxData[0]);
char *xmlPtr = &(xmlData[0]);
virDomainDefPtr def = NULL;
virErrorPtr err = NULL;
if (virtTestLoadFile(vmx, &vmxPtr, MAX_FILE) < 0) {
goto failure;
@@ -39,12 +40,16 @@ testCompareFiles(const char *vmx, const char *xml, esxVI_APIVersion apiVersion)
apiVersion);
if (def == NULL) {
err = virGetLastError();
fprintf(stderr, "ERROR: %s\n", err != NULL ? err->message : "<unknown>");
goto failure;
}
formatted = virDomainDefFormat(def, VIR_DOMAIN_XML_SECURE);
if (formatted == NULL) {
err = virGetLastError();
fprintf(stderr, "ERROR: %s\n", err != NULL ? err->message : "<unknown>");
goto failure;
}
@@ -117,6 +122,9 @@ mymain(int argc, char **argv)
} \
} while (0)
DO_TEST("case-insensitive-1", "case-insensitive-1", esxVI_APIVersion_25);
DO_TEST("case-insensitive-2", "case-insensitive-2", esxVI_APIVersion_25);
DO_TEST("minimal", "minimal", esxVI_APIVersion_25);
DO_TEST("minimal-64bit", "minimal-64bit", esxVI_APIVersion_25);