Tomas Jelinek has uploaded a new change for review.

Change subject: restapi: copy instance type fields to the VM
......................................................................

restapi: copy instance type fields to the VM

As a sonsequence of the https://bugzilla.redhat.com/1149663 the instance type
fields are not copyed to the VM on server anymore and the frontends
(WA/UP/REST) need to take care of it.

More specifically it works like this:

If only the instance type is selected, it has to copy it's properties to the
newly created VM (on VM level this can be overridden)

If both the template and the instance type is selected, the instance type
overrides the template.

When copying the parameters from instance type to the VM, only the ones which
are supported on the target cluster/OS are taken into account.

Change-Id: Id8ff7a39fe74c73d8984fb34169b69649dab7c15
Bug-Url: https://bugzilla.redhat.com/1149663
Signed-off-by: Tomas Jelinek <tjeli...@redhat.com>
---
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmsResource.java
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/util/VmHelper.java
M 
backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmsResourceTest.java
M 
backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmMapper.java
4 files changed, 208 insertions(+), 121 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/29/35129/1

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 620385c..63200e7 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
@@ -35,9 +35,11 @@
 import org.ovirt.engine.api.resource.VmResource;
 import org.ovirt.engine.api.resource.VmsResource;
 import org.ovirt.engine.api.restapi.types.DiskMapper;
+import org.ovirt.engine.api.restapi.types.Mapper;
 import org.ovirt.engine.api.restapi.types.RngDeviceMapper;
 import org.ovirt.engine.api.restapi.types.VmMapper;
 import org.ovirt.engine.api.restapi.util.VmHelper;
+import org.ovirt.engine.core.common.FeatureSupported;
 import org.ovirt.engine.core.common.action.AddVmFromSnapshotParameters;
 import org.ovirt.engine.core.common.action.AddVmParameters;
 import org.ovirt.engine.core.common.action.ImportVmParameters;
@@ -46,6 +48,7 @@
 import org.ovirt.engine.core.common.action.VmManagementParametersBase;
 import org.ovirt.engine.core.common.businessentities.DiskImage;
 import org.ovirt.engine.core.common.businessentities.Entities;
+import org.ovirt.engine.core.common.businessentities.InstanceType;
 import org.ovirt.engine.core.common.businessentities.VDSGroup;
 import org.ovirt.engine.core.common.businessentities.VdsStatic;
 import org.ovirt.engine.core.common.businessentities.VmDevice;
@@ -66,6 +69,7 @@
 import org.ovirt.engine.core.common.queries.VdcQueryParametersBase;
 import org.ovirt.engine.core.common.queries.VdcQueryReturnValue;
 import org.ovirt.engine.core.common.queries.VdcQueryType;
+import org.ovirt.engine.core.common.utils.SimpleDependecyInjector;
 import org.ovirt.engine.core.compat.Guid;
 
 public class BackendVmsResource extends
@@ -108,8 +112,20 @@
             } else {
                 validateParameters(vm, "template.id|name");
                 Guid templateId = getTemplateId(vm.getTemplate());
-                VmStatic staticVm = getMapper(VM.class, VmStatic.class).map(vm,
-                        getMapper(VmTemplate.class, 
VmStatic.class).map(lookupTemplate(templateId), null));
+
+                VmTemplate templateEntity = lookupTemplate(templateId);
+                VmStatic builtFromTemplate = getMapper(VmTemplate.class, 
VmStatic.class).map(templateEntity, null);
+
+                VmStatic builtFromInstanceType = null;
+                org.ovirt.engine.core.common.businessentities.InstanceType 
instanceTypeEntity = null;
+                if (vm.isSetInstanceType() && (vm.getInstanceType().isSetId() 
|| vm.getInstanceType().isSetName())) {
+                    
Mapper<org.ovirt.engine.core.common.businessentities.InstanceType, VmStatic> 
instanceTypeMapper = 
getMapper(org.ovirt.engine.core.common.businessentities.InstanceType.class, 
VmStatic.class);
+                    instanceTypeEntity = 
lookupInstanceType(getTemplateId(vm.getInstanceType()));
+                    builtFromInstanceType = 
instanceTypeMapper.map(instanceTypeEntity, builtFromTemplate);
+                    
builtFromInstanceType.setInstanceTypeId(getTemplateId(vm.getInstanceType()));
+                }
+
+                VmStatic staticVm = getMapper(VM.class, 
VmStatic.class).map(vm, builtFromInstanceType != null ? builtFromInstanceType : 
builtFromTemplate);
                 if (namedCluster(vm)) {
                     staticVm.setVdsGroupId(getClusterId(vm));
                 }
@@ -151,16 +167,12 @@
                                 .getId())
                                 : Guid.Empty;
 
