Daniel Erez has uploaded a new change for review.

Change subject: core: update VirtIO-SCSI device on next run VM snapshot
......................................................................

core: update VirtIO-SCSI device on next run VM snapshot

* Added an 'EditableDeviceOnVmStatusField' annotation for
  'virtioScsiEnabled' (in VmManagementParametersBase).
* Consequently, removed canDo validation in UpdateVmCommand.

Change-Id: Ic1ee50f25e71d4540ebb6ab60250b9cfa5985ac4
Signed-off-by: Daniel Erez <de...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmCommand.java
M 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/UpdateVmCommandTest.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VmManagementParametersBase.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/ExistingVmInstanceTypeManager.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/InstanceTypeManager.java
5 files changed, 30 insertions(+), 29 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/85/29385/1

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 eaf1ea5..34d40f0 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
@@ -548,14 +548,6 @@
             }
         }
 
-        if (getParameters().isVirtioScsiEnabled() != null
-                && !getVm().isDown()
-                && VmDeviceUtils.vmDeviceChanged(getVmId(), 
VmDeviceGeneralType.CONTROLLER,
-                        VmDeviceType.VIRTIOSCSI.getName(),
-                        getParameters().isVirtioScsiEnabled())) {
-            return 
failCanDoAction(VdcBllMessages.VM_CANNOT_UPDATE_DEVICE_VM_NOT_DOWN, "$device 
VirtIO-SCSI");
-        }
-
         if (vmFromParams.getMinAllocatedMem() > vmFromParams.getMemSizeMb()) {
             return 
failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_MIN_MEMORY_CANNOT_EXCEED_MEMORY_SIZE);
         }
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/UpdateVmCommandTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/UpdateVmCommandTest.java
index 13d8f73..aa46f80 100644
--- 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/UpdateVmCommandTest.java
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/UpdateVmCommandTest.java
@@ -35,14 +35,12 @@
 import org.ovirt.engine.core.common.businessentities.VDSGroup;
 import org.ovirt.engine.core.common.businessentities.VM;
 import org.ovirt.engine.core.common.businessentities.VMStatus;
-import org.ovirt.engine.core.common.businessentities.VmDevice;
 import org.ovirt.engine.core.common.businessentities.VmDeviceGeneralType;
 import org.ovirt.engine.core.common.businessentities.VmStatic;
 import org.ovirt.engine.core.common.config.ConfigValues;
 import org.ovirt.engine.core.common.errors.VdcBllMessages;
 import org.ovirt.engine.core.common.osinfo.OsRepository;
 import org.ovirt.engine.core.common.utils.SimpleDependecyInjector;
-import org.ovirt.engine.core.common.utils.VmDeviceType;
 import org.ovirt.engine.core.common.utils.customprop.ValidationError;
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.compat.Version;
@@ -278,25 +276,6 @@
 
         CanDoActionTestUtils.runAndAssertCanDoActionFailure(command,
                 VdcBllMessages.CANNOT_DISABLE_VIRTIO_SCSI_PLUGGED_DISKS);
-    }
-
-    @Test
-    public void testCannotDisableVirtioScsiForRunningVM() {
-        prepareVmToPassCanDoAction();
-        command.getParameters().setVirtioScsiEnabled(false);
-        vm.setStatus(VMStatus.Up);
-        mockDiskDaoGetAllForVm(Collections.<Disk> emptyList(), true);
-
-        doReturn(vmDeviceDAO).when(command).getVmDeviceDao();
-        doReturn(true).when(command).areUpdatedFieldsLegal();
-
-        
doReturn(Collections.emptyList()).when(vmDeviceDAO).getVmDeviceByVmIdAndType(
-                any(Guid.class), any(VmDeviceGeneralType.class));
-        doReturn(Collections.singletonList(new 
VmDevice())).when(vmDeviceDAO).getVmDeviceByVmIdTypeAndDevice(
-                vm.getId(), VmDeviceGeneralType.CONTROLLER, 
VmDeviceType.VIRTIOSCSI.getName());
-
-        CanDoActionTestUtils.runAndAssertCanDoActionFailure(command,
-                VdcBllMessages.VM_CANNOT_UPDATE_DEVICE_VM_NOT_DOWN);
     }
 
     @Test
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VmManagementParametersBase.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VmManagementParametersBase.java
index 6e25a71..a77afe9 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VmManagementParametersBase.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VmManagementParametersBase.java
@@ -5,11 +5,14 @@
 import javax.validation.Valid;
 
 import org.ovirt.engine.core.common.businessentities.DiskImage;
