Omer Frenkel has uploaded a new change for review.

Change subject: core: use instance type values on update vm
......................................................................

core: use instance type values on update vm

When updating vm which is using instance-type,
the instance-type values cannot be override by the user.

this patch use the same code we have for add-vm that use instance-type,
to override the correct values.

Change-Id: Ib3ed838af7052f744dccd015f90032fdfc18cc55
Signed-off-by: Omer Frenkel <ofren...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmManagementCommandBase.java
3 files changed, 74 insertions(+), 33 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/99/31299/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java
index 7c87de4..81d7dd6 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java
@@ -43,7 +43,6 @@
 import org.ovirt.engine.core.common.businessentities.DiskInterface;
 import org.ovirt.engine.core.common.businessentities.DisplayType;
 import org.ovirt.engine.core.common.businessentities.ImageType;
-import org.ovirt.engine.core.common.businessentities.InstanceType;
 import org.ovirt.engine.core.common.businessentities.MigrationSupport;
 import org.ovirt.engine.core.common.businessentities.OriginType;
 import org.ovirt.engine.core.common.businessentities.Permissions;
@@ -100,8 +99,6 @@
     protected Map<Guid, StorageDomain> destStorages = new HashMap<Guid, 
StorageDomain>();
     protected Map<Guid, List<DiskImage>> storageToDisksMap;
     private String cachedDiskSharedLockMessage;
-    protected Guid instanceTypeId;
-    protected InstanceType instanceType;
     protected Guid imageTypeId;
     protected ImageType imageType;
     private Guid vmInterfacesSourceId;
@@ -157,9 +154,8 @@
                 parameters.setConsoleEnabled(false);
             }
 
-            instanceTypeId = parameters.getVmStaticData().getInstanceTypeId();
-            vmDevicesSourceId = (instanceTypeId != null) ?
-                    instanceTypeId : parameters.getVmStaticData().getVmtGuid();
+            vmDevicesSourceId = (getInstanceTypeId() != null) ?
+                    getInstanceTypeId() : 
parameters.getVmStaticData().getVmtGuid();
             imageTypeId = parameters.getVmStaticData().getImageTypeId();
             vmInterfacesSourceId = parameters.getVmStaticData().getVmtGuid();
             vmDisksSource = getVmTemplate();
@@ -211,12 +207,7 @@
         }
         return cachedDiskSharedLockMessage;
     }
-    protected InstanceType getInstanceType() {
-        if (instanceType == null && instanceTypeId != null) {
-            instanceType = getVmTemplateDAO().getInstanceType(instanceTypeId);
-        }
-        return instanceType;
-    }
+
 
     protected ImageType getImageType() {
         if (imageType == null && imageTypeId != null) {
@@ -551,7 +542,7 @@
             return 
failCanDoAction(VdcBllMessages.VM_HOSTCPU_MUST_BE_PINNED_TO_HOST);
         }
 
-        if (instanceTypeId != null && getInstanceType() == null) {
+        if (getInstanceTypeId() != null && getInstanceType() == null) {
             // invalid instance type
             return 
failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_INSTANCE_TYPE_DOES_NOT_EXIST);
         }
@@ -833,7 +824,7 @@
                 isBalloonEnabled(),
                 false);
 
-        if (instanceTypeId != null) {
+        if (getInstanceTypeId() != null) {
             copyDiskDevicesFromTemplate();
         }
     }
