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
