Vitor de Lima has uploaded a new change for review.

Change subject: core, restapi: Fix architecture checks in REST API
......................................................................

core, restapi: Fix architecture checks in REST API

The REST API ignores the architecture supplied by the user when
creating or updating VMs. This change warns the user about architecture
mismatches between the selected cluster and the VM being created or
updated. If the user omits the Architecture in the incoming XML,
it is automatically determined.

Change-Id: I9122dab810ba8f1dd37a71b66a9344354718637a
Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=1071427
Signed-off-by: Vitor de Lima <[email protected]>
---
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/UpdateVmCommand.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VmManagementParametersBase.java
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmResource.java
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmsResource.java
5 files changed, 44 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/87/25687/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 5964183..2be222f 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
@@ -418,6 +418,11 @@
             return 
failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_CLUSTER_UNDEFINED_ARCHITECTURE);
         }
 
+        if (getParameters().getArchitecture() != null
+                && getParameters().getArchitecture() != 
getVdsGroup().getArchitecture()) {
+            return 
failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_VM_CLUSTER_DIFFERENT_ARCHITECTURES);
+        }
+
         if (!buildAndCheckDestStorageDomains()) {
             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 9cfa278..fa36f26 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
@@ -283,6 +283,11 @@
             return false;
         }
 
+        if (getParameters().getArchitecture() != null
+                && getParameters().getArchitecture() != 
getVdsGroup().getArchitecture()) {
+            return 
failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_VM_CLUSTER_DIFFERENT_ARCHITECTURES);
+        }
+
         if (!VmHandler.isOsTypeSupported(vmFromParams.getOs(),
                 getVdsGroup().getArchitecture(), 
getReturnValue().getCanDoActionMessages())) {
             return false;
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VmManagementParametersBase.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VmManagementParametersBase.java
index 77f40be..eda2ada 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VmManagementParametersBase.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VmManagementParametersBase.java
@@ -4,6 +4,7 @@
 
 import javax.validation.Valid;
 
+import org.ovirt.engine.core.common.businessentities.ArchitectureType;
 import org.ovirt.engine.core.common.businessentities.DiskImage;
 import org.ovirt.engine.core.common.businessentities.VM;
 import org.ovirt.engine.core.common.businessentities.VmPayload;
@@ -51,6 +52,8 @@
      * - Update VM - preserve current configuration
      */
     private Boolean virtioScsiEnabled;
+
+    private ArchitectureType architecture;
 
     public VmManagementParametersBase() {
         privateStorageDomainId = Guid.Empty;
@@ -195,4 +198,12 @@
     public void setVirtioScsiEnabled(Boolean virtioScsiEnabled) {
         this.virtioScsiEnabled = virtioScsiEnabled;
     }
+
+    public ArchitectureType getArchitecture() {
+        return architecture;
+    }
+
+    public void setArchitecture(ArchitectureType architecture) {
+        this.architecture = architecture;
+    }
 }
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmResource.java
index af8550b..02567a5 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmResource.java
@@ -14,6 +14,7 @@
 import org.ovirt.engine.api.common.util.DetailHelper;
 import org.ovirt.engine.api.common.util.DetailHelper.Detail;
 import org.ovirt.engine.api.model.Action;
+import org.ovirt.engine.api.model.Architecture;
 import org.ovirt.engine.api.model.AuthorizedKey;
 import org.ovirt.engine.api.model.CdRom;
 import org.ovirt.engine.api.model.CdRoms;
@@ -59,6 +60,7 @@
 import org.ovirt.engine.core.common.action.VdcActionType;
 import org.ovirt.engine.core.common.action.VmManagementParametersBase;
 import org.ovirt.engine.core.common.action.VmOperationParameterBase;
+import org.ovirt.engine.core.common.businessentities.ArchitectureType;
 import org.ovirt.engine.core.common.businessentities.InitializationType;
 import org.ovirt.engine.core.common.businessentities.SnapshotActionEnum;
 import org.ovirt.engine.core.common.businessentities.VDS;
@@ -474,6 +476,13 @@
             if (incoming.isSetVirtioScsi()) {
                 
params.setVirtioScsiEnabled(incoming.getVirtioScsi().isEnabled());
             }
+
+            if (incoming.isSetCpu() && incoming.getCpu().isSetArchitecture()) {
+                Architecture arch = 
Architecture.fromValue(incoming.getCpu().getArchitecture());
+
+                params.setArchitecture(getMapper(Architecture.class, 
ArchitectureType.class).map(arch, null));
+            }
+
             return params;
         }
     }
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmsResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmsResource.java
index 5de920c..ced656a 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmsResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmsResource.java
@@ -13,6 +13,7 @@
 import org.ovirt.engine.api.common.util.DetailHelper;
 import org.ovirt.engine.api.common.util.DetailHelper.Detail;
 import org.ovirt.engine.api.model.Action;
+import org.ovirt.engine.api.model.Architecture;
 import org.ovirt.engine.api.model.Certificate;
 import org.ovirt.engine.api.model.Configuration;
 import org.ovirt.engine.api.model.ConfigurationType;
@@ -43,6 +44,7 @@
 import org.ovirt.engine.core.common.action.RemoveVmParameters;
 import org.ovirt.engine.core.common.action.VdcActionType;
 import org.ovirt.engine.core.common.action.VmManagementParametersBase;
+import org.ovirt.engine.core.common.businessentities.ArchitectureType;
 import org.ovirt.engine.core.common.businessentities.DiskImage;
 import org.ovirt.engine.core.common.businessentities.Entities;
 import org.ovirt.engine.core.common.businessentities.VDS;
@@ -357,6 +359,12 @@
         params.setVirtioScsiEnabled(vm.isSetVirtioScsi() && 
vm.getVirtioScsi().isSetEnabled() ?
                 vm.getVirtioScsi().isEnabled() : null);
 
+        if (vm.isSetCpu() && vm.getCpu().isSetArchitecture()) {
+            Architecture arch = 
Architecture.fromValue(vm.getCpu().getArchitecture());
+
+            params.setArchitecture(getMapper(Architecture.class, 
ArchitectureType.class).map(arch, null));
+        }
+
         return performCreate(VdcActionType.AddVm,
                                params,
                                new 
QueryIdResolver<Guid>(VdcQueryType.GetVmByVmId, IdQueryParameters.class));
@@ -383,6 +391,12 @@
             params.setConsoleEnabled(vm.getConsole().isEnabled());
         }
 
+        if (vm.isSetCpu() && vm.getCpu().isSetArchitecture()) {
+            Architecture arch = 
Architecture.fromValue(vm.getCpu().getArchitecture());
+
+            params.setArchitecture(getMapper(Architecture.class, 
ArchitectureType.class).map(arch, null));
+        }
+
         return performCreate(VdcActionType.AddVmFromScratch,
                                params,
                                new 
QueryIdResolver<Guid>(VdcQueryType.GetVmByVmId, IdQueryParameters.class));


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I9122dab810ba8f1dd37a71b66a9344354718637a
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Vitor de Lima <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to