Arik Hadas has uploaded a new change for review.

Change subject: core: use previous disk operator on template version update
......................................................................

core: use previous disk operator on template version update

Updating the template version for a VM when the template contained disks
didn't work because no user was selected to serve as the disks operator.

This patch fixes it by setting the user that used to be disk operator
for one of the disks of the VM while it was based on the previous
template version, as the disk operator of the disks from the new
template version.

Change-Id: Idd9604c7a219e49d140576a66c9b15e9abb34d79
Bug-Url: https://bugzilla.redhat.com/1149135
Signed-off-by: Arik Hadas <aha...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmAndAttachToPoolCommand.java
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/UpdateVmVersionCommand.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddVmParameters.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/UpdateVmVersionParameters.java
5 files changed, 50 insertions(+), 3 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/50/34150/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmAndAttachToPoolCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmAndAttachToPoolCommand.java
index 8ffe77a..c2de18f 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmAndAttachToPoolCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmAndAttachToPoolCommand.java
@@ -60,6 +60,7 @@
         parameters.setStorageDomainId(getParameters().getStorageDomainId());
         parameters.setSessionId(getParameters().getSessionId());
         parameters.setDontAttachToDefaultTag(true);
+        
parameters.setDiskOperatorUserId(getParameters().getDiskOperatorUserId());
         return 
runInternalActionWithTasksContext(VdcActionType.AddVmFromScratch, parameters);
     }
 
@@ -70,6 +71,7 @@
         } else {
             parameters.setSessionId(getParameters().getSessionId());
         }
+        
parameters.setDiskOperatorUserId(getParameters().getDiskOperatorUserId());
         parameters.setDontAttachToDefaultTag(true);
         parameters.setDiskInfoDestinationMap(diskInfoDestinationMap);
         
