Massaging ovf for virtualbox

VirtualBox and VMware’s ovftool have a different idea of how a storage controller should be described. This prevents exporting a VM from, e.g. VMware Fusion, and then importing it into VirtualBox. However, this can be worked around.

Ovftool produces output like

  `<rasd:Description>`SATA Controller`</rasd:Description>`

but VirtualBox wants a tag named Caption, not ElementName. It also wants ResourceSubType to be just ‘AHCI’. See the code below

case ResourceType_OtherStorageDevice:        // 20       SATA controller
    /* `<Item>`
        `<rasd:Description>`SATA Controller`</rasd:Description>`
    `</Item>` */
    if (    i.strCaption.startsWith("sataController", RTCString::CaseInsensitive)
         && !"AHCI", RTCString::CaseInsensitive)
        HardDiskController hdc;
        hdc.system = HardDiskController::SATA;
        hdc.idController = i.ulInstanceID;
        hdc.strControllerType = i.strResourceSubType;

        vsys.mapControllers[i.ulInstanceID] = hdc;
        throw OVFLogicError(N_("Error reading \"%s\": Host resource of type \"Other Storage Device (%d)\" is supported with SATA AHCI controllers only, line %d"),

If you modify the ovf file to make these changes, the import should succeed. After modfying it, be sure to update the sha1sum of the ovf file in the mf file.