-                if (vm.isSetInstanceType() && (vm.getInstanceType().isSetId() 
|| vm.getInstanceType().isSetName())) {
-                    
staticVm.setInstanceTypeId(getTemplateId(vm.getInstanceType()));
-                }
-
                 if (vm.isSetDisks() && vm.getDisks().isSetClone() && 
vm.getDisks().isClone()) {
-                    response = cloneVmFromTemplate(staticVm, vm, templateId);
+                    response = cloneVmFromTemplate(staticVm, vm, 
templateEntity, instanceTypeEntity, cluster);
                 } else if (Guid.Empty.equals(templateId)) {
-                    response = addVmFromScratch(staticVm, vm, storageDomainId);
+                    response = addVmFromScratch(staticVm, vm, storageDomainId, 
instanceTypeEntity, cluster);
                 } else {
-                    response = addVm(staticVm, vm, storageDomainId, 
templateId);
+                    response = addVm(staticVm, vm, storageDomainId, 
templateEntity, instanceTypeEntity, cluster);
                 }
             }
         }
@@ -192,9 +204,9 @@
             prepareImagesForCloneFromSnapshotParams(vm.getDisks(), 
diskImagesByImageId);
         }
         return cloneVmFromSnapshot(vmConfiguration,
-                        vm,
-                        snapshotId,
-                        diskImagesByImageId);
+                vm,
+                snapshotId,
+                diskImagesByImageId);
     }
 
     private Response removeRestrictedInfoFromResponse(Response response) {
@@ -317,35 +329,88 @@
                                 new 
QueryIdResolver<Guid>(VdcQueryType.GetVmByVmId, IdQueryParameters.class));
     }
 
-    private Response cloneVmFromTemplate(VmStatic staticVm, VM vm, Guid 
templateId) {
+    private Response cloneVmFromTemplate(VmStatic staticVm, VM vm, VmTemplate 
template, InstanceType instanceType, VDSGroup cluster) {
         AddVmParameters params = new AddVmParameters(staticVm);
-        params.setDiskInfoDestinationMap(getDisksToClone(vm.getDisks(), 
templateId));
+        params.setDiskInfoDestinationMap(getDisksToClone(vm.getDisks(), 
template.getId()));
         params.setVmPayload(getPayload(vm));
-        params.setVirtioScsiEnabled(vm.isSetVirtioScsi() && 
vm.getVirtioScsi().isSetEnabled() ?
-                vm.getVirtioScsi().isEnabled() : null);
-        if(vm.isSetSoundcardEnabled()) {
-            params.setSoundDeviceEnabled(vm.isSoundcardEnabled());
-        } else {
-            
params.setSoundDeviceEnabled(!VmHelper.getSoundDevicesForEntity(this, 
templateId).isEmpty());
-        }
 
-        params.setBalloonEnabled(vm.isSetMemoryPolicy() && 
vm.getMemoryPolicy().isSetBallooning() ?
-                vm.getMemoryPolicy().isBallooning() : null);
-
-        params.setConsoleEnabled(vm.isSetConsole() && 
vm.getConsole().isSetEnabled()
-                ? vm.getConsole().isEnabled()
-                : !getConsoleDevicesForEntity(templateId).isEmpty());
-
-        if (vm.isSetRngDevice()) {
-            params.setUpdateRngDevice(true);
-            params.setRngDevice(RngDeviceMapper.map(vm.getRngDevice(), null));
-        }
+        addDevicesToParams(params, vm, template, instanceType, 
staticVm.getOsId(), cluster);
 
         params.setMakeCreatorExplicitOwner(shouldMakeCreatorExplicitOwner());
         setupCloneTemplatePermissions(vm, params);
         return performCreate(VdcActionType.AddVmFromTemplate,
-                               params,
-                               new 
QueryIdResolver<Guid>(VdcQueryType.GetVmByVmId, IdQueryParameters.class));
+                params,
+                new QueryIdResolver<Guid>(VdcQueryType.GetVmByVmId, 
IdQueryParameters.class));
+    }
+
+    private void addDevicesToParams(AddVmParameters params, VM vm, VmTemplate 
template, InstanceType instanceType, int osId, VDSGroup cluster) {
+        Guid templateId = template != null ? template.getId() : null;
+        Guid instanceTypeId = instanceType != null ? instanceType.getId() : 
null;
+
+        if (vm.isSetVirtioScsi()) {
+            params.setVirtioScsiEnabled(vm.getVirtioScsi().isEnabled());
+        } else {
+            // it is not defined on the template
+            params.setVirtioScsiEnabled(instanceTypeId != null ? 
!VmHelper.getVirtioScsiControllersForEntity(this, instanceTypeId).isEmpty() : 
null);
+        }
+
+        if(vm.isSetSoundcardEnabled()) {
+            params.setSoundDeviceEnabled(vm.isSoundcardEnabled());
+        } else if (instanceTypeId != null || templateId != null) {
+            
params.setSoundDeviceEnabled(!VmHelper.getSoundDevicesForEntity(this, 
instanceTypeId != null ? instanceTypeId : templateId).isEmpty());
+        }
+
+        if (vm.isSetMemoryPolicy()) {
+            params.setBalloonEnabled(vm.getMemoryPolicy().isBallooning());
+        } else if 
(shouldCopyDevice(SimpleDependecyInjector.getInstance().get(OsRepository.class).isBalloonEnabled(osId,
 cluster.getcompatibility_version()), templateId, instanceTypeId)) {
+            // it is not defined on the template
+            params.setBalloonEnabled(instanceTypeId != null ? 
!VmHelper.isMemoryBalloonEnabledForEntity(this, instanceTypeId) : null);
+        }
+
+        if (vm.isSetConsole()) {
+            params.setConsoleEnabled(vm.getConsole().isEnabled());
+        } else if (instanceTypeId != null || templateId != null) {
+            params.setConsoleEnabled(instanceTypeId != null ? 
!getConsoleDevicesForEntity(instanceTypeId).isEmpty() : null);
+        }
+
+        if (vm.isSetRngDevice()) {
+            params.setUpdateRngDevice(true);
+            params.setRngDevice(RngDeviceMapper.map(vm.getRngDevice(), null));
+        } else if (instanceTypeId != null || templateId != null) {
+            List<VmRngDevice> devices = VmHelper.getRngDevicesForEntity(this, 
instanceTypeId != null ? instanceTypeId : templateId);
+            if (devices != null && !devices.isEmpty()) {
+                boolean supported = 
cluster.getRequiredRngSources().contains(devices.get(0).getSource()) && 
FeatureSupported.virtIoRngSupported(cluster.getcompatibility_version());
+                if (shouldCopyDevice(supported, templateId, instanceTypeId)) {
+                    params.setUpdateRngDevice(true);
+                    params.setRngDevice(!devices.isEmpty() ? 
devices.iterator().next() : null);
+                }
+            }
+        }
+    }
+
+    /**
+     * Returns true if the device should be copied from the template or 
instance type
+     * If the instance type is selected, than the device will be copied from 
the instance type only if the device is compatible with the cluster and os
+     * If the instance type is not set and the template is set, than it is 
copied from the template (e.g. the cluster compatibility is not checked since 
the template lives in a cluster)
+     */
+    private boolean shouldCopyDevice(boolean isCompatibleWithCluster, Guid 
templateId, Guid instanceTypeId) {
+        if (instanceTypeId == null && templateId == null) {
+            // nothing to copy from
+            return false;
+        }
+
+        if (instanceTypeId == null && templateId != null) {
+            // template is set and is not overridden by instance type, copy 
device config
+            return true;
+        }
+
+        if (instanceTypeId != null && isCompatibleWithCluster) {
+            // copy from instance type and the device is compatible with 
cluster, copy
+            return true;
+        }
+
+        // not compatible with the cluster, do not copy from instance type
+        return false;
     }
 
     private HashMap<Guid, DiskImage> getDisksToClone(Disks disks, Guid 
templateId) {
@@ -381,33 +446,14 @@
         return (DiskImage)getMapper(Disk.class, 
org.ovirt.engine.core.common.businessentities.Disk.class).map(entity, template);
     }
 
