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

Reply via email to