@@ -1059,7 +1050,7 @@
     @Override
     protected boolean checkPermissions(final List<PermissionSubject> 
permSubjects) {
 
-        if (instanceTypeId != null && 
!checkInstanceTypeImagePermissions(instanceTypeId)) {
+        if (getInstanceTypeId() != null && 
!checkInstanceTypeImagePermissions(getInstanceTypeId())) {
             return false;
         }
 
@@ -1069,7 +1060,7 @@
 
         for (PermissionSubject permSubject : permSubjects) {
             // if user is using instance type, then create_instance on the 
cluster is enough
-            if (permSubject.getObjectType() == VdcObjectType.VdsGroups && 
instanceTypeId != null) {
+            if (permSubject.getObjectType() == VdcObjectType.VdsGroups && 
getInstanceTypeId() != null) {
                 permSubject.setActionGroup(ActionGroup.CREATE_INSTANCE);
                 if (checkSinglePermission(permSubject, 
getReturnValue().getCanDoActionMessages())) {
                     continue;
@@ -1275,26 +1266,14 @@
      * in case instance type is selected for this vm
      */
     private void updateVmObject() {
-        InstanceType instanceType = getInstanceType();
-        VmStatic vmStatic = getParameters().getVmStaticData();
-        if (instanceType != null) {
-            vmStatic.setMemSizeMb(instanceType.getMemSizeMb());
-            vmStatic.setNumOfSockets(instanceType.getNumOfSockets());
-            vmStatic.setCpuPerSocket(instanceType.getCpuPerSocket());
-            
vmStatic.setDefaultBootSequence(instanceType.getDefaultBootSequence());
-            
vmStatic.setDefaultDisplayType(instanceType.getDefaultDisplayType());
-            vmStatic.setPriority(instanceType.getPriority());
-            vmStatic.setMinAllocatedMem(instanceType.getMinAllocatedMem());
-            vmStatic.setTunnelMigration(instanceType.getTunnelMigration());
+        updateParametersVmFromInstanceType();
 
-            // use sound card only if instance type has it
-            getParameters().setSoundDeviceEnabled(!getVmDeviceDao()
-                    .getVmDeviceByVmIdAndType(instanceType.getId(), 
VmDeviceGeneralType.SOUND).isEmpty());
-
-            // set vm interface source id to be the instance type, vm 
interface are taken from it
-            vmInterfacesSourceId = instanceType.getId();
+        // set vm interface source id to be the instance type, vm interface 
are taken from it
+        if (getInstanceType() != null) {
+            vmInterfacesSourceId = getInstanceTypeId();
         }
 
+        VmStatic vmStatic = getParameters().getVmStaticData();
         ImageType imageType = getImageType();
         if (imageType != null) {
             vmStatic.setOsId(imageType.getOsId());
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmCommand.java
index b244906..091857e 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmCommand.java
@@ -93,6 +93,8 @@
             
getVmPropertiesUtils().separateCustomPropertiesToUserAndPredefined(clusterVersion,
 getVm().getStaticData());
         }
         VmHandler.updateDefaultTimeZone(parameters.getVmStaticData());
+
+        updateParametersVmFromInstanceType();
     }
 
 
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmManagementCommandBase.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmManagementCommandBase.java
index ba578c9..ec2f50d 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmManagementCommandBase.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmManagementCommandBase.java
@@ -10,11 +10,17 @@
 
 import org.apache.commons.lang.StringUtils;
 import org.ovirt.engine.core.bll.context.CommandContext;
+import org.ovirt.engine.core.bll.utils.VmDeviceUtils;
 import org.ovirt.engine.core.common.action.VmManagementParametersBase;
+import org.ovirt.engine.core.common.businessentities.InstanceType;
 import org.ovirt.engine.core.common.businessentities.MigrationSupport;
 import org.ovirt.engine.core.common.businessentities.VDS;
 import org.ovirt.engine.core.common.businessentities.VM;
+import org.ovirt.engine.core.common.businessentities.VmDevice;
+import org.ovirt.engine.core.common.businessentities.VmDeviceGeneralType;
+import org.ovirt.engine.core.common.businessentities.VmRngDevice;
 import org.ovirt.engine.core.common.businessentities.VmStatic;
+import org.ovirt.engine.core.common.businessentities.VmWatchdog;
 import org.ovirt.engine.core.common.config.Config;
 import org.ovirt.engine.core.common.config.ConfigValues;
 import org.ovirt.engine.core.common.errors.VdcBllMessages;
@@ -29,6 +35,9 @@
      */
     public static final int MAXIMUM_CPU_SHARES = 262144;
 
+    private Guid instanceTypeId;
+    private InstanceType instanceType;
+
     public VmManagementCommandBase(T parameters) {
         super(parameters, null);
     }
@@ -42,7 +51,23 @@
         if (parameters.getVmStaticData() != null) {
             setVmId(parameters.getVmStaticData().getId());
             setVdsGroupId(parameters.getVmStaticData().getVdsGroupId());
+            
setInstanceTypeId(parameters.getVmStaticData().getInstanceTypeId());
         }
+    }
+
+    protected Guid getInstanceTypeId() {
+        return instanceTypeId;
+    }
+
+    protected void setInstanceTypeId(Guid id) {
+        instanceTypeId = id;
+    }
+
+    protected InstanceType getInstanceType() {
+        if (instanceType == null && getInstanceTypeId() != null) {
+            instanceType = 
getVmTemplateDAO().getInstanceType(getInstanceTypeId());
+        }
+        return instanceType;
     }
 
     /**
@@ -218,4 +243,39 @@
     protected boolean isCpuSharesValid(VM vmData) {
         return (vmData.getCpuShares() >= 0 && vmData.getCpuShares() <= 
MAXIMUM_CPU_SHARES);
     }
+
+    protected void updateParametersVmFromInstanceType() {
+        InstanceType instanceType = getInstanceType();
+        VmStatic vmStatic = getParameters().getVmStaticData();
+        if (instanceType != null && vmStatic != null) {
+            vmStatic.setMemSizeMb(instanceType.getMemSizeMb());
+            vmStatic.setNumOfSockets(instanceType.getNumOfSockets());
+            vmStatic.setCpuPerSocket(instanceType.getCpuPerSocket());
+            
vmStatic.setDefaultBootSequence(instanceType.getDefaultBootSequence());
+            
vmStatic.setDefaultDisplayType(instanceType.getDefaultDisplayType());
+            vmStatic.setPriority(instanceType.getPriority());
+            vmStatic.setMinAllocatedMem(instanceType.getMinAllocatedMem());
+            vmStatic.setTunnelMigration(instanceType.getTunnelMigration());
+
+            // use sound card only if instance type has it
+            
getParameters().setSoundDeviceEnabled(!VmDeviceUtils.getSoundDevices(instanceType.getId()).isEmpty());
+
+            
getParameters().setVirtioScsiEnabled(!VmDeviceUtils.getVirtioScsiControllers(instanceType.getId()).isEmpty());
+
+            getParameters().setUpdateWatchdog(true);
+            List<VmDevice> vmDevices = 
VmDeviceUtils.getWatchdogs(instanceType.getId());
+            if (!vmDevices.isEmpty()) {
+                vmDevices.get(0).setVmId(getVmId());
+                getParameters().setWatchdog(new VmWatchdog(vmDevices.get(0)));
+            }
+
+            getParameters().setUpdateRngDevice(true);
+            vmDevices = 
getVmDeviceDao().getVmDeviceByVmIdAndType(instanceType.getId(), 
VmDeviceGeneralType.RNG);
+            if (!vmDevices.isEmpty()) {
+                vmDevices.get(0).setVmId(getVmId());
+                getParameters().setRngDevice(new 
VmRngDevice(vmDevices.get(0)));
+            }
+
+        }
+    }
 }


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

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

Reply via email to