parameters.setSoundDeviceEnabled(getParameters().isSoundDeviceEnabled());
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 9f96d83..37ae50e 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
@@ -1219,9 +1219,13 @@
     protected void addDiskPermissions() {
         List<Guid> newDiskImageIds = new 
ArrayList<>(srcDiskIdToTargetDiskIdMapping.values());
         Permissions[] permsArray = new Permissions[newDiskImageIds.size()];
+        Guid diskOperatorUserIdFromParams = 
getParameters().getDiskOperatorUserId();
+        Guid diskOperatorUserId = diskOperatorUserIdFromParams != null ?
+                diskOperatorUserIdFromParams : getCurrentUser().getId();
+
         for (int i = 0; i < newDiskImageIds.size(); i++) {
             permsArray[i] =
-                    new Permissions(getCurrentUser().getId(),
+                    new Permissions(diskOperatorUserId,
                             PredefinedRoles.DISK_OPERATOR.getId(),
                             newDiskImageIds.get(i),
                             VdcObjectType.Disk);
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmVersionCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmVersionCommand.java
index 3be2045..6b32207 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmVersionCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmVersionCommand.java
@@ -19,10 +19,11 @@
 import org.ovirt.engine.core.common.action.UpdateVmVersionParameters;
 import org.ovirt.engine.core.common.action.VdcActionType;
 import org.ovirt.engine.core.common.action.VdcReturnValueBase;
-import org.ovirt.engine.core.common.action.VmManagementParametersBase;
 import org.ovirt.engine.core.common.asynctasks.EntityInfo;
 import org.ovirt.engine.core.common.businessentities.CopyOnNewVersion;
+import org.ovirt.engine.core.common.businessentities.Disk;
 import org.ovirt.engine.core.common.businessentities.DiskImage;
+import org.ovirt.engine.core.common.businessentities.Permissions;
 import org.ovirt.engine.core.common.businessentities.VMStatus;
 import org.ovirt.engine.core.common.businessentities.VmBase;
 import org.ovirt.engine.core.common.businessentities.VmDeviceGeneralType;
@@ -111,6 +112,8 @@
         if (!copyData(getVmTemplate(), getVm().getStaticData())) {
             return;
         }
+
+        getParameters().setPreviousDiskOperatorUserId(getIdOfDiskOperator());
         getParameters().setVmStaticData(getVm().getStaticData());
 
         if (getVm().getVmPoolId() != null) {
@@ -146,8 +149,22 @@
         }
     }
 
+    private Guid getIdOfDiskOperator() {
+        List<Disk> diskIds = getDbFacade().getDiskDao().getAllForVm(getVmId());
+        if (diskIds.isEmpty()) {
+            return null;
+        }
+
+        List<Permissions> perms = 
getPermissionDAO().getAllForRoleAndObject(PredefinedRoles.DISK_OPERATOR.getId(),
 diskIds.iterator().next().getId());
+        if (perms.isEmpty()) {
+            return null;
+        }
+
+        return perms.iterator().next().getad_element_id();
+    }
+
     private void addUpdatedVm() {
-        VmManagementParametersBase addVmParams;
+        AddVmParameters addVmParams;
         VdcActionType action;
         if (getParameters().getVmPoolId() != null) {
             addVmParams =
@@ -189,6 +206,8 @@
         } else {
             addVmParams.setSessionId(getParameters().getSessionId());
         }
+        
addVmParams.setDiskOperatorUserId(getParameters().getPreviousDiskOperatorUserId());
+
         runInternalAction(action, addVmParams,
                 ExecutionHandler.createDefaultContextForTasks(getContext(), 
getLock()));
     }
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddVmParameters.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddVmParameters.java
index bf01a75..df8fa06 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddVmParameters.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/AddVmParameters.java
@@ -6,12 +6,15 @@
 import 
org.ovirt.engine.core.common.businessentities.TemplateProvisioningMethod;
 import org.ovirt.engine.core.common.businessentities.VM;
 import org.ovirt.engine.core.common.businessentities.VmStatic;
+import org.ovirt.engine.core.compat.Guid;
 
 public class AddVmParameters extends VmManagementParametersBase {
     private static final long serialVersionUID = 8641610721114989096L;
 
     private ArrayList<DiskImage> diskInfoList;
     private TemplateProvisioningMethod templateProvisioningMethod = 
TemplateProvisioningMethod.THIN;
+    /** The ID of the user in the directory service which should serve as 
disk-operator */
+    private Guid diskOperatorUserId;
 
     public AddVmParameters() {
     }
@@ -40,4 +43,12 @@
     public void setTemplateProvisioningMethod(TemplateProvisioningMethod 
templateProvisioningMethod) {
         this.templateProvisioningMethod = templateProvisioningMethod;
     }
+
+    public Guid getDiskOperatorUserId() {
+        return diskOperatorUserId;
+    }
+
+    public void setDiskOperatorUserId(Guid diskOperatorUserId) {
+        this.diskOperatorUserId = diskOperatorUserId;
+    }
 }
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/UpdateVmVersionParameters.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/UpdateVmVersionParameters.java
index 73edc51..95155fe 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/UpdateVmVersionParameters.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/UpdateVmVersionParameters.java
@@ -5,6 +5,9 @@
 public class UpdateVmVersionParameters extends VmManagementParametersBase {
 
     private Guid vmPoolId;
+    /** The ID in the users directory service of disk operator that is set for 
the disks of the VM
+     *  which is removed in the command */
+    private Guid previousDiskOperatorUserId;
 
     public UpdateVmVersionParameters() {
     }
@@ -21,4 +24,12 @@
     public void setVmPoolId(Guid vmPoolId) {
         this.vmPoolId = vmPoolId;
     }
+
+    public Guid getPreviousDiskOperatorUserId() {
+        return previousDiskOperatorUserId;
+    }
+
+    public void setPreviousDiskOperatorUserId(Guid previousDiskOperatorUserId) 
{
+        this.previousDiskOperatorUserId = previousDiskOperatorUserId;
+    }
 }


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

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

Reply via email to