Vered Volansky has uploaded a new change for review.

Change subject: core: disable illegal operations on a pooled VM
......................................................................

core: disable illegal operations on a pooled VM

When a disk is defined as ReadOnly or Wipe After Delete in a VmTemplate,
after which a VmPool was created, these values shouldn't be allowed to be
changed as long as the vm is still attached to the pool.
This patch enforces this in the backend.

Change-Id: Ie3a6e1542f3ef4fb78f074b62e854a4907dfbca6
Bug-Url: https://bugzilla.redhat.com/1057721
Signed-off-by: Vered Volansky <vvola...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmDiskCommand.java
M 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/UpdateVmDiskCommandTest.java
2 files changed, 53 insertions(+), 1 deletion(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/57/35457/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmDiskCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmDiskCommand.java
index d5ad91e..5701138 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmDiskCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmDiskCommand.java
@@ -167,6 +167,7 @@
 
         DiskValidator diskValidator = getDiskValidator(getNewDisk());
         return validateCanUpdateShareable() && 
validateCanUpdateReadOnly(diskValidator) &&
+                validateVmNotAttachedToPool() &&
                 validate(diskValidator.isVirtIoScsiValid(getVm())) &&
                 (getOldDisk().getDiskInterface() == 
getNewDisk().getDiskInterface()
                 || validate(diskValidator.isDiskInterfaceSupported(getVm()))) 
&&
@@ -272,8 +273,17 @@
             if(getVm().getStatus() != VMStatus.Down && 
vmDeviceForVm.getIsPlugged()) {
                 return 
failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_VM_IS_NOT_DOWN);
             }
+            if (!validateVmNotAttachedToPool()) {
+                return false;
+            }
             return 
validate(diskValidator.isReadOnlyPropertyCompatibleWithInterface());
         }
+        return true;
+    }
+
+    protected boolean validateVmNotAttachedToPool() {
+        if ((updateReadOnlyRequested() || updateWipeAfterDeleteRequested()) && 
getVm().getVmPoolId() != null)
+            return 
failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_VM_ATTACHED_TO_POOL);
         return true;
     }
 
@@ -594,7 +604,11 @@
 
     protected boolean updateReadOnlyRequested() {
         Boolean readOnlyNewValue = getNewDisk().getReadOnly();
-        return readOnlyNewValue != null && 
!vmDeviceForVm.getIsReadOnly().equals(readOnlyNewValue);
+        return readOnlyNewValue != null && 
!getVmDeviceForVm().getIsReadOnly().equals(readOnlyNewValue);
+    }
+
+    protected boolean updateWipeAfterDeleteRequested() {
+        return getNewDisk().isWipeAfterDelete() != 
getOldDisk().isWipeAfterDelete();
     }
 
     protected boolean isAtLeastOneVmIsNotDown(List<VM> vmsDiskPluggedTo) {
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/UpdateVmDiskCommandTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/UpdateVmDiskCommandTest.java
index e856c34..2c7c4bf 100644
--- 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/UpdateVmDiskCommandTest.java
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/UpdateVmDiskCommandTest.java
@@ -208,6 +208,44 @@
     }
 
     @Test
+    public void canDoActionFailedROVmAttachedToPool() {
+        when(diskDao.get(diskImageGuid)).thenReturn(createDiskImage());
+        UpdateVmDiskParameters parameters = createParameters();
+        parameters.getDiskInfo().setReadOnly(true);
+        VM vm = createVm(VMStatus.Down);
+        vm.setVmPoolId(Guid.newGuid());
+        initializeCommand(parameters, Collections.singletonList(vm));
+
+        VmDevice vmDevice = createVmDevice(diskImageGuid, vmId); // Default RO 
is false
+        when(command.getVmDeviceForVm()).thenReturn(vmDevice);
+
+        CanDoActionTestUtils.runAndAssertCanDoActionFailure(command, 
VdcBllMessages.ACTION_TYPE_FAILED_VM_ATTACHED_TO_POOL);
+
+        vmDevice.setIsReadOnly(true);
+        parameters.getDiskInfo().setReadOnly(false);
+        CanDoActionTestUtils.runAndAssertCanDoActionFailure(command, 
VdcBllMessages.ACTION_TYPE_FAILED_VM_ATTACHED_TO_POOL);
+    }
+
+    @Test
+    public void canDoActionFailedWipeVmAttachedToPool() {
+        Disk oldDisk = createDiskImage();
+        oldDisk.setWipeAfterDelete(true);
+        when(diskDao.get(diskImageGuid)).thenReturn(oldDisk);
+
+        UpdateVmDiskParameters parameters = createParameters();
+        parameters.getDiskInfo().setWipeAfterDelete(false);
+        VM vm = createVm(VMStatus.Down);
+        vm.setVmPoolId(Guid.newGuid());
+        initializeCommand(parameters, Collections.singletonList(vm));
+
+        CanDoActionTestUtils.runAndAssertCanDoActionFailure(command, 
VdcBllMessages.ACTION_TYPE_FAILED_VM_ATTACHED_TO_POOL);
+
+        oldDisk.setWipeAfterDelete(false);
+        parameters.getDiskInfo().setWipeAfterDelete(true);
+        CanDoActionTestUtils.runAndAssertCanDoActionFailure(command, 
VdcBllMessages.ACTION_TYPE_FAILED_VM_ATTACHED_TO_POOL);
+    }
+
+    @Test
     public void canDoActionFailedShareableDiskOnGlusterDomain() throws 
Exception {
         UpdateVmDiskParameters parameters = createParameters();
         DiskImage disk = createShareableDisk(VolumeFormat.RAW);


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

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

Reply via email to