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