+import 
org.ovirt.engine.core.common.businessentities.EditableDeviceOnVmStatusField;
 import org.ovirt.engine.core.common.businessentities.VM;
+import org.ovirt.engine.core.common.businessentities.VmDeviceGeneralType;
 import org.ovirt.engine.core.common.businessentities.VmPayload;
 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.utils.VmDeviceType;
 import org.ovirt.engine.core.compat.Guid;
 
 public class VmManagementParametersBase extends VmOperationParameterBase {
@@ -61,6 +64,7 @@
      * - Add VM - defaulted to true for cluster >= 3.3
      * - Update VM - preserve current configuration
      */
+    @EditableDeviceOnVmStatusField(generalType = 
VmDeviceGeneralType.CONTROLLER, type = VmDeviceType.VIRTIOSCSI)
     private Boolean virtioScsiEnabled;
 
     public VmManagementParametersBase() {
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/ExistingVmInstanceTypeManager.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/ExistingVmInstanceTypeManager.java
index 1bdc74a..28f8a6d 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/ExistingVmInstanceTypeManager.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/ExistingVmInstanceTypeManager.java
@@ -37,6 +37,9 @@
     }
 
     @Override
+    protected boolean isNextRunConfigurationExists() { return 
vm.isNextRunConfigurationExists(); }
+
+    @Override
     protected ProfileBehavior getNetworkProfileBehavior() {
         return networkBehavior;
     }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/InstanceTypeManager.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/InstanceTypeManager.java
index 61458eb..150b27b 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/InstanceTypeManager.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/InstanceTypeManager.java
@@ -12,6 +12,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.VmDeviceType;
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.ui.frontend.AsyncQuery;
 import org.ovirt.engine.ui.frontend.Frontend;
@@ -30,6 +31,7 @@
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
+import java.util.Map;
 
 /**
  * Base class which takes care about copying the proper fields from instance 
type/template/vm static to the VM.
@@ -219,6 +221,20 @@
         }
     }
 
+    private VmDevice findVmDeviceByName(Map<Guid, VmDevice> 
vmManagedDeviceMap, String name) {
+        for (VmDevice vmDevice : vmManagedDeviceMap.values()) {
+            if (vmDevice.getDevice().equals(name)) {
+                return vmDevice;
+            }
+        }
+
+        return null;
+    }
+
+    private boolean isVmDeviceExists(Map<Guid, VmDevice> vmManagedDeviceMap, 
String name) {
+        return findVmDeviceByName(vmManagedDeviceMap, name) != null;
+    }
+
     protected void doUpdateManagedFieldsFrom(final VmBase vmBase) {
         if (vmBase == null) {
             model.stopProgress();
@@ -345,6 +361,11 @@
     }
 
     private void updateVirtioScsi(VmBase vmBase) {
+        if (isNextRunConfigurationExists()) {
+            
getModel().getIsVirtioScsiEnabled().setEntity(isVmDeviceExists(vmBase.getManagedDeviceMap(),
 VmDeviceType.VIRTIOSCSI.getName()));
+            return;
+        }
+
         virtioScsiUtil.updateVirtioScsiEnabled(vmBase.getId(), 
getModel().getOSType().getSelectedItem(), new 
VirtioScsiUtil.VirtioScasiEnablingFinished() {
             @Override
             public void beforeUpdates() {
@@ -429,4 +450,6 @@
      */
     protected abstract VmBase getSource();
 
+    protected boolean isNextRunConfigurationExists() { return false; }
+
 }


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

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

Reply via email to