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