diff --git a/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java b/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java index 8d7e4a515af..f312752fc5d 100755 --- a/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java +++ b/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java @@ -1124,6 +1124,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac } try { + resetVmNicsDeviceId(vm.getId()); _networkMgr.prepare(vmProfile, new DeployDestination(dest.getDataCenter(), dest.getPod(), null, null, dest.getStorageForDisks()), ctx); if (vm.getHypervisorType() != HypervisorType.BareMetal) { volumeMgr.prepare(vmProfile, dest); @@ -1317,6 +1318,26 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac } } + private void resetVmNicsDeviceId(Long vmId) { + final List nics = _nicsDao.listByVmId(vmId); + Collections.sort(nics, new Comparator() { + @Override + public int compare(NicVO nic1, NicVO nic2) { + Long nicDevId1 = Long.valueOf(nic1.getDeviceId()); + Long nicDevId2 = Long.valueOf(nic2.getDeviceId()); + return nicDevId1.compareTo(nicDevId2); + } + }); + int deviceId = 0; + for (final NicVO nic : nics) { + if (nic.getDeviceId() != deviceId) { + nic.setDeviceId(deviceId); + _nicsDao.update(nic.getId(),nic); + } + deviceId ++; + } + } + // Add extra config data to the vmTO as a Map private void addExtraConfig(VirtualMachineTO vmTO) { Map details = vmTO.getDetails();