-    protected Response addVm(VmStatic staticVm, VM vm, Guid storageDomainId, 
Guid templateId) {
+    protected Response addVm(VmStatic staticVm, VM vm, Guid storageDomainId, 
VmTemplate template, InstanceType instanceType, VDSGroup cluster) {
         AddVmParameters params = new AddVmParameters(staticVm);
         params.setVmPayload(getPayload(vm));
-        if (vm.isSetMemoryPolicy() && vm.getMemoryPolicy().isSetBallooning()) {
-            params.setBalloonEnabled(vm.getMemoryPolicy().isBallooning());
-        }
         params.setStorageDomainId(storageDomainId);
-        params.setDiskInfoDestinationMap(getDisksToClone(vm.getDisks(), 
templateId));
+        params.setDiskInfoDestinationMap(getDisksToClone(vm.getDisks(), 
template.getId()));
         params.setMakeCreatorExplicitOwner(shouldMakeCreatorExplicitOwner());
         setupCloneTemplatePermissions(vm, params);
-
-        params.setConsoleEnabled(vm.isSetConsole() && 
vm.getConsole().isSetEnabled()
-                ? vm.getConsole().isEnabled()
-                : !getConsoleDevicesForEntity(templateId).isEmpty());
-
-        params.setVirtioScsiEnabled(vm.isSetVirtioScsi() && 
vm.getVirtioScsi().isSetEnabled() ?
-                vm.getVirtioScsi().isEnabled() : null);
-        if(vm.isSetSoundcardEnabled()) {
-            params.setSoundDeviceEnabled(vm.isSoundcardEnabled());
-        } else {
-            
params.setSoundDeviceEnabled(!VmHelper.getSoundDevicesForEntity(this, 
templateId).isEmpty());
-        }
-
-        if (vm.isSetRngDevice()) {
-            params.setUpdateRngDevice(true);
-            params.setRngDevice(RngDeviceMapper.map(vm.getRngDevice(), null));
-        }
+        addDevicesToParams(params, vm, template, instanceType, 
staticVm.getOsId(), cluster);
 
         return performCreate(VdcActionType.AddVm,
                                params,
@@ -420,29 +466,13 @@
         }
     }
 
-    protected Response addVmFromScratch(VmStatic staticVm, VM vm, Guid 
storageDomainId) {
+    protected Response addVmFromScratch(VmStatic staticVm, VM vm, Guid 
storageDomainId, InstanceType instanceType, VDSGroup cluster) {
         AddVmParameters params = new AddVmParameters(staticVm);
         params.setDiskInfoList(mapDisks(vm.getDisks()));
         params.setVmPayload(getPayload(vm));
-        if (vm.isSetMemoryPolicy() && vm.getMemoryPolicy().isSetBallooning()) {
-            params.setBalloonEnabled(vm.getMemoryPolicy().isBallooning());
-        }
         params.setMakeCreatorExplicitOwner(shouldMakeCreatorExplicitOwner());
         params.setStorageDomainId(storageDomainId);
-        params.setVirtioScsiEnabled(vm.isSetVirtioScsi() && 
vm.getVirtioScsi().isSetEnabled() ?
-                vm.getVirtioScsi().isEnabled() : null);
-        if(vm.isSetSoundcardEnabled()) {
-            params.setSoundDeviceEnabled(vm.isSoundcardEnabled());
-        }
-
-        if (vm.isSetConsole() && vm.getConsole().isSetEnabled()) {
-            params.setConsoleEnabled(vm.getConsole().isEnabled());
-        }
-
-        if (vm.isSetRngDevice()) {
-            params.setUpdateRngDevice(true);
-            params.setRngDevice(RngDeviceMapper.map(vm.getRngDevice(), null));
-        }
+        addDevicesToParams(params, vm, null, instanceType, staticVm.getOsId(), 
cluster);
 
         return performCreate(VdcActionType.AddVmFromScratch,
                                params,
@@ -592,6 +622,10 @@
         return getEntity(VmTemplate.class, VdcQueryType.GetVmTemplate, new 
GetVmTemplateParameters(id), "GetVmTemplate");
     }
 
+    public org.ovirt.engine.core.common.businessentities.InstanceType 
lookupInstanceType(Guid id) {
+        return 
getEntity(org.ovirt.engine.core.common.businessentities.InstanceType.class, 
VdcQueryType.GetVmTemplate, new GetVmTemplateParameters(id), "GetVmTemplate");
+    }
+
     private VDSGroup lookupCluster(Guid id) {
         return getEntity(VDSGroup.class, VdcQueryType.GetVdsGroupByVdsGroupId, 
new IdQueryParameters(id), "GetVdsGroupByVdsGroupId");
     }
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/util/VmHelper.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/util/VmHelper.java
index 5c9de21..c479117 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/util/VmHelper.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/util/VmHelper.java
@@ -1,6 +1,7 @@
 package org.ovirt.engine.api.restapi.util;
 
 import org.ovirt.engine.api.restapi.resource.BackendResource;
+import org.ovirt.engine.core.common.businessentities.VmRngDevice;
 import org.ovirt.engine.core.common.queries.IdQueryParameters;
 import org.ovirt.engine.core.common.queries.VdcQueryType;
 import org.ovirt.engine.core.compat.Guid;
@@ -21,4 +22,18 @@
                 new IdQueryParameters(id),
                 "GetSoundDevices", true);
     }
+
+    public static Boolean isMemoryBalloonEnabledForEntity(BackendResource 
resource, Guid id) {
+        return resource.getEntity(Boolean.class,
+                VdcQueryType.IsBalloonEnabled,
+                new IdQueryParameters(id),
+                "IsBalloonEnabled", true);
+    }
+
+    public static List<VmRngDevice> getRngDevicesForEntity(BackendResource 
resource, Guid id) {
+        return resource.getEntity(List.class,
+                VdcQueryType.GetRngDevice,
+                new IdQueryParameters(id),
+                "GetRngDevice", true);
+    }
 }
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmsResourceTest.java
 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmsResourceTest.java
