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. Change-Id: I603c8affdb3754ce29ec2b9d617044d2d2da22d1 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, 53 insertions(+), 34 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/20/15420/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 ab2a6a8..d7f413f 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 @@ -2116,6 +2116,7 @@ <xs:element name="timezone" type="xs:string" minOccurs="0" maxOccurs="1"/> <xs:element ref="domain" minOccurs="0" maxOccurs="1"/> <xs:element name="custom_properties" type="CustomProperties" minOccurs="0"/> + <xs:element name="ovf" type="xs:string" minOccurs="0"/> <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"/> 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 a627346..6550ef3 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 @@ -168,6 +168,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 0a34e4a..b9c28e5 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 @@ -10,6 +10,7 @@ import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.Response; +import org.apache.commons.lang.StringUtils; import org.ovirt.engine.api.common.util.DetailHelper; import org.ovirt.engine.api.common.util.DetailHelper.Detail; import org.ovirt.engine.api.model.Action; @@ -33,6 +34,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; @@ -80,44 +82,51 @@ return inject(new BackendVmResource(id, this)); } - @Override + //@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 (StringUtils.isNotBlank(vm.getOvf())) { + 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); @@ -176,6 +185,14 @@ return payload; } + public Response importVmFromConfiguration(VM vm) { + ImportVmFromConfigurationParameters params = + new ImportVmFromConfigurationParameters(vm.getOvf().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/15420 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I603c8affdb3754ce29ec2b9d617044d2d2da22d1 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
