protected boolean isBlankTemplate() { if (getVmTemplate() != null) { return VmTemplateHandler.BLANK_VM_TEMPLATE_ID.equals(getVmTemplate().getId()); } return false; }
@Override protected boolean canDoAction() { Guid vmTemplateId = getVmTemplateId(); VmTemplate template = getVmTemplate(); if (!super.canDoAction()) { return false; } boolean isInstanceType = getVmTemplate().getTemplateType() == VmEntityType.INSTANCE_TYPE; if (getVdsGroup() == null && !isInstanceType) { addCanDoActionMessage(EngineMessage.ACTION_TYPE_FAILED_CLUSTER_CAN_NOT_BE_EMPTY); return false; } // check template exists if (!validate(templateExists())) { return false; } // check not blank template if (VmTemplateHandler.BLANK_VM_TEMPLATE_ID.equals(vmTemplateId)) { return failCanDoAction(EngineMessage.VMT_CANNOT_REMOVE_BLANK_TEMPLATE); } // check storage pool valid if (!isInstanceType && !validate(new StoragePoolValidator(getStoragePool()).isUp())) { return false; } // check if delete protected if (template.isDeleteProtected()) { return failCanDoAction(EngineMessage.ACTION_TYPE_FAILED_DELETE_PROTECTION_ENABLED); } if (!isInstanceType) { fetchImageTemplates(); } // populate all the domains of the template Set<Guid> allDomainsList = getStorageDomainsByDisks(imageTemplates, true); getParameters().setStorageDomainsList(new ArrayList<>(allDomainsList)); // check template images for selected domains ArrayList<String> canDoActionMessages = getReturnValue().getCanDoActionMessages(); for (Guid domainId : getParameters().getStorageDomainsList()) { if (!isVmTemplateImagesReady( getVmTemplate(), domainId, canDoActionMessages, getParameters().getCheckDisksExists(), true, false, true, storageToDisksMap.get(domainId))) { return false; } } // check no vms from this template on selected domains List<VM> vms = getVmDao().getAllWithTemplate(vmTemplateId); List<String> problematicVmNames = new ArrayList<>(); for (VM vm : vms) { problematicVmNames.add(vm.getName()); } if (!problematicVmNames.isEmpty()) { return failCanDoAction( EngineMessage.VMT_CANNOT_REMOVE_DETECTED_DERIVED_VM, String.format("$vmsList %1$s", StringUtils.join(problematicVmNames, ","))); } if (template.isBaseTemplate() && !tryLockSubVersionIfExists()) { return false; } if (!isInstanceType && !validate(checkNoDisksBasedOnTemplateDisks())) { return false; } return true; }