Liron Ar has uploaded a new change for review. Change subject: restapi: wip: adding support for executing ImportVmFromConfiguration ......................................................................
restapi: wip: adding support for executing ImportVmFromConfiguration WIP - contains the execution. Change-Id: If1af88e93c65ab1a2a34e7a3e5c99db36956ab5b Signed-off-by: Liron Aravot <[email protected]> --- M backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd M backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmsResource.java 3 files changed, 75 insertions(+), 43 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/93/15893/1 diff --git a/backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd b/backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd index 06af2de..5ed7625 100644 --- a/backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd +++ b/backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd @@ -2076,6 +2076,19 @@ </xs:sequence> </xs:complexType> + <xs:complexType name="Configuration"> + <xs:choice> + <xs:element name="type" type="xs:string" minOccurs="1"/> + <xs:element name="data" type="xs:string" minOccurs="0"/> + </xs:choice> + </xs:complexType> + + <xs:complexType name="Initialization"> + <xs:choice> + <xs:element name="configuration" type="Configuration" minOccurs="1"/> + </xs:choice> + </xs:complexType> + <xs:complexType name="VmPlacementPolicy"> <xs:sequence> <xs:element name="host" type="Host" minOccurs="0" maxOccurs="1"/> @@ -2123,6 +2136,7 @@ <xs:element name="payloads" type="Payloads" minOccurs="0"/> <xs:element name="statistics" type="Statistics" minOccurs="0" maxOccurs="1"/> <xs:element name="disks" type="Disks" minOccurs="0" maxOccurs="1"/> + <xs:element name="initialization" type="Initialization" minOccurs="0"/> <xs:element name="nics" type="Nics" minOccurs="0" maxOccurs="1"/> <xs:element name="tags" type="Tags" minOccurs="0" maxOccurs="1"/> <xs:element name="snapshots" type="Snapshots" minOccurs="0" maxOccurs="1"/> diff --git a/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml b/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml index e0b1ef2..e9669f4 100644 --- a/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml +++ b/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml @@ -170,6 +170,7 @@ vm.origin: xs:string vm.os.kernel: xs:string vm.tunnel_migration: xs:boolean + vm.ovf: xs:string vm.payloads.payload--COLLECTION: {payload.type: 'xs:string', payload.file.name: 'xs:string', payload.file.content: 'xs:string'} vm.cpu.cpu_tune.vcpu_pin--COLLECTION: {vcpu_pin.vcpu: 'xs:int', vcpu_pin.cpu_set: 'xs:string'} urlparams: {} 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 39d9074..a68e81c 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 @@ -1,19 +1,10 @@ package org.ovirt.engine.api.restapi.resource; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.Response; - 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.Certificate; +import org.ovirt.engine.api.model.Configuration; import org.ovirt.engine.api.model.Disk; import org.ovirt.engine.api.model.Disks; import org.ovirt.engine.api.model.Display; @@ -33,6 +24,7 @@ import org.ovirt.engine.core.common.action.AddVmFromScratchParameters; import org.ovirt.engine.core.common.action.AddVmFromSnapshotParameters; import org.ovirt.engine.core.common.action.AddVmFromTemplateParameters; +import org.ovirt.engine.core.common.action.ImportVmFromConfigurationParameters; import org.ovirt.engine.core.common.action.RemoveVmParameters; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.action.VmManagementParametersBase; @@ -50,6 +42,15 @@ import org.ovirt.engine.core.common.queries.VdcQueryReturnValue; import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.core.compat.Guid; + +import javax.ws.rs.WebApplicationException; +import javax.ws.rs.core.Response; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; public class BackendVmsResource extends AbstractBackendCollectionResource<VM, org.ovirt.engine.core.common.businessentities.VM> @@ -78,42 +79,49 @@ @Override public Response add(VM vm) { - validateParameters(vm, "name", "cluster.id|name"); - validateEnums(VM.class, vm); + validateParameters(vm, "cluster.id|name"); Response response = null; - if (isCreateFromSnapshot(vm)) { - response = createVmFromSnapshot(vm); + if (vm.getInitialization() != null && vm.getInitialization().getConfiguration() != null) { + response = importVmFromConfiguration(vm); } else { - validateParameters(vm, "template.id|name"); - Guid templateId = getTemplateId(vm); - VmStatic staticVm = getMapper(VM.class, VmStatic.class).map(vm, - getMapper(VmTemplate.class, VmStatic.class).map(lookupTemplate(templateId), null)); - if (namedCluster(vm)) { - staticVm.setVdsGroupId(getClusterId(vm)); - } - - staticVm.setUsbPolicy(VmMapper.getUsbPolicyOnCreate(vm.getUsb(), lookupCluster(staticVm.getVdsGroupId()))); - - if (!isFiltered()) { - // if the user set the host-name within placement-policy, rather than the host-id (legal) - - // resolve the host's ID, because it will be needed down the line - if (vm.isSetPlacementPolicy() && vm.getPlacementPolicy().isSetHost() - && vm.getPlacementPolicy().getHost().isSetName() - && !vm.getPlacementPolicy().getHost().isSetId()) { - staticVm.setDedicatedVmForVds(asGuid(getHostId(vm.getPlacementPolicy().getHost().getName()))); + validateParameters(vm, "name"); + validateEnums(VM.class, vm); + if (isCreateFromSnapshot(vm)) { + response = createVmFromSnapshot(vm); + } else { + validateParameters(vm, "template.id|name"); + Guid templateId = getTemplateId(vm); + VmStatic staticVm = getMapper(VM.class, VmStatic.class).map(vm, + getMapper(VmTemplate.class, VmStatic.class).map(lookupTemplate(templateId), null)); + if (namedCluster(vm)) { + staticVm.setVdsGroupId(getClusterId(vm)); } - } else { - vm.setPlacementPolicy(null); - } - Guid storageDomainId = - (vm.isSetStorageDomain() && vm.getStorageDomain().isSetId()) ? asGuid(vm.getStorageDomain().getId()) - : Guid.Empty; - if (vm.isSetDisks() && vm.getDisks().isSetClone() && vm.getDisks().isClone()) { - response = cloneVmFromTemplate(staticVm, vm, templateId); - } else if (Guid.Empty.equals(templateId)) { - response = addVmFromScratch(staticVm, vm, storageDomainId); - } else { - response = addVm(staticVm, vm, storageDomainId, templateId); + + staticVm.setUsbPolicy(VmMapper.getUsbPolicyOnCreate(vm.getUsb(), + lookupCluster(staticVm.getVdsGroupId()))); + + if (!isFiltered()) { + // if the user set the host-name within placement-policy, rather than the host-id (legal) - + // resolve the host's ID, because it will be needed down the line + if (vm.isSetPlacementPolicy() && vm.getPlacementPolicy().isSetHost() + && vm.getPlacementPolicy().getHost().isSetName() + && !vm.getPlacementPolicy().getHost().isSetId()) { + staticVm.setDedicatedVmForVds(asGuid(getHostId(vm.getPlacementPolicy().getHost().getName()))); + } + } else { + vm.setPlacementPolicy(null); + } + Guid storageDomainId = + (vm.isSetStorageDomain() && vm.getStorageDomain().isSetId()) ? asGuid(vm.getStorageDomain() + .getId()) + : Guid.Empty; + if (vm.isSetDisks() && vm.getDisks().isSetClone() && vm.getDisks().isClone()) { + response = cloneVmFromTemplate(staticVm, vm, templateId); + } else if (Guid.Empty.equals(templateId)) { + response = addVmFromScratch(staticVm, vm, storageDomainId); + } else { + response = addVm(staticVm, vm, storageDomainId, templateId); + } } } return removeRestrictedInfoFromResponse(response); @@ -172,6 +180,15 @@ return payload; } + public Response importVmFromConfiguration(VM vm) { + Configuration config = vm.getInitialization().getConfiguration(); + ImportVmFromConfigurationParameters params = + new ImportVmFromConfigurationParameters(config.getType().trim(), config.getData().trim(), getClusterId(vm)); + return performCreate(VdcActionType.ImportVmFromConfiguration, + params, + new QueryIdResolver<Guid>(VdcQueryType.GetVmByVmId, IdQueryParameters.class)); + } + protected org.ovirt.engine.core.common.businessentities.VM getVmConfiguration(String snapshotId) { org.ovirt.engine.core.common.businessentities.VM vmConfiguration = getEntity(org.ovirt.engine.core.common.businessentities.VM.class, -- To view, visit http://gerrit.ovirt.org/15893 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: If1af88e93c65ab1a2a34e7a3e5c99db36956ab5b Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Liron Ar <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
