use of org.ovirt.engine.core.bll.validator.storage.DiskImagesValidator in project ovirt-engine by oVirt.
the class UpdateVmDiskCommand method validate.
@Override
protected boolean validate() {
if (!validate(new VmValidator(getVm()).isVmExists()) || !isDiskExistAndAttachedToVm(getOldDisk()) || !validateDiskVmData()) {
return false;
}
boolean isDiskImageOrCinder = DiskStorageType.IMAGE == getOldDisk().getDiskStorageType() || DiskStorageType.CINDER == getOldDisk().getDiskStorageType();
if (isDiskImageOrCinder) {
ValidationResult imagesNotLocked = new DiskImagesValidator((DiskImage) getOldDisk()).diskImagesNotLocked();
if (!imagesNotLocked.isValid()) {
return validate(imagesNotLocked);
}
}
DiskValidator oldDiskValidator = getDiskValidator(getOldDisk());
ValidationResult isHostedEngineDisk = oldDiskValidator.validateNotHostedEngineDisk();
if (!isHostedEngineDisk.isValid()) {
return validate(isHostedEngineDisk);
}
if (!checkOperationAllowedOnDiskContentType(getOldDisk())) {
return false;
}
if (!canRunActionOnNonManagedVm()) {
return false;
}
boolean isDiskInterfaceUpdated = getOldDiskVmElement().getDiskInterface() != getDiskVmElement().getDiskInterface();
if (!vmsDiskOrSnapshotPluggedTo.isEmpty()) {
// only virtual drive size can be updated when VMs is running
if (isAtLeastOneVmIsNotDown(vmsDiskOrSnapshotPluggedTo) && updateParametersRequiringVmDownRequested()) {
return failValidation(EngineMessage.ACTION_TYPE_FAILED_VM_IS_NOT_DOWN);
}
boolean isUpdatedAsBootable = !getOldDiskVmElement().isBoot() && getDiskVmElement().isBoot();
// multiple boot disk snapshot can be attached to a single vm
if (isUpdatedAsBootable && !validate(oldDiskValidator.isVmNotContainsBootDisk(getVm()))) {
return false;
}
if (isDiskInterfaceUpdated && !isDiskPassPciAndIdeLimit()) {
return false;
}
}
if (isDiskImageOrCinder && !validateCanResizeDisk()) {
return false;
}
if (resizeDiskImageRequested() && amendDiskRequested()) {
return failValidation(EngineMessage.ACTION_TYPE_FAILED_AMEND_AND_EXTEND_IN_ONE_OPERATION);
}
if (isQcowCompatChangedOnRawDisk()) {
return failValidation(EngineMessage.ACTION_TYPE_FAILED_CANT_AMEND_RAW_DISK);
}
DiskVmElementValidator diskVmElementValidator = getDiskVmElementValidator(getNewDisk(), getDiskVmElement());
return validateCanUpdateShareable() && validateCanUpdateReadOnly() && validateVmPoolProperties() && validateQuota() && validate(diskVmElementValidator.isVirtIoScsiValid(getVm())) && (!isDiskInterfaceUpdated || validate(diskVmElementValidator.isDiskInterfaceSupported(getVm()))) && setAndValidateDiskProfiles() && validatePassDiscardSupported(diskVmElementValidator);
}
use of org.ovirt.engine.core.bll.validator.storage.DiskImagesValidator in project ovirt-engine by oVirt.
the class RemoveDiskSnapshotsCommand method validate.
@Override
protected boolean validate() {
if (getVm() == null) {
return failValidation(EngineMessage.ACTION_TYPE_FAILED_VM_NOT_FOUND);
}
DiskSnapshotsValidator diskSnapshotsValidator = createDiskSnapshotsValidator(getImages());
if (!validate(diskSnapshotsValidator.diskSnapshotsNotExist(getParameters().getImageIds())) || !validate(diskSnapshotsValidator.diskImagesBelongToSameImageGroup()) || !validate(diskSnapshotsValidator.imagesAreSnapshots())) {
return false;
}
// Validate all chain of images in the disk
if (!validateAllDiskImages()) {
return false;
}
DiskImagesValidator diskImagesValidator = createDiskImageValidator(getImages());
if (!validate(diskImagesValidator.diskImagesSnapshotsNotAttachedToOtherVms(false))) {
return false;
}
if (!canRunActionOnNonManagedVm()) {
return false;
}
if (isDiskPlugged()) {
VmValidator vmValidator = createVmValidator(getVm());
if (!validate(vmValidator.vmQualifiedForSnapshotMerge())) {
return false;
}
}
if (!validate(new StoragePoolValidator(getStoragePool()).existsAndUp()) || !validateVmNotDuringSnapshot() || !validateVmNotInPreview() || !validateSnapshotExists() || !validateSnapshotType() || !validateStorageDomainActive()) {
return false;
}
if (!validateStorageDomainAvailableSpace()) {
return false;
}
return true;
}
use of org.ovirt.engine.core.bll.validator.storage.DiskImagesValidator in project ovirt-engine by oVirt.
the class TryBackToAllSnapshotsOfVmCommand method validate.
@Override
protected boolean validate() {
if (Guid.Empty.equals(getParameters().getDstSnapshotId())) {
return failValidation(EngineMessage.ACTION_TYPE_FAILED_CORRUPTED_VM_SNAPSHOT_ID);
}
// verify that the destination lease domain ID belongs to one of the VM's snapshots
if (getParameters().getDstLeaseDomainId() != null) {
if (!validate(snapshotsValidator.isLeaseDomainIdBelongsToSnapshot(getVmId(), getParameters().getDstLeaseDomainId())) && !getParameters().getDstLeaseDomainId().equals(getVm().getLeaseStorageDomainId())) {
return failValidation(EngineMessage.ACTION_TYPE_FAILED_LEASE_DOMAIN_ID_IS_NOT_VALID);
}
}
VmValidator vmValidator = new VmValidator(getVm());
if (!validate(vmValidator.isVmExists()) || !validate(vmValidator.vmDown()) || !validate(snapshotsValidator.snapshotExists(getVmId(), getParameters().getDstSnapshotId())) || !validate(snapshotsValidator.vmNotDuringSnapshot(getVmId())) || !validate(snapshotsValidator.vmNotInPreview(getVmId())) || !validate(snapshotsValidator.snapshotVmConfigurationBroken(getDstSnapshot(), getVmName()))) {
return false;
}
updateVmDisksFromDb();
List<DiskImage> diskImages = DisksFilter.filterImageDisks(getVm().getDiskMap().values(), ONLY_NOT_SHAREABLE, ONLY_SNAPABLE, ONLY_ACTIVE);
diskImages.addAll(DisksFilter.filterCinderDisks(getVm().getDiskMap().values(), ONLY_PLUGGED));
if (!diskImages.isEmpty()) {
if (!validate(new StoragePoolValidator(getStoragePool()).existsAndUp())) {
return false;
}
DiskImagesValidator diskImagesValidator = new DiskImagesValidator(diskImages);
if (!validate(diskImagesValidator.diskImagesNotIllegal()) || !validate(diskImagesValidator.diskImagesNotLocked())) {
return false;
}
List<DiskImage> images = getImagesToPreview();
DiskImagesValidator diskImagesToPreviewValidator = new DiskImagesValidator(images);
if (!validate(diskImagesToPreviewValidator.noDuplicatedIds()) || !validate(diskImagesToPreviewValidator.diskImagesSnapshotsAttachedToVm(getVmId())) || !validate(diskImagesToPreviewValidator.diskImagesNotIllegal()) || !validate(diskImagesToPreviewValidator.diskImagesNotLocked())) {
return false;
}
Set<Guid> storageIds = ImagesHandler.getAllStorageIdsForImageIds(diskImages);
// verify lease storage domain status
if (getParameters().getDstLeaseDomainId() != null) {
storageIds.add(getParameters().getDstLeaseDomainId());
} else if (getDstSnapshot().getVmConfiguration() != null) {
Guid leaseDomainId = OvfUtils.fetchLeaseDomainId(getDstSnapshot().getVmConfiguration());
if (leaseDomainId != null) {
storageIds.add(leaseDomainId);
}
}
MultipleStorageDomainsValidator storageValidator = new MultipleStorageDomainsValidator(getVm().getStoragePoolId(), storageIds);
if (!validate(storageValidator.allDomainsExistAndActive()) || !validate(storageValidator.allDomainsWithinThresholds()) || !validateCinder()) {
return false;
}
}
DiskSnapshotsValidator diskSnapshotsValidator = new DiskSnapshotsValidator(getParameters().getDisks());
if (!validate(diskSnapshotsValidator.canDiskSnapshotsBePreviewed(getParameters().getDstSnapshotId()))) {
return false;
}
if (isRestoreMemory() && !validateMemoryTakenInSupportedVersion()) {
return false;
}
if (!canRestoreVmConfigFromSnapshot()) {
return failValidation(EngineMessage.MAC_POOL_NOT_ENOUGH_MAC_ADDRESSES);
}
return true;
}
use of org.ovirt.engine.core.bll.validator.storage.DiskImagesValidator in project ovirt-engine by oVirt.
the class RemoveSnapshotCommand method validateImages.
protected boolean validateImages() {
List<DiskImage> imagesToValidate = getDiskImagesToValidate();
DiskImagesValidator diskImagesValidator = new DiskImagesValidator(imagesToValidate);
return validateImagesNotLocked(diskImagesValidator) && (getVm().isQualifiedForLiveSnapshotMerge() || validate(diskImagesValidator.diskImagesNotIllegal())) && (!getVm().isQualifiedForLiveSnapshotMerge() || validateSnapshotDisksArePlugged());
}
use of org.ovirt.engine.core.bll.validator.storage.DiskImagesValidator in project ovirt-engine by oVirt.
the class RestoreAllSnapshotsCommand method performImagesChecks.
protected boolean performImagesChecks() {
List<DiskImage> diskImagesToCheck = DisksFilter.filterImageDisks(getImagesList(), ONLY_NOT_SHAREABLE, ONLY_ACTIVE);
DiskImagesValidator diskImagesValidator = new DiskImagesValidator(diskImagesToCheck);
return validate(diskImagesValidator.diskImagesNotLocked());
}
Aggregations