Gustavo Frederico Temple Pedrosa has uploaded a new change for review.

Change subject: engine: Display type validation
......................................................................

engine: Display type validation

This change displays an error if the display type is not compatible
with the selected operating system.

Change-Id: Ifff508fb2cbc3b2447f6fb7412d4feadd20a3c6e
Signed-off-by: Gustavo Pedrosa <gustavo.pedr...@eldorado.org.br>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmTemplateCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmHandler.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/VmValidationUtils.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
11 files changed, 71 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/50/18150/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java
index 0394530..6ae4867 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java
@@ -355,6 +355,12 @@
             return 
failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_NAME_LENGTH_IS_TOO_LONG);
         }
 
+        if 
(!VmHandler.isDisplayTypeSupported(getParameters().getVmStaticData().getOsId(),
+                vmFromParams.getDefaultDisplayType(), 
getReturnValue().getCanDoActionMessages(),
+                getVdsGroup().getcompatibility_version())) {
+            return false;
+        }
+
         // check for Vm Payload
         if (getParameters().getVmPayload() != null) {
             if (!checkPayload(getParameters().getVmPayload(),
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java
index e823b15..452b593 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java
@@ -257,6 +257,13 @@
                 getReturnValue().getCanDoActionMessages(), 
getVdsGroup().getcompatibility_version())) {
             return false;
         }
+
+        if 
(!VmHandler.isDisplayTypeSupported(getParameters().getMasterVm().getOsId(),
+                getParameters().getMasterVm().getDefaultDisplayType(),
+                getReturnValue().getCanDoActionMessages(), 
getVdsGroup().getcompatibility_version())) {
+            return false;
+        }
+
         if 
(!IsVmPriorityValueLegal(getParameters().getMasterVm().getPriority(), 
getReturnValue()
                 .getCanDoActionMessages())) {
             return false;
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmCommand.java
index 71d85f3..554b1b7 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmCommand.java
@@ -257,6 +257,12 @@
             return false;
         }
 
+        if (!VmHandler.isDisplayTypeSupported(vmFromParams.getOs(),
+                vmFromParams.getDefaultDisplayType(), 
getReturnValue().getCanDoActionMessages(),
+                getVdsGroup().getcompatibility_version())) {
+            return false;
+        }
+
         if (vmFromParams.getSingleQxlPci() &&
                 
!VmHandler.isSingleQxlDeviceLegal(vmFromParams.getDefaultDisplayType(),
                         vmFromParams.getOs(),
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmTemplateCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmTemplateCommand.java
index a820776..5bce79d 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmTemplateCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmTemplateCommand.java
@@ -90,6 +90,13 @@
             returnValue = 
VmHandler.isUsbPolicyLegal(getParameters().getVmTemplateData().getUsbPolicy(), 
getParameters().getVmTemplateData().getOsId(), getVdsGroup(), 
getReturnValue().getCanDoActionMessages());
         }
 
+        // Check if the display type is supported
+        if (returnValue) {
+            returnValue = 
VmHandler.isDisplayTypeSupported(getParameters().getVmTemplateData().getOsId(),
+                    
getParameters().getVmTemplateData().getDefaultDisplayType(), 
getReturnValue().getCanDoActionMessages(),
+                    getVdsGroup().getcompatibility_version());
+        }
+
         if (returnValue) {
             returnValue = 
AddVmCommand.CheckCpuSockets(getParameters().getVmTemplateData().getNumOfSockets(),
                     getParameters().getVmTemplateData().getCpuPerSocket(), 
getVdsGroup().getcompatibility_version()
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmHandler.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmHandler.java
index 8467cb6..34fb496 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmHandler.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmHandler.java
@@ -344,6 +344,35 @@
     }
 
     /**
+     * Check if the display type is supported.
+     *
+     * @param osId
+     *            Type of the OS.
+     * @param defaultDisplayType
+     *            The VM default display type.
+     * @param reasons
+     *            The reasons.VdsGroups
+     * @param clusterVersion
+     *            The cluster version.
+     * @return
+     */
+    public static boolean isDisplayTypeSupported(int osId,
+                                            DisplayType defaultDisplayType,
+                                            List<String> reasons,
+                                            Version clusterVersion) {
+        if (defaultDisplayType == DisplayType.vnc) {
+            return true;
+        } else if (defaultDisplayType == DisplayType.qxl) {
+            boolean result = VmValidationUtils.hasSpiceSupport(osId, 
clusterVersion);
+            if (!result) {
+                
reasons.add(VdcBllMessages.ACTION_TYPE_FAILED_ILLEGAL_VM_DISPLAY_TYPE_IS_NOT_SUPPORTED_BY_OS.toString());
+            }
+            return result;
+        }
+        return true;
+    }
+
+    /**
      * Check if the interface name is not duplicate in the list of interfaces.
      *
      * @param interfaces
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/VmValidationUtils.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/VmValidationUtils.java
index cfa9951..3e01dc7 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/VmValidationUtils.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/VmValidationUtils.java
@@ -20,6 +20,15 @@
     }
 
     /**
+     * Check if the type of the OS has spice support.
+     *
+     * @return The spice support boolean (as per the configuration).
+     */
+    public static boolean hasSpiceSupport(int osId, Version version) {
+        return 
SimpleDependecyInjector.getInstance().get(OsRepository.class).hasSpiceSupport(osId,
 version);
+    }
+
+    /**
      * Get the configured minimum VM memory size allowed.
      *
      * @return The minimum VM memory size allowed (as per configuration).
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 02e3be2..98d8bbf 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
@@ -192,6 +192,7 @@
     ACTION_TYPE_FAILED_ILLEGAL_MEMORY_SIZE(ErrorType.CONSTRAINT_VIOLATION),
     ACTION_TYPE_FAILED_ILLEGAL_NUM_OF_MONITORS(ErrorType.BAD_PARAMETERS),
     
ACTION_TYPE_FAILED_ILLEGAL_SINGLE_DEVICE_DISPLAY_TYPE(ErrorType.BAD_PARAMETERS),
+    
ACTION_TYPE_FAILED_ILLEGAL_VM_DISPLAY_TYPE_IS_NOT_SUPPORTED_BY_OS(ErrorType.BAD_PARAMETERS),
     ACTION_TYPE_FAILED_ILLEGAL_SINGLE_DEVICE_OS_TYPE(ErrorType.BAD_PARAMETERS),
     
ACTION_TYPE_FAILED_ILLEGAL_SINGLE_DEVICE_INCOMPATIBLE_VERSION(ErrorType.BAD_PARAMETERS),
     ACTION_TYPE_FAILED_ILLEGAL_DOMAIN_NAME(ErrorType.BAD_PARAMETERS),
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 64a5a0b..cea2ecf 100644
--- 
a/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties
+++ 
b/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties
@@ -552,6 +552,7 @@
 ACTION_TYPE_FAILED_ILLEGAL_NUM_OF_MONITORS=Cannot ${action} ${type}. Illegal 
number of monitors is provided, max allowed number of monitors is 1 for VNC and 
the max number in the ValidNumOfMonitors configuration variable for SPICE.
 ACTION_TYPE_FAILED_ILLEGAL_SINGLE_DEVICE_OS_TYPE=Cannot ${action} ${type}. 
Cannot set single display device to non Linux operating system.
 ACTION_TYPE_FAILED_ILLEGAL_SINGLE_DEVICE_DISPLAY_TYPE=Cannot ${action} 
${type}. Cannot set single display device via VNC display.
+ACTION_TYPE_FAILED_ILLEGAL_VM_DISPLAY_TYPE_IS_NOT_SUPPORTED_BY_OS=Cannot 
${action} ${type}. Selected display type is not supported by the operating 
system.
 ACTION_TYPE_FAILED_ILLEGAL_SINGLE_DEVICE_INCOMPATIBLE_VERSION=Cannot ${action} 
${type}. Cluster does not support Single Qxl Pci devices.
 ACTION_TYPE_FAILED_ILLEGAL_DOMAIN_NAME=Cannot ${action} ${type}. Illegal 
Domain name: ${Domain}. Domain name has unsupported special character ${Char}.
 ACTION_TYPE_FAILED_CANNOT_DECREASE_COMPATIBILITY_VERSION=Cannot decrease data 
center compatibility version.
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 5a1af79..1776a4e 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
@@ -1495,6 +1495,9 @@
     @DefaultStringValue("Cannot ${action} ${type}. Cannot set single display 
device via VNC display.")
     String ACTION_TYPE_FAILED_ILLEGAL_SINGLE_DEVICE_DISPLAY_TYPE();
 
+    @DefaultStringValue("Cannot ${action} ${type}. Selected display type is 
not supported by the operating system.")
+    String ACTION_TYPE_FAILED_ILLEGAL_VM_DISPLAY_TYPE_IS_NOT_SUPPORTED_BY_OS();
+
     @DefaultStringValue("Cannot ${action} ${type}. Cannot set single display 
device to non Linux operating system.")
     String ACTION_TYPE_FAILED_ILLEGAL_SINGLE_DEVICE_OS_TYPE();
 
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 ffead99..5612330 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
@@ -538,6 +538,7 @@
 ACTION_TYPE_FAILED_ILLEGAL_NUM_OF_MONITORS=Cannot ${action} ${type}. Illegal 
number of monitors is provided, max allowed number of monitors is 1 for VNC and 
the max number in the ValidNumOfMonitors configuration variable for SPICE.
 ACTION_TYPE_FAILED_ILLEGAL_SINGLE_DEVICE_OS_TYPE=Cannot ${action} ${type}. 
Cannot set single display device to non Linux operating system.
 ACTION_TYPE_FAILED_ILLEGAL_SINGLE_DEVICE_DISPLAY_TYPE=Cannot ${action} 
${type}. Cannot set single display device via VNC display.
+ACTION_TYPE_FAILED_ILLEGAL_VM_DISPLAY_TYPE_IS_NOT_SUPPORTED_BY_OS=Cannot 
${action} ${type}. Selected display type is not supported by the operating 
system.
 ACTION_TYPE_FAILED_ILLEGAL_SINGLE_DEVICE_INCOMPATIBLE_VERSION=Cannot ${action} 
${type}. Cluster does not support Single Qxl Pci devices.
 ACTION_TYPE_FAILED_ILLEGAL_DOMAIN_NAME=Cannot ${action} ${type}. Illegal 
Domain name: ${Domain}. Domain name has unsupported special character ${Char}.
 ACTION_TYPE_FAILED_CANNOT_DECREASE_COMPATIBILITY_VERSION=Cannot decrease data 
center compatibility version.
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 671e930..b75ecc4 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
@@ -556,6 +556,7 @@
 ACTION_TYPE_FAILED_ILLEGAL_NUM_OF_MONITORS=Cannot ${action} ${type}. Illegal 
number of monitors is provided, max allowed number of monitors is 1 for VNC and 
the max number in the ValidNumOfMonitors configuration variable for SPICE.
 ACTION_TYPE_FAILED_ILLEGAL_SINGLE_DEVICE_OS_TYPE=Cannot ${action} ${type}. 
Cannot set single display device to non Linux operating system.
 ACTION_TYPE_FAILED_ILLEGAL_SINGLE_DEVICE_DISPLAY_TYPE=Cannot ${action} 
${type}. Cannot set single display device via VNC display.
+ACTION_TYPE_FAILED_ILLEGAL_VM_DISPLAY_TYPE_IS_NOT_SUPPORTED_BY_OS=Cannot 
${action} ${type}. Selected display type is not supported by the operating 
system.
 ACTION_TYPE_FAILED_ILLEGAL_SINGLE_DEVICE_INCOMPATIBLE_VERSION=Cannot ${action} 
${type}. Cluster does not support Single Qxl Pci devices.
 ACTION_TYPE_FAILED_ILLEGAL_DOMAIN_NAME=Cannot ${action} ${type}. Illegal 
Domain name: ${Domain}. Domain name has unsupported special character ${Char}.
 ACTION_TYPE_FAILED_CANNOT_DECREASE_COMPATIBILITY_VERSION=Cannot decrease data 
center compatibility version.


-- 
To view, visit http://gerrit.ovirt.org/18150
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ifff508fb2cbc3b2447f6fb7412d4feadd20a3c6e
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Gustavo Frederico Temple Pedrosa <gustavo.pedr...@eldorado.org.br>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to