VirtualBox

Changeset 49446 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Nov 12, 2013 10:56:39 AM (11 years ago)
Author:
vboxsync
Message:

pr7074. import logic for work with multiple VMs in OVF appliance was fixed in the function importMachineGeneric().

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/src-server/ApplianceImplImport.cpp

    r49416 r49446  
    29922992            stack.fSessionOpen = true;
    29932993
     2994            /* get VM name from virtual system description. Only one record is possible (size of list is equal 1). */
     2995            std::list<VirtualSystemDescriptionEntry*> vmName = vsdescThis->findByType(VirtualSystemDescriptionType_Name);
     2996            std::list<VirtualSystemDescriptionEntry*>::iterator vmNameIt = vmName.begin();
     2997            VirtualSystemDescriptionEntry* vmNameEntry = *vmNameIt;
     2998
    29942999            ovf::DiskImagesMap::const_iterator oit = stack.mapDisks.begin();
    29953000            std::set<RTCString>  disksResolvedNames;
    29963001
    2997             while(oit != stack.mapDisks.end())
     3002            uint32_t cImportedDisks = 0;
     3003
     3004            while(oit != stack.mapDisks.end() && cImportedDisks != avsdeHDs.size())
    29983005            {
    29993006                ovf::DiskImage diCurrent = oit->second;
     
    30233030                    }
    30243031                    if (!vsdeTargetHD)
    3025                         throw setError(E_FAIL,
    3026                                        tr("Internal inconsistency looking up disk image '%s'"),
    3027                                        diCurrent.strHref.c_str());
     3032                    {
     3033                        /* possible case if a disk image belongs to other virtual system (OVF package with multiple VMs inside) */
     3034                        LogWarning(("OVA/OVF import: Disk image %s was missed during import of VM %s\n",
     3035                                    oit->first.c_str(), vmNameEntry->strOvf.c_str()));
     3036                        ++oit;
     3037                        continue;
     3038                    }
    30283039
    30293040                    //diCurrent.strDiskId contains the disk identifier (e.g. "vmdisk1"), which should exist
     
    31093120                                }
    31103121                                if (!vsdeTargetHD)
     3122                                {
     3123                                    /*
     3124                                     * in this case it's an error because something wrong with OVF description file.
     3125                                     * May be VB imports OVA package with wrong file sequence inside the archive.
     3126                                     */
    31113127                                    throw setError(E_FAIL,
    31123128                                                   tr("Internal inconsistency looking up disk image '%s'"),
    31133129                                                   diCurrent.strHref.c_str());
     3130                                }
    31143131
    31153132                                itVDisk = vsysThis.mapVirtualDisks.find(diCurrent.strDiskId);
     
    32143231                vsdeTargetHD->strVboxCurrent = savedVboxCurrent;
    32153232
     3233                ++cImportedDisks;
     3234
    32163235            } // end while(oit != stack.mapDisks.end())
     3236
     3237            /*
     3238             * quantity of the imported disks isn't equal to the size of the avsdeHDs list.
     3239             */
     3240            if(cImportedDisks < avsdeHDs.size())
     3241            {
     3242                LogWarning(("Not all disk images were imported for VM %s. Check OVF description file.",
     3243                            vmNameEntry->strOvf.c_str()));
     3244            }
    32173245
    32183246            // only now that we're done with all disks, close the session
     
    34953523                ++oit;
    34963524                continue;
    3497 
    34983525            }
    34993526        }
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette