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

Reply via email to