Daniel Erez has uploaded a new change for review. Change subject: core: added volume types existence validation ......................................................................
core: added volume types existence validation Added 'validateCinderVolumeTypesExist' to CinderDisksValidator, in order to validate that the specified volume type exists (upon creating a cinder disk). Change-Id: I781ba3667f4f28db3ab79e2e31346154097ea664 Bug-Url: https://bugzilla.redhat.com/1185826 Signed-off-by: Daniel Erez <de...@redhat.com> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddDiskCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/storage/CinderDisksValidator.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java M backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties M frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java M frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties M frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties 7 files changed, 43 insertions(+), 1 deletion(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/67/41967/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddDiskCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddDiskCommand.java index 95edd6c..019f582 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddDiskCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddDiskCommand.java @@ -143,7 +143,9 @@ cinderDisk.setStorageIds(new ArrayList<>(Arrays.asList(getStorageDomainId()))); StorageDomainValidator storageDomainValidator = createStorageDomainValidator(); CinderDisksValidator cinderDisksValidator = new CinderDisksValidator(cinderDisk); - return validate(storageDomainValidator.isDomainExistAndActive()) && validate(cinderDisksValidator.validateCinderDiskLimits()); + return validate(storageDomainValidator.isDomainExistAndActive()) && + validate(cinderDisksValidator.validateCinderDiskLimits()) && + validate(cinderDisksValidator.validateCinderVolumeTypesExist()); } return true; diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/storage/CinderDisksValidator.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/storage/CinderDisksValidator.java index 82c4fbf..a2b8601 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/storage/CinderDisksValidator.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/storage/CinderDisksValidator.java @@ -2,9 +2,13 @@ import com.woorea.openstack.base.client.OpenStackResponseException; import com.woorea.openstack.cinder.model.Limits; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.collections.Predicate; +import org.apache.commons.lang.StringUtils; import org.ovirt.engine.core.bll.ValidationResult; import org.ovirt.engine.core.bll.provider.storage.OpenStackVolumeProviderProxy; import org.ovirt.engine.core.common.businessentities.storage.CinderDisk; +import org.ovirt.engine.core.common.businessentities.storage.CinderVolumeType; import org.ovirt.engine.core.common.businessentities.storage.Disk; import org.ovirt.engine.core.common.errors.VdcBllMessages; import org.ovirt.engine.core.compat.Guid; @@ -13,6 +17,7 @@ import java.util.Collections; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.concurrent.Callable; @@ -78,6 +83,34 @@ }); } + public ValidationResult validateCinderVolumeTypesExist() { + return validate(new Callable<ValidationResult>() { + @Override + public ValidationResult call() { + for (final CinderDisk disk : cinderDisks) { + if (StringUtils.isEmpty(disk.getCinderVolumeType())) { + // Specifying a volume type is not mandatory as Cinder can auto-select it. + continue; + } + OpenStackVolumeProviderProxy proxy = diskProxyMap.get(disk.getId()); + List<CinderVolumeType> volumeTypes = proxy.getVolumeTypes(); + boolean volumeTypeExists = CollectionUtils.exists(volumeTypes, new Predicate() { + @Override + public boolean evaluate(Object o) { + return ((CinderVolumeType) o).getName().equals(disk.getCinderVolumeType()); + } + }); + + if (!volumeTypeExists) { + return new ValidationResult(VdcBllMessages.CINDER_VOLUME_TYPE_NOT_EXISTS, + String.format("$cinderVolumeType %s", disk.getCinderVolumeType())); + } + } + return ValidationResult.VALID; + } + }); + } + private Map<Guid, OpenStackVolumeProviderProxy> initializeVolumeProviderProxyMap() { if (diskProxyMap == null) { diskProxyMap = new HashMap<>(); diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java index 38902b9..7675c8a 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java @@ -1224,6 +1224,7 @@ ACTION_TYPE_FAILED_CINDER(ErrorType.INTERNAL_ERROR), CANNOT_ADD_CINDER_DISK_VOLUME_LIMIT_EXCEEDED(ErrorType.CONFLICT), CINDER_DISK_ALREADY_REGISTERED(ErrorType.CONFLICT), + CINDER_VOLUME_TYPE_NOT_EXISTS(ErrorType.CONFLICT), ERROR_CANNOT_DETACH_CINDER_PROVIDER_WITH_IMAGES(ErrorType.CONFLICT), NO_HOST_PROVIDER_FOR_SYSTEM(ErrorType.NOT_SUPPORTED), diff --git a/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties b/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties index b653bd2..b8b53a7 100644 --- a/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties +++ b/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties @@ -1418,6 +1418,7 @@ ACTION_TYPE_FAILED_CINDER=Cannot ${action} ${type}. An error occurred on Cinder - '${cinderException}'. CANNOT_ADD_CINDER_DISK_VOLUME_LIMIT_EXCEEDED=Cannot ${action} ${type}. Maximum number of volumes allowed (${maxTotalVolumes}) exceeded - could not create Cinder disk ${diskAlias}. CINDER_DISK_ALREADY_REGISTERED=Cannot ${action} ${type}. Cinder disk is already registered (${diskAlias}). +CINDER_VOLUME_TYPE_NOT_EXISTS=Cannot ${action} ${type}. Cinder volume type '${cinderVolumeType}' does not exist. ERROR_CANNOT_DETACH_CINDER_PROVIDER_WITH_IMAGES=Cannot detach a non empty Cinder provider.\n\ -Please remove all VMs / Templates / Disks and try again. diff --git a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java index ab111a8..6c408f4 100644 --- a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java +++ b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java @@ -3833,6 +3833,9 @@ @DefaultStringValue("Base64 part of vm icon is malformed.") String VM_ICON_BASE64_PART_MALFORMED(); + @DefaultStringValue("Cannot ${action} ${type}. Cinder volume type '${cinderVolumeType}' does not exist.") + String CINDER_VOLUME_TYPE_NOT_EXISTS(); + @DefaultStringValue("Cannot detach a non empty Cinder provider.\n -Please remove all VMs / Templates / Disks and try again.") String ERROR_CANNOT_DETACH_CINDER_PROVIDER_WITH_IMAGES(); diff --git a/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties b/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties index bd8e233..8db447a 100644 --- a/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties +++ b/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties @@ -1097,6 +1097,7 @@ ACTION_TYPE_FAILED_CINDER=Cannot ${action} ${type}. An error occurred on Cinder - '${cinderException}'. CANNOT_ADD_CINDER_DISK_VOLUME_LIMIT_EXCEEDED=Cannot ${action} ${type}. Maximum number of volumes allowed (${maxTotalVolumes}) exceeded - could not create Cinder disk ${diskAlias}. CINDER_DISK_ALREADY_REGISTERED=Cannot ${action} ${type}. Cinder disk is already registered (${diskAlias}). +CINDER_VOLUME_TYPE_NOT_EXISTS=Cannot ${action} ${type}. Cinder volume type '${cinderVolumeType}' does not exist. ACTION_TYPE_FAILED_VM_USES_SCSI_RESERVATION=Cannot ${action} ${type}. VM uses SCSI reservation. ACTION_TYPE_FAILED_SCSI_RESERVATION_NOT_VALID_FOR_FLOATING_DISK=Cannot ${action} ${type}. SCSI reservation cannot be set when adding floating disks. diff --git a/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties b/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties index 5d036ad..dc73fc5 100644 --- a/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties +++ b/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties @@ -1363,6 +1363,7 @@ ACTION_TYPE_FAILED_CINDER=Cannot ${action} ${type}. An error occurred on Cinder - '${cinderException}'. CANNOT_ADD_CINDER_DISK_VOLUME_LIMIT_EXCEEDED=Cannot ${action} ${type}. Maximum number of volumes allowed (${maxTotalVolumes}) exceeded - could not create Cinder disk ${diskAlias}. CINDER_DISK_ALREADY_REGISTERED=Cannot ${action} ${type}. Cinder disk is already registered (${diskAlias}). +CINDER_VOLUME_TYPE_NOT_EXISTS=Cannot ${action} ${type}. Cinder volume type '${cinderVolumeType}' does not exist. ERROR_CANNOT_DETACH_CINDER_PROVIDER_WITH_IMAGES=Cannot detach a non empty Cinder provider.\n\ -Please remove all VMs / Templates / Disks and try again. -- To view, visit https://gerrit.ovirt.org/41967 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I781ba3667f4f28db3ab79e2e31346154097ea664 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Daniel Erez <de...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches