diff --git a/core/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java b/core/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java index cd1b30ca9e9..08666c76ce4 100755 --- a/core/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java +++ b/core/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java @@ -1269,14 +1269,12 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa } VirtualDevice nic; - int nicDeviceNumber = -1; for (NicTO nicTo : sortNicsByDeviceId(nics)) { s_logger.info("Prepare NIC device based on NicTO: " + _gson.toJson(nicTo)); Pair networkInfo = prepareNetworkFromNicInfo(vmMo.getRunningHost(), nicTo); - nic = VmwareHelper.prepareNicDevice(vmMo, networkInfo.first(), mgr.getGuestNicDeviceType(), networkInfo.second(), nicTo.getMac(), nicDeviceNumber, i + 1, true, true); - nicDeviceNumber = nic.getUnitNumber() + 1; + nic = VmwareHelper.prepareNicDevice(vmMo, networkInfo.first(), mgr.getGuestNicDeviceType(), networkInfo.second(), nicTo.getMac(), i, i + 1, true, true); deviceConfigSpecArray[i] = new VirtualDeviceConfigSpec(); deviceConfigSpecArray[i].setDevice(nic); deviceConfigSpecArray[i].setOperation(VirtualDeviceConfigSpecOperation.add); @@ -3178,8 +3176,14 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa if (isVmInCluster(vm)) { if (s_logger.isDebugEnabled()) { s_logger.debug("VM " + vm + " is now missing from host report but we detected that it might be migrated to other host by vCenter"); - } - _vms.remove(vm); + } + + if(oldState != State.Starting && oldState != State.Migrating) { + s_logger.debug("VM " + vm + " is now missing from host report and VM is not at starting state, remove it from host VM-sync map"); + _vms.remove(vm); + } else { + s_logger.debug("VM " + vm + " is missing from host report, but we will ignore VM " + vm + " in transition state " + oldState); + } continue; } diff --git a/vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareHelper.java b/vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareHelper.java index 4e458b4e4f7..da78ef5ef4c 100755 --- a/vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareHelper.java +++ b/vmware-base/src/com/cloud/hypervisor/vmware/util/VmwareHelper.java @@ -92,11 +92,13 @@ public class VmwareHelper { connectInfo.setStartConnected(connectOnStart); nic.setAddressType("Manual"); nic.setConnectable(connectInfo); - nic.setMacAddress(macAddress); + nic.setMacAddress(macAddress); + +/* nic.setControllerKey(vmMo.getPCIDeviceControllerKey()); - if(deviceNumber < 0) - deviceNumber = vmMo.getNextPCIDeviceNumber(); + deviceNumber = vmMo.getNextPCIDeviceNumber(); +*/ nic.setUnitNumber(deviceNumber); nic.setKey(-contextNumber); return nic; @@ -106,9 +108,6 @@ public class VmwareHelper { public static VirtualDevice prepareDiskDevice(VirtualMachineMO vmMo, int controllerKey, String vmdkDatastorePath, int sizeInMb, ManagedObjectReference morDs, int deviceNumber, int contextNumber) throws Exception { - if(controllerKey < 0) - controllerKey = vmMo.getIDEDeviceControllerKey(); - VirtualDisk disk = new VirtualDisk(); VirtualDiskFlatVer2BackingInfo backingInfo = new VirtualDiskFlatVer2BackingInfo(); @@ -119,9 +118,12 @@ public class VmwareHelper { backingInfo.setFileName(vmdkDatastorePath); disk.setBacking(backingInfo); + if(controllerKey < 0) + controllerKey = vmMo.getIDEDeviceControllerKey(); if(deviceNumber < 0) deviceNumber = vmMo.getNextDeviceNumber(controllerKey); - disk.setControllerKey(controllerKey); + disk.setControllerKey(controllerKey); + disk.setKey(-contextNumber); disk.setUnitNumber(deviceNumber); disk.setCapacityInKB(sizeInMb*1024); @@ -187,9 +189,9 @@ public class VmwareHelper { if(controllerKey < 0) controllerKey = vmMo.getIDEDeviceControllerKey(); disk.setControllerKey(controllerKey); - if(deviceNumber < 0) - deviceNumber = vmMo.getNextDeviceNumber(controllerKey); + deviceNumber = vmMo.getNextDeviceNumber(controllerKey); + disk.setKey(-contextNumber); disk.setUnitNumber(deviceNumber); disk.setCapacityInKB(sizeInMb*1024); @@ -208,9 +210,6 @@ public class VmwareHelper { assert(vmdkDatastorePathChain != null); assert(vmdkDatastorePathChain.length >= 1); - if(controllerKey < 0) - controllerKey = vmMo.getIDEDeviceControllerKey(); - VirtualDisk disk = new VirtualDisk(); VirtualDiskFlatVer2BackingInfo backingInfo = new VirtualDiskFlatVer2BackingInfo(); @@ -227,6 +226,8 @@ public class VmwareHelper { disk.setBacking(backingInfo); + if(controllerKey < 0) + controllerKey = vmMo.getIDEDeviceControllerKey(); if(deviceNumber < 0) deviceNumber = vmMo.getNextDeviceNumber(controllerKey); @@ -267,12 +268,13 @@ public class VmwareHelper { VirtualCdrom cdRom = (VirtualCdrom )vmMo.getIsoDevice(); if(cdRom == null) { newCdRom = true; - cdRom = new VirtualCdrom(); + cdRom = new VirtualCdrom(); + assert(vmMo.getIDEDeviceControllerKey() >= 0); cdRom.setControllerKey(vmMo.getIDEDeviceControllerKey()); - if(deviceNumber < 0) deviceNumber = vmMo.getNextIDEDeviceNumber(); + cdRom.setUnitNumber(deviceNumber); cdRom.setKey(-contextNumber); }