private boolean checkCanPerformRegularUpdate() { boolean retValue = true; if (_oldDisk.getDiskInterface() != getParameters().getDiskInfo().getDiskInterface()) { List<VmNetworkInterface> allVmInterfaces = DbFacade.getInstance().getVmNetworkInterfaceDao().getAllForVm(getVmId()); List<Disk> allVmDisks = getDiskDao().getAllForVm(getVmId()); allVmDisks.removeAll( LinqUtils.filter( allVmDisks, new Predicate<Disk>() { @Override public boolean eval(Disk o) { return o.getId().equals(_oldDisk.getId()); } })); allVmDisks.add(getParameters().getDiskInfo()); if (!checkPciAndIdeLimit( getVm().getnum_of_monitors(), allVmInterfaces, allVmDisks, getReturnValue().getCanDoActionMessages())) { retValue = false; } } // Validate update boot disk. if (retValue && getParameters().getDiskInfo().isBoot()) { VmHandler.updateDisksFromDb(getVm()); for (Disk disk : getVm().getDiskMap().values()) { if (disk.isBoot() && !disk.getId().equals(_oldDisk.getId())) { retValue = false; addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_DISK_BOOT_IN_USE); getReturnValue() .getCanDoActionMessages() .add(String.format("$DiskName %1$s", disk.getDiskAlias())); break; } } } // Set disk alias name in the disk retrieved from the parameters. ImagesHandler.setDiskAlias(getParameters().getDiskInfo(), getVm()); return retValue && validateShareableDisk(); }
public String generateOvfConfigurationForVm(VM vm) { if (VMStatus.ImageLocked != vm.getStatus()) { VmHandler.updateDisksFromDb(vm); DiskImagesValidator validator = new DiskImagesValidator(vm.getDiskList()); if (validator.diskImagesNotLocked().isValid()) { loadVmData(vm); Long currentDbGeneration = getDbFacade().getVmStaticDao().getDbGeneration(vm.getId()); // currentDbGeneration can be null in case that the vm was deleted during the run of // OvfDataUpdater. if (currentDbGeneration != null && vm.getStaticData().getDbGeneration() == currentDbGeneration) { return buildMetadataDictionaryForVm(vm); } } } return null; }