diff --git a/core/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java b/core/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java index 2c6380160f5..e90940b333a 100755 --- a/core/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java +++ b/core/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java @@ -1323,7 +1323,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa i++; } - for (VolumeTO vol : disks) { + for (VolumeTO vol : sortVolumesByDeviceId(disks)) { deviceConfigSpecArray[i] = new VirtualDeviceConfigSpec(); if (vol.getType() == Volume.Type.ISO) { @@ -1525,7 +1525,31 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa }); return listForSort.toArray(new NicTO[0]); - } + } + + private VolumeTO[] sortVolumesByDeviceId(VolumeTO[] volumes) { + + List listForSort = new ArrayList(); + for (VolumeTO vol : volumes) { + listForSort.add(vol); + } + Collections.sort(listForSort, new Comparator() { + + @Override + public int compare(VolumeTO arg0, VolumeTO arg1) { + if (arg0.getDeviceId() < arg1.getDeviceId()) { + return -1; + } else if (arg0.getDeviceId() == arg1.getDeviceId()) { + return 0; + } + + return 1; + } + }); + + return listForSort.toArray(new VolumeTO[0]); + } + private HashMap> inferDatastoreDetailsFromDiskInfo(VmwareHypervisorHost hyperHost, VmwareContext context, VolumeTO[] disks) throws Exception { HashMap> poolMors = new HashMap>();