diff --git a/server/src/com/cloud/hypervisor/XenServerGuru.java b/server/src/com/cloud/hypervisor/XenServerGuru.java index 0702c4f9b42..a72e61bcf0d 100644 --- a/server/src/com/cloud/hypervisor/XenServerGuru.java +++ b/server/src/com/cloud/hypervisor/XenServerGuru.java @@ -46,7 +46,7 @@ public class XenServerGuru extends HypervisorGuruBase implements HypervisorGuru @Override public VirtualMachineTO implement(VirtualMachineProfile vm) { BootloaderType bt = BootloaderType.PyGrub; - if (vm.getBootLoaderType() != null) { + if (vm.getBootLoaderType() == BootloaderType.CD) { bt = vm.getBootLoaderType(); } VirtualMachineTO to = toVirtualMachineTO(vm); diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java index 1289c1da0e0..5905171d162 100755 --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java @@ -2473,13 +2473,15 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager if (owner.getState() == Account.State.disabled) { throw new PermissionDeniedException("The owner of " + vm + " is disabled: " + vm.getAccountId()); } - - VirtualMachineTemplate template = profile.getTemplate(); + if (vm.getIsoId() != null) { - template = _templateDao.findById(vm.getIsoId()); - } - if (template != null && template.getFormat() == ImageFormat.ISO && vm.getIsoId() != null) { - String isoPath = null; + String isoPath = null; + + VirtualMachineTemplate template = _templateDao.findById(vm.getIsoId()); + if (template == null || template.getFormat() != ImageFormat.ISO) { + throw new CloudRuntimeException("Can not find ISO in vm_template table for id " + vm.getIsoId()); + } + Pair isoPathPair = _storageMgr.getAbsoluteIsoPath(template.getId(), vm.getDataCenterId()); if (isoPathPair == null) { s_logger.warn("Couldn't get absolute iso path"); @@ -2487,6 +2489,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager } else { isoPath = isoPathPair.first(); } + if (template.isBootable()) { profile.setBootLoaderType(BootloaderType.CD); } @@ -2500,12 +2503,21 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager iso.setDeviceId(3); profile.addDisk(iso); } else { + VirtualMachineTemplate template = profile.getTemplate(); /* create a iso placeholder */ VolumeTO iso = new VolumeTO(profile.getId(), Volume.Type.ISO, StoragePoolType.ISO, null, template.getName(), null, null, 0, null); iso.setDeviceId(3); profile.addDisk(iso); + + if (template != null) { + if (template.isRequiresHvm()) { + profile.setBootLoaderType(BootloaderType.HVM); + } else { + profile.setBootLoaderType(BootloaderType.PyGrub); + } + } } - + return true; }