Sharad Mishra has uploaded a new change for review. Change subject: api: API to tear down VM disk after backup. ......................................................................
api: API to tear down VM disk after backup. This new API is the reverse of prepareForBackup http://gerrit.ovirt.org/#/c/15143/1 It instructs VDSM to unmount the block device being exposed to the VM by qemu-nbd. Change-Id: Ifd3fb443932d4bb8012e54fa7189a0766d0bcbaf Signed-off-by: Sharad Mishra <[email protected]> --- A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/TearDownBackupCommand.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/AuditLogType.java A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/TearDownBackupParameters.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/TearDownBackupVDSParameters.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/VdcBllMessages.java M backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/VmDiskResource.java M backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmDiskResource.java A backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/TearDownBackupVDSCommand.java 11 files changed, 188 insertions(+), 1 deletion(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/74/15174/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/TearDownBackupCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/TearDownBackupCommand.java new file mode 100644 index 0000000..7679d79 --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/TearDownBackupCommand.java @@ -0,0 +1,52 @@ +package org.ovirt.engine.core.bll; + +import java.util.Collections; +import java.util.List; + +import org.ovirt.engine.core.bll.utils.PermissionSubject; +import org.ovirt.engine.core.common.AuditLogType; +import org.ovirt.engine.core.common.action.TearDownBackupParameters; +import org.ovirt.engine.core.common.businessentities.Disk; +import org.ovirt.engine.core.common.vdscommands.VDSCommandType; +import org.ovirt.engine.core.dal.VdcBllMessages; +import org.ovirt.engine.core.common.vdscommands.TearDownBackupVDSParameters; + +@NonTransactiveCommandAttribute +@LockIdNameAttribute +public class TearDownBackupCommand<T extends TearDownBackupParameters> extends AbstractDiskVmCommand<T> { + + protected Disk disk; + + public TearDownBackupCommand(T parameters) { + super(parameters); + disk = getDiskDao().get(getParameters().getDiskId()); + } + + @Override + protected void setActionMessageParameters() { + addCanDoActionMessage(VdcBllMessages.VAR__ACTION__TEARDOWN__BACKUP); + } + + @Override + protected void executeCommand() { + runVdsCommand(VDSCommandType.TearDownBackup, new TearDownBackupVDSParameters(getVm().getRunOnVds().getValue(), getVm().getId(), disk)); + setSucceeded(true); + } + + @Override + public AuditLogType getAuditLogTypeValue() { + return getSucceeded() ? AuditLogType.USER_TEARDOWN_BACKUP : AuditLogType.USER_TEARDOWN_BACKUP_FAILED; + } + + @Override + protected boolean isUserAuthorizedToRunAction() { + return true; + } + + @Override + public List<PermissionSubject> getPermissionCheckSubjects() { + // Not needed for admin operations. + return Collections.emptyList(); + } + +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/AuditLogType.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/AuditLogType.java index 9e3843d..4148210 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/AuditLogType.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/AuditLogType.java @@ -661,9 +661,12 @@ USER_ACCOUNT_DISABLED_OR_LOCKED(1100, AuditLogTimeInterval.HOUR.getValue()), USER_ACCOUNT_PASSWORD_EXPIRED(1101, AuditLogTimeInterval.HOUR.getValue()), - // Backup + // Backup & Restore USER_PREPARE_BACKUP(1250), USER_PREPARE_BACKUP_FAILED(1251), + USER_TEARDOWN_BACKUP(1252), + USER_TEARDOWN_BACKUP_FAILED(1253), + // Providers PROVIDER_ADDED(1150), diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/TearDownBackupParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/TearDownBackupParameters.java new file mode 100644 index 0000000..ddadbe2 --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/TearDownBackupParameters.java @@ -0,0 +1,30 @@ +package org.ovirt.engine.core.common.action; + +import javax.validation.constraints.NotNull; + +import org.ovirt.engine.core.compat.Guid; + +public class TearDownBackupParameters extends VmDiskOperationParameterBase { + + private static final long serialVersionUID = 6007874805077449989L; + + public TearDownBackupParameters() { + } + + @NotNull + private Guid diskId; + + public TearDownBackupParameters(Guid vmId, Guid diskId) { + super(vmId, null); + setDiskId(diskId); + } + + public Guid getDiskId() { + return diskId; + } + + public void setDiskId(Guid diskId) { + this.diskId = diskId; + } + +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java index a849d94..f4bd535 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java @@ -212,6 +212,7 @@ LiveMigrateVmDisks(1011, false, QuotaDependency.STORAGE), MoveDisks(1012, false, QuotaDependency.NONE), PrepareForBackup(1013, false, QuotaDependency.NONE), + TearDownBackup(1014, false, QuotaDependency.NONE), // Event Notification AddEventSubscription(1100, QuotaDependency.NONE), RemoveEventSubscription(1101, QuotaDependency.NONE), diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/TearDownBackupVDSParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/TearDownBackupVDSParameters.java new file mode 100644 index 0000000..40b9af9 --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/TearDownBackupVDSParameters.java @@ -0,0 +1,30 @@ +package org.ovirt.engine.core.common.vdscommands; + +import org.ovirt.engine.core.common.businessentities.Disk; +import org.ovirt.engine.core.compat.Guid; + +public class TearDownBackupVDSParameters extends VdsAndVmIDVDSParametersBase { + + private Disk disk; + + public TearDownBackupVDSParameters() { + } + + public TearDownBackupVDSParameters(Guid vdsId, Guid vmId, Disk disk) { + super(vdsId, vmId); + this.disk = disk; + } + + public Disk getDisk() { + return disk; + } + + public void setDisk(Disk disk) { + this.disk = disk; + } + + @Override + public String toString() { + return String.format("%s, volumeId = %s", super.toString(), disk.getId()); + } +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java index 7cf5fb4..5369bdd 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java @@ -109,6 +109,7 @@ HotPlugNic("org.ovirt.engine.core.vdsbroker.vdsbroker"), HotUnplugNic("org.ovirt.engine.core.vdsbroker.vdsbroker"), PrepareForBackup("org.ovirt.engine.core.vdsbroker.vdsbroker"), + TearDownBackup("org.ovirt.engine.core.vdsbroker.vdsbroker"), Snapshot("org.ovirt.engine.core.vdsbroker.vdsbroker"), UpdateVmInterface("org.ovirt.engine.core.vdsbroker.vdsbroker"), GetHardwareInfo("org.ovirt.engine.core.vdsbroker.vdsbroker"), diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/VdcBllMessages.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/VdcBllMessages.java index 94987f2..d589905 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/VdcBllMessages.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/VdcBllMessages.java @@ -76,6 +76,7 @@ VAR__ACTION__ENABLE, VAR__ACTION__DISABLE, VAR__ACTION__PREPARE__FOR__BACKUP, + VAR__ACTION__TEARDOWN__BACKUP, // Host statuses replacements VAR__HOST_STATUS__UP, diff --git a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/VmDiskResource.java b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/VmDiskResource.java index ca99dcf..adf27db 100644 --- a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/VmDiskResource.java +++ b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/VmDiskResource.java @@ -64,6 +64,13 @@ @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON, MediaType.APPLICATION_X_YAML}) public Response prepareForBackup(Action action); + @POST + @Formatted + @Actionable + @Path("tearDownBackup") + @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON, MediaType.APPLICATION_X_YAML}) + public Response tearDownBackup(Action action); + @PUT @Formatted @Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON, MediaType.APPLICATION_X_YAML }) diff --git a/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml b/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml index 0214890..d0a359c 100644 --- a/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml +++ b/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml @@ -426,6 +426,15 @@ headers: Content-Type: {value: application/xml|json, required: true} Correlation-Id: {value: 'any string', required: false} +- name: /api/vms/{vm:id}/disks/{disk:id}/tearDownBackup|rel=tearDownBackup + request: + body: + parameterType: Action + signatures: [] + urlparams: {} + headers: + Content-Type: {value: application/xml|json, required: true} + Correlation-Id: {value: 'any string', required: false} - name: /api/vms/{vm:id}/nics|rel=get request: body: diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmDiskResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmDiskResource.java index b641591..c4a63ad 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmDiskResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmDiskResource.java @@ -17,6 +17,7 @@ import org.ovirt.engine.core.common.action.MoveDiskParameters; import org.ovirt.engine.core.common.action.MoveDisksParameters; import org.ovirt.engine.core.common.action.PrepareForBackupParameters; +import org.ovirt.engine.core.common.action.TearDownBackupParameters; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.queries.GetPermissionsForObjectParameters; import org.ovirt.engine.core.common.queries.IdQueryParameters; @@ -107,6 +108,14 @@ return doAction(VdcActionType.PrepareForBackup, params, action); } + @Override + public Response tearDownBackup(Action action) { + TearDownBackupParameters params = + new TearDownBackupParameters(((BackendVmDisksResource) collection).parentId, + guid); + return doAction(VdcActionType.TearDownBackup, params, action); + } + protected Disk getDisk() { return performGet(VdcQueryType.GetDiskByDiskId, new IdQueryParameters(guid)); } diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/TearDownBackupVDSCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/TearDownBackupVDSCommand.java new file mode 100644 index 0000000..9e0bd19 --- /dev/null +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/TearDownBackupVDSCommand.java @@ -0,0 +1,44 @@ +package org.ovirt.engine.core.vdsbroker.vdsbroker; + +import java.util.HashMap; +import java.util.Map; + +import org.ovirt.engine.core.common.businessentities.Disk; +import org.ovirt.engine.core.common.businessentities.DiskImage; +import org.ovirt.engine.core.common.vdscommands.TearDownBackupVDSParameters; + +public class TearDownBackupVDSCommand<P extends TearDownBackupVDSParameters> extends VdsBrokerCommand<P> { + + protected Map<String, Object> sendInfo = new HashMap<String, Object>(); + + public TearDownBackupVDSCommand(P parameters) { + super(parameters); + } + + @Override + protected void ExecuteVdsBrokerCommand() { + buildSendDataToVdsm(); + ProceedProxyReturnValue(); + } + + protected void buildSendDataToVdsm() { + sendInfo.put("vmId", getParameters().getVmId().toString()); + TearDownBackupVDSParameters param = getParameters(); + Disk disk = param.getDisk(); + sendInfo.put("drive", initDriveData(disk)); + } + + private Map<String, Object> initDriveData(Disk disk) { + Map<String, Object> drive = new HashMap<String, Object>(); + + DiskImage diskImage = (DiskImage) disk; + drive.put(VdsProperties.DomainId, diskImage.getStorageIds().get(0).toString()); + drive.put(VdsProperties.PoolId, diskImage.getStoragePoolId().toString()); + drive.put(VdsProperties.VolumeId, diskImage.getImageId().toString()); + drive.put(VdsProperties.ImageId, diskImage.getId().toString()); + drive.put(VdsProperties.PropagateErrors, disk.getPropagateErrors().toString().toLowerCase()); + + return drive; + } + +} -- To view, visit http://gerrit.ovirt.org/15174 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ifd3fb443932d4bb8012e54fa7189a0766d0bcbaf Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Sharad Mishra <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
