diff --git a/agent/src/com/cloud/agent/resource/computing/LibvirtComputingResource.java b/agent/src/com/cloud/agent/resource/computing/LibvirtComputingResource.java index c13ce875acd..1bff44e8f32 100755 --- a/agent/src/com/cloud/agent/resource/computing/LibvirtComputingResource.java +++ b/agent/src/com/cloud/agent/resource/computing/LibvirtComputingResource.java @@ -34,7 +34,10 @@ import java.net.URL; import java.net.URLConnection; import java.text.MessageFormat; import java.util.ArrayList; +import java.util.Arrays; import java.util.Calendar; +import java.util.Collections; +import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -2581,8 +2584,15 @@ public class LibvirtComputingResource extends ServerResourceBase implements protected void createVbd(Connect conn, VirtualMachineTO vmSpec, String vmName, LibvirtVMDef vm) throws InternalErrorException, LibvirtException, URISyntaxException { - List disks = new ArrayList(); - for (VolumeTO volume : vmSpec.getDisks()) { + List disks = Arrays.asList(vmSpec.getDisks()); + Collections.sort(disks, new Comparator() { + @Override + public int compare(VolumeTO arg0, VolumeTO arg1) { + return arg0.getDeviceId() > arg1.getDeviceId() ? 1 : -1; + } + }); + + for (VolumeTO volume : disks) { KVMPhysicalDisk physicalDisk = null; KVMStoragePool pool = null; if (volume.getType() == Volume.Type.ISO && volume.getPath() != null) { @@ -2627,17 +2637,9 @@ public class LibvirtComputingResource extends ServerResourceBase implements diskBusType, DiskDef.diskFmtType.QCOW2); } } - - disks.add(devId, disk); - continue; } vm.getDevices().addDevice(disk); - - } - - for (DiskDef disk : disks) { - vm.getDevices().addDevice(disk); } if (vmSpec.getType() != VirtualMachine.Type.User) {