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 <[email protected]>
---
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/UpdateVmVersionParameters.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VmManagementParametersBase.java
5 files changed, 46 insertions(+), 3 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/04/34304/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 8fe81f5..c08b444 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
@@ -61,6 +61,7 @@
                 .getDiskInfoList(), getParameters().getStorageDomainId());
         parameters.setSessionId(getParameters().getSessionId());
         parameters.setDontAttachToDefaultTag(true);
+        
parameters.setDiskOperatorAuthzPrincipalDbId(getParameters().getDiskOperatorAuthzPrincipalDbId());
         return 
runInternalActionWithTasksContext(VdcActionType.AddVmFromScratch, parameters);
     }
 
@@ -71,6 +72,7 @@
         } else {
             parameters.setSessionId(getParameters().getSessionId());
         }
+        
parameters.setDiskOperatorAuthzPrincipalDbId(getParameters().getDiskOperatorAuthzPrincipalDbId());
         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 ab3c754..a2a0e2f 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
@@ -1226,9 +1226,12 @@
     protected void addDiskPermissions() {
         List<Guid> newDiskImageIds = new 
ArrayList<>(srcDiskIdToTargetDiskIdMapping.values());
         Permissions[] permsArray = new Permissions[newDiskImageIds.size()];
+        Guid diskOperatorIdFromParams = 
getParameters().getDiskOperatorAuthzPrincipalDbId();
+        Guid diskOperatorId = diskOperatorIdFromParams != null ? 
diskOperatorIdFromParams : getCurrentUser().getId();
+
         for (int i = 0; i < newDiskImageIds.size(); i++) {
             permsArray[i] =
-                    new Permissions(getCurrentUser().getId(),
+                    new Permissions(diskOperatorId,
                             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 3656c1e..93a2678 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
@@ -18,10 +18,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;
@@ -110,6 +111,8 @@
         if (!copyData(getVmTemplate(), getVm().getStaticData())) {
             return;
         }
+
+        
getParameters().setPreviousDiskOperatorAuthzPrincipalDbId(getIdOfDiskOperator());
         getParameters().setVmStaticData(getVm().getStaticData());
 
         if (getVm().getVmPoolId() != null) {
@@ -145,8 +148,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 =
@@ -188,6 +205,8 @@
         } else {
             addVmParams.setSessionId(getParameters().getSessionId());
         }
+        
addVmParams.setDiskOperatorAuthzPrincipalDbId(getParameters().getPreviousDiskOperatorAuthzPrincipalDbId());
+
         runInternalAction(action, addVmParams,
                 ExecutionHandler.createDefaultContextForTasks(getContext(), 
getLock()));
     }
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..484e97f 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,8 @@
 public class UpdateVmVersionParameters extends VmManagementParametersBase {
 
     private Guid vmPoolId;
+    /** The ID of disk operator of one of the disks the VM had before the 
update */
+    private Guid previousDiskOperatorAuthzPrincipalDbId;
 
     public UpdateVmVersionParameters() {
     }
@@ -21,4 +23,12 @@
     public void setVmPoolId(Guid vmPoolId) {
         this.vmPoolId = vmPoolId;
     }
+
+    public Guid getPreviousDiskOperatorAuthzPrincipalDbId() {
+        return previousDiskOperatorAuthzPrincipalDbId;
+    }
+
+    public void setPreviousDiskOperatorAuthzPrincipalDbId(Guid 
previousDiskOperatorAuthzPrincipalDbId) {
+        this.previousDiskOperatorAuthzPrincipalDbId = 
previousDiskOperatorAuthzPrincipalDbId;
+    }
 }
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 c185358..23fe53d 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
@@ -33,6 +33,7 @@
     private boolean copyTemplatePermissions;
     private boolean applyChangesLater;
     private boolean updateNuma;
+    private Guid diskOperatorAuthzPrincipalDbId;
 
     /*
      * This parameter is needed at update to make sure that when we get a null 
watchdog from rest-api it is not meant to
@@ -252,4 +253,12 @@
     public void setUpdateNuma(boolean updateNuma) {
         this.updateNuma = updateNuma;
     }
+
+    public Guid getDiskOperatorAuthzPrincipalDbId() {
+        return diskOperatorAuthzPrincipalDbId;
+    }
+
+    public void setDiskOperatorAuthzPrincipalDbId(Guid 
diskOperatorAuthzPrincipalDbId) {
+        this.diskOperatorAuthzPrincipalDbId = diskOperatorAuthzPrincipalDbId;
+    }
 }


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Idd9604c7a219e49d140576a66c9b15e9abb34d79
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: ovirt-engine-3.5
Gerrit-Owner: Arik Hadas <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to