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