index 4edd276..393c3f6 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmsResourceTest.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmsResourceTest.java
@@ -1,5 +1,7 @@
 package org.ovirt.engine.api.restapi.resource;
 
+import static org.easymock.EasyMock.anyInt;
+import static org.easymock.EasyMock.anyObject;
 import static org.easymock.EasyMock.expect;
 
 import java.util.ArrayList;
@@ -50,6 +52,7 @@
 import org.ovirt.engine.core.common.businessentities.VmStatistics;
 import org.ovirt.engine.core.common.businessentities.VmType;
 import org.ovirt.engine.core.common.interfaces.SearchType;
+import org.ovirt.engine.core.common.osinfo.OsRepository;
 import 
org.ovirt.engine.core.common.queries.GetVmFromConfigurationQueryParameters;
 import org.ovirt.engine.core.common.queries.GetVmOvfByVmIdParameters;
 import org.ovirt.engine.core.common.queries.GetVmTemplateParameters;
@@ -57,8 +60,10 @@
 import org.ovirt.engine.core.common.queries.IdsQueryParameters;
 import org.ovirt.engine.core.common.queries.NameQueryParameters;
 import org.ovirt.engine.core.common.queries.VdcQueryType;
+import org.ovirt.engine.core.common.utils.SimpleDependecyInjector;
 import org.ovirt.engine.core.common.utils.VmDeviceType;
 import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.compat.Version;
 
 public class BackendVmsResourceTest
         extends AbstractBackendCollectionResourceTest<VM, 
