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

Reply via email to