org.ovirt.engine.core.common.businessentities.VM, BackendVmsResource> {
@@ -66,6 +71,8 @@
     private static final String DEFAULT_TEMPLATE_ID = Guid.Empty.toString();
     private static final String PAYLOAD_COMTENT = "payload";
     public static final String CERTIFICATE = "O=Redhat,CN=X.Y.Z.Q";
+
+    private OsRepository osRepository;
 
     public BackendVmsResourceTest() {
         super(new BackendVmsResource(), SearchType.VM, "VMs : ");
@@ -75,6 +82,8 @@
     public void init() {
         super.init();
         OsTypeMockUtils.mockOsTypes();
+        osRepository = control.createMock(OsRepository.class);
+        SimpleDependecyInjector.getInstance().bind(OsRepository.class, 
osRepository);
     }
 
     @Test
@@ -114,6 +123,7 @@
     @Test
     public void testRemove() throws Exception {
         setUriInfo(setUpBasicUriExpectations());
+        mockUniqueOsNames();
         setUpGetEntityExpectations();
         setUpGetPayloadExpectations(1, 0);
         setUpGetBallooningExpectations(1);
@@ -125,6 +135,7 @@
     @Test
     public void testRemoveForced() throws Exception {
         setUriInfo(setUpBasicUriExpectations());
+        mockUniqueOsNames();
         setUpGetEntityExpectations();
         setUpGetPayloadExpectations(1, 0);
         setUpGetBallooningExpectations(1);
@@ -135,6 +146,7 @@
 
     @Test
     public void testRemoveDetachOnly() throws Exception {
+        mockUniqueOsNames();
         setUriInfo(setUpBasicUriExpectations());
         setUpGetEntityExpectations();
         setUpGetPayloadExpectations(1, 0);
@@ -149,9 +161,16 @@
         verifyRemove(collection.remove(GUIDS[0].toString(), action));
     }
 
+    private void mockUniqueOsNames() {
+        HashMap<Integer, String> uniqueOsNames = new HashMap<>();
+        expect(osRepository.getUniqueOsNames()).andReturn(uniqueOsNames);
+        uniqueOsNames.put(0, "Fedora20");
+    }
+
     @Test
     public void testRemoveForcedIncomplete() throws Exception {
         setUriInfo(setUpBasicUriExpectations());
+        mockUniqueOsNames();
         setUpGetEntityExpectations();
         setUpGetPayloadExpectations(1, 0);
         setUpGetBallooningExpectations(1);
@@ -198,6 +217,7 @@
 
     protected void doTestBadRemove(boolean canDo, boolean success, String 
detail) throws Exception {
         setUpGetEntityExpectations();
+        mockUniqueOsNames();
         setUpGetPayloadExpectations(1, 0);
         setUpGetBallooningExpectations(1);
         setUriInfo(setUpActionExpectations(VdcActionType.RemoveVm,
@@ -469,10 +489,14 @@
                                      new String[] { "Id" },
                                      new Object[] { GUIDS[0] },
                                      getTemplateEntity(0));
+
+
+        expect(osRepository.isBalloonEnabled(anyInt(), 
anyObject(Version.class))).andReturn(false).anyTimes();
+
         setUpEntityQueryExpectations(VdcQueryType.GetVdsGroupByVdsGroupId,
                 IdQueryParameters.class,
-                new String[] { "Id" },
-                new Object[] { GUIDS[1] },
+                new String[]{"Id"},
+                new Object[]{GUIDS[1]},
                 getVdsGroupEntity());
         setUriInfo(setUpActionExpectations(VdcActionType.AddVmFromScratch,
                                            AddVmParameters.class,
@@ -497,15 +521,15 @@
     @Test
     public void testCloneWithDisk() throws Exception {
         setUriInfo(setUpBasicUriExpectations());
-        setUpTemplateDisksExpectations(GUIDS[1]);
+        setUpTemplateDisksExpectations(GUIDS[0]);
         setUriInfo(setUpBasicUriExpectations());
         setUpGetPayloadExpectations(1, 2);
         setUpGetBallooningExpectations(1, 2);
-        setUpGetConsoleExpectations(new int[]{1, 2});
+        setUpGetConsoleExpectations(new int[]{2});
         setUpGetVmOvfExpectations(new int[]{2});
         setUpGetVirtioScsiExpectations(new int[]{2});
-        setUpGetSoundcardExpectations(new int[]{2, 1});
-        setUpGetRngDeviceExpectations(new int[]{2});
+        setUpGetSoundcardExpectations(new int[]{0, 2});
+        setUpGetRngDeviceExpectations(new int[]{0, 2});
         setUpGetCertuficateExpectations(1, 2);
         setUpEntityQueryExpectations(VdcQueryType.GetVmTemplate,
                                      GetVmTemplateParameters.class,
@@ -584,11 +608,11 @@
         setUriInfo(setUpBasicUriExpectations());
         setUpGetPayloadExpectations(1, 2);
         setUpGetBallooningExpectations(1, 2);
-        setUpGetConsoleExpectations(1, 2);
+        setUpGetConsoleExpectations(2);
         setUpGetVmOvfExpectations(2);
         setUpGetVirtioScsiExpectations(2);
-        setUpGetSoundcardExpectations(2, 1);
-        setUpGetRngDeviceExpectations(2);
+        setUpGetSoundcardExpectations(0, 2);
+        setUpGetRngDeviceExpectations(0, 2);
         setUpGetCertuficateExpectations(1, 2);
         setUpEntityQueryExpectations(VdcQueryType.GetVmTemplate,
                                      GetVmTemplateParameters.class,
@@ -625,11 +649,11 @@
         setUpGetPayloadExpectations(1, 2);
         setUpGetBallooningExpectations(1, 2);
         setUpGetCertuficateExpectations(1, 2);
-        setUpGetConsoleExpectations(new int[]{1, 2});
+        setUpGetConsoleExpectations(new int[]{2});
         setUpGetVmOvfExpectations(new int[]{2});
         setUpGetVirtioScsiExpectations(new int[]{2});
-        setUpGetSoundcardExpectations(new int[]{2, 1});
-        setUpGetRngDeviceExpectations(new int[]{2});
+        setUpGetSoundcardExpectations(new int[]{0, 2});
+        setUpGetRngDeviceExpectations(new int[]{2, 0});
         setUpEntityQueryExpectations(VdcQueryType.GetVmTemplate,
                                      GetVmTemplateParameters.class,
                                      new String[] { "Id" },
@@ -674,10 +698,10 @@
         setUpGetPayloadExpectations(1, 2);
         setUpGetBallooningExpectations(1, 2);
         setUpGetCertuficateExpectations(1, 2);
-        setUpGetConsoleExpectations(new int[] { 1, 2 });
+        setUpGetConsoleExpectations(new int[] { 2 });
         setUpGetVirtioScsiExpectations(new int[] { 2 });
-        setUpGetSoundcardExpectations(new int[] { 2, 1 });
-        setUpGetRngDeviceExpectations(new int[]{2});
+        setUpGetSoundcardExpectations(new int[] {0, 2});
+        setUpGetRngDeviceExpectations(new int[]{0, 2});
         setUpGetVmOvfExpectations(new int[] { 2 });
         setUpEntityQueryExpectations(VdcQueryType.GetVmTemplate,
                 GetVmTemplateParameters.class,
@@ -897,11 +921,11 @@
         setUriInfo(setUpBasicUriExpectations());
         setUpGetPayloadExpectations(1, 2);
         setUpGetBallooningExpectations(1, 2);
-        setUpGetConsoleExpectations(new int[]{1, 2});
+        setUpGetConsoleExpectations(new int[]{2});
         setUpGetVmOvfExpectations(new int[]{2});
         setUpGetVirtioScsiExpectations(new int[]{2});
-        setUpGetSoundcardExpectations(new int[]{2, 1});
-        setUpGetRngDeviceExpectations(new int[]{2});
+        setUpGetSoundcardExpectations(new int[]{0, 2});
+        setUpGetRngDeviceExpectations(new int[]{0, 2});
         setUpGetCertuficateExpectations(1, 2);
         setUpEntityQueryExpectations(VdcQueryType.GetVdsStaticByName,
                 NameQueryParameters.class,
@@ -953,11 +977,11 @@
         setUriInfo(setUpBasicUriExpectations());
         setUpGetPayloadExpectations(1, 2);
         setUpGetBallooningExpectations(1, 2);
-        setUpGetConsoleExpectations(new int[]{1, 2});
+        setUpGetConsoleExpectations(new int[]{2});
         setUpGetVmOvfExpectations(new int[]{2});
         setUpGetVirtioScsiExpectations(new int[]{2});
-        setUpGetSoundcardExpectations(new int[]{2, 1});
-        setUpGetRngDeviceExpectations(new int[]{2});
+        setUpGetSoundcardExpectations(new int[]{0, 2});
+        setUpGetRngDeviceExpectations(new int[]{0, 2});
         setUpGetCertuficateExpectations(1, 2);
         setUpEntityQueryExpectations(VdcQueryType.GetVmTemplate,
                                      GetVmTemplateParameters.class,
@@ -996,11 +1020,11 @@
         setUriInfo(setUpBasicUriExpectations());
         setUpGetPayloadExpectations(1, 2);
         setUpGetBallooningExpectations(1, 2);
-        setUpGetConsoleExpectations(new int[]{1, 2});
+        setUpGetConsoleExpectations(new int[]{2});
         setUpGetVmOvfExpectations(new int[]{2});
         setUpGetVirtioScsiExpectations(new int[]{2});
-        setUpGetSoundcardExpectations(new int[]{2, 1});
-        setUpGetRngDeviceExpectations(new int[]{2});
+        setUpGetSoundcardExpectations(new int[]{0, 2});
+        setUpGetRngDeviceExpectations(new int[]{0, 2});
         setUpGetCertuficateExpectations(1, 2);
         setUpEntityQueryExpectations(VdcQueryType.GetVmTemplate,
                                      GetVmTemplateParameters.class,
@@ -1062,11 +1086,11 @@
         setUpGetPayloadExpectations(1, 2);
         setUpGetBallooningExpectations(1, 2);
         setUpGetCertuficateExpectations(1, 2);
-        setUpGetConsoleExpectations(new int[]{1, 2});
+        setUpGetConsoleExpectations(new int[]{2});
         setUpGetVmOvfExpectations(new int[]{2});
         setUpGetVirtioScsiExpectations(new int[]{2});
-        setUpGetSoundcardExpectations(new int[]{2, 1});
-        setUpGetRngDeviceExpectations(new int[]{2});
+        setUpGetSoundcardExpectations(new int[]{0, 2});
+        setUpGetRngDeviceExpectations(new int[]{0, 2});
         setUpEntityQueryExpectations(VdcQueryType.GetVmTemplate,
                                      GetVmTemplateParameters.class,
                                      new String[] { "Id" },
@@ -1110,17 +1134,17 @@
 
     private void doTestCloneFromTemplateWithClonePermissions(VM model, boolean 
copy) throws Exception {
         setUriInfo(setUpBasicUriExpectations());
-        setUpTemplateDisksExpectations(GUIDS[1]);
+        setUpTemplateDisksExpectations(GUIDS[0]);
         setUriInfo(setUpBasicUriExpectations());
         setUpGetPayloadExpectations(1, 2);
         setUpGetBallooningExpectations(1, 2);
         setUpGetCertuficateExpectations(1, 2);
 
-        setUpGetConsoleExpectations(new int[]{1, 2});
+        setUpGetConsoleExpectations(new int[]{2});
         setUpGetVmOvfExpectations(new int[]{2});
         setUpGetVirtioScsiExpectations(new int[]{2});
-        setUpGetSoundcardExpectations(new int[]{2, 1});
-        setUpGetRngDeviceExpectations(new int[]{2});
+        setUpGetSoundcardExpectations(new int[]{0, 2});
+        setUpGetRngDeviceExpectations(new int[]{0, 2});
         setUpEntityQueryExpectations(VdcQueryType.GetVmTemplate,
                                      GetVmTemplateParameters.class,
                                      new String[]{"Id"},
@@ -1265,8 +1289,9 @@
                                      new String[] { "Id" },
                                      new Object[] { GUIDS[1] },
                                      getTemplateEntity(0));
-        setUpGetConsoleExpectations(new int[]{1});
-        setUpGetSoundcardExpectations(new int[]{1});
+        setUpGetSoundcardExpectations(new int[]{0});
+        setUpGetRngDeviceExpectations(new int[]{0});
+
         setUpEntityQueryExpectations(VdcQueryType.GetVdsGroupByVdsGroupId,
                 IdQueryParameters.class,
                 new String[] { "Id" },
diff --git 
a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmMapper.java
 
b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmMapper.java
index 4a6a4f7..3bc3d59 100644
--- 
a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmMapper.java
+++ 
b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmMapper.java
@@ -62,6 +62,7 @@
 import org.ovirt.engine.core.common.businessentities.OriginType;
 import org.ovirt.engine.core.common.businessentities.UsbPolicy;
 import org.ovirt.engine.core.common.businessentities.VMStatus;
+import org.ovirt.engine.core.common.businessentities.VmBase;
 import org.ovirt.engine.core.common.businessentities.VmInit;
 import org.ovirt.engine.core.common.businessentities.VmInitNetwork;
 import org.ovirt.engine.core.common.businessentities.VmPayload;
@@ -85,38 +86,25 @@
     @Mapping(from = VmTemplate.class, to = VmStatic.class)
     public static VmStatic map(VmTemplate entity, VmStatic template) {
         VmStatic staticVm = template != null ? template : new VmStatic();
+
         staticVm.setId(Guid.Empty);
         staticVm.setVmtGuid(entity.getId());
         staticVm.setVdsGroupId(entity.getVdsGroupId());
-        staticVm.setMemSizeMb(entity.getMemSizeMb());
         staticVm.setOsId(entity.getOsId());
         staticVm.setNiceLevel(entity.getNiceLevel());
         staticVm.setCpuShares(entity.getCpuShares());
         staticVm.setFailBack(entity.isFailBack());
-        staticVm.setAutoStartup(entity.isAutoStartup());
         staticVm.setStateless(entity.isStateless());
         staticVm.setDeleteProtected(entity.isDeleteProtected());
         staticVm.setSsoMethod(entity.getSsoMethod());
-        staticVm.setSmartcardEnabled(entity.isSmartcardEnabled());
-        staticVm.setAutoStartup(entity.isAutoStartup());
-        staticVm.setDefaultBootSequence(entity.getDefaultBootSequence());
         staticVm.setVmType(entity.getVmType());
-        staticVm.setDefaultDisplayType(entity.getDefaultDisplayType());
         staticVm.setIsoPath(entity.getIsoPath());
-        staticVm.setNumOfSockets(entity.getNumOfSockets());
-        staticVm.setCpuPerSocket(entity.getCpuPerSocket());
         staticVm.setKernelUrl(entity.getKernelUrl());
         staticVm.setKernelParams(entity.getKernelParams());
         staticVm.setInitrdUrl(entity.getInitrdUrl());
         staticVm.setTimeZone(entity.getTimeZone());
-        staticVm.setNumOfMonitors(entity.getNumOfMonitors());
-        staticVm.setSingleQxlPci(entity.getSingleQxlPci());
         staticVm.setAllowConsoleReconnect(entity.isAllowConsoleReconnect());
-        staticVm.setPriority(entity.getPriority());
-        staticVm.setUsbPolicy(entity.getUsbPolicy());
-        staticVm.setTunnelMigration(entity.getTunnelMigration());
         staticVm.setVncKeyboardLayout(entity.getVncKeyboardLayout());
-        staticVm.setMigrationDowntime(entity.getMigrationDowntime());
         staticVm.setVmInit(entity.getVmInit());
         staticVm.setSerialNumberPolicy(entity.getSerialNumberPolicy());
         staticVm.setCustomSerialNumber(entity.getCustomSerialNumber());
@@ -124,6 +112,31 @@
         staticVm.setSpiceCopyPasteEnabled(entity.isSpiceCopyPasteEnabled());
         staticVm.setRunAndPause(entity.isRunAndPause());
         staticVm.setCpuProfileId(entity.getCpuProfileId());
+        return doMapVmBaseHwPartToVmStatic(entity, staticVm);
+    }
+
+    @Mapping(from = 
org.ovirt.engine.core.common.businessentities.InstanceType.class, to = 
VmStatic.class)
+    public static VmStatic 
map(org.ovirt.engine.core.common.businessentities.InstanceType entity, VmStatic 
vmStatic) {
+        System.out.print("hello world");
+        return doMapVmBaseHwPartToVmStatic((VmBase) entity, vmStatic != null ? 
vmStatic : new VmStatic());
+    }
+
+    private static VmStatic doMapVmBaseHwPartToVmStatic(VmBase entity, 
VmStatic staticVm) {
+        staticVm.setMemSizeMb(entity.getMemSizeMb());
+        staticVm.setAutoStartup(entity.isAutoStartup());
+        staticVm.setSmartcardEnabled(entity.isSmartcardEnabled());
+        staticVm.setDefaultBootSequence(entity.getDefaultBootSequence());
+        staticVm.setDefaultDisplayType(entity.getDefaultDisplayType());
+        staticVm.setNumOfSockets(entity.getNumOfSockets());
+        staticVm.setCpuPerSocket(entity.getCpuPerSocket());
+        staticVm.setNumOfMonitors(entity.getNumOfMonitors());
+        staticVm.setSingleQxlPci(entity.getSingleQxlPci());
+        staticVm.setPriority(entity.getPriority());
+        staticVm.setUsbPolicy(entity.getUsbPolicy());
+        staticVm.setTunnelMigration(entity.getTunnelMigration());
+        staticVm.setMigrationSupport(entity.getMigrationSupport());
+        staticVm.setMigrationDowntime(entity.getMigrationDowntime());
+        staticVm.setMinAllocatedMem(entity.getMinAllocatedMem());
         return staticVm;
     }
 


-- 
To view, visit http://gerrit.ovirt.org/35129
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Id8ff7a39fe74c73d8984fb34169b69649dab7c15
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Tomas Jelinek <tjeli...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to