Sharad Mishra has uploaded a new change for review. Change subject: api: API to prepare VM disk for backup. ......................................................................
api: API to prepare VM disk for backup. This new api gets the vm disk to be backed up and passes it to VDSM for exposing to backup server via qemu-nbd. The VDSM patch is at http://gerrit.ovirt.org/#/c/14403/ Change-Id: Ia5c23eef3599fb56606c01cd06354acadb144046 Signed-off-by: Sharad Mishra <snmis...@linux.vnet.ibm.com> --- A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/PrepareForBackupCommand.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/PrepareForBackupParameters.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/PrepareForBackupVDSParameters.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/PrepareForBackupVDSCommand.java 11 files changed, 188 insertions(+), 1 deletion(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/43/15143/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/PrepareForBackupCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/PrepareForBackupCommand.java new file mode 100644 index 0000000..63822eb --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/PrepareForBackupCommand.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.PrepareForBackupParameters; +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.PrepareForBackupVDSParameters; + +@NonTransactiveCommandAttribute +@LockIdNameAttribute +public class PrepareForBackupCommand<T extends PrepareForBackupParameters> extends AbstractDiskVmCommand<T> { + + protected Disk disk; + + public PrepareForBackupCommand(T parameters) { + super(parameters); + disk = getDiskDao().get(getParameters().getDiskId()); + } + + @Override + protected void setActionMessageParameters() { + addCanDoActionMessage(VdcBllMessages.VAR__ACTION__PREPARE__FOR__BACKUP); + } + + @Override + protected void executeCommand() { + runVdsCommand(VDSCommandType.PrepareForBackup, new PrepareForBackupVDSParameters(getVm().getRunOnVds().getValue(), getVm().getId(), disk)); + setSucceeded(true); + } + + @Override + public AuditLogType getAuditLogTypeValue() { + return getSucceeded() ? AuditLogType.USER_PREPARE_BACKUP : AuditLogType.USER_PREPARE_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 1b0608e..9e3843d 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,6 +661,10 @@ USER_ACCOUNT_DISABLED_OR_LOCKED(1100, AuditLogTimeInterval.HOUR.getValue()), USER_ACCOUNT_PASSWORD_EXPIRED(1101, AuditLogTimeInterval.HOUR.getValue()), + // Backup + USER_PREPARE_BACKUP(1250), + USER_PREPARE_BACKUP_FAILED(1251), + // Providers PROVIDER_ADDED(1150), PROVIDER_ADDITION_FAILED(1151), diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/PrepareForBackupParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/PrepareForBackupParameters.java new file mode 100644 index 0000000..1a51864 --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/PrepareForBackupParameters.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 PrepareForBackupParameters extends VmDiskOperationParameterBase { + + private static final long serialVersionUID = 6007874805077449969L; + + public PrepareForBackupParameters() { + } + + @NotNull + private Guid diskId; + + public PrepareForBackupParameters(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 e18f7b6..a849d94 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 @@ -211,6 +211,7 @@ LiveMigrateDisk(1010, QuotaDependency.NONE), LiveMigrateVmDisks(1011, false, QuotaDependency.STORAGE), MoveDisks(1012, false, QuotaDependency.NONE), + PrepareForBackup(1013, 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/PrepareForBackupVDSParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/PrepareForBackupVDSParameters.java new file mode 100644 index 0000000..46a4b5e --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/PrepareForBackupVDSParameters.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 PrepareForBackupVDSParameters extends VdsAndVmIDVDSParametersBase { + + private Disk disk; + + public PrepareForBackupVDSParameters() { + } + + public PrepareForBackupVDSParameters(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 bdd5635..7cf5fb4 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 @@ -108,6 +108,7 @@ HotUnPlugDisk("org.ovirt.engine.core.vdsbroker.vdsbroker"), HotPlugNic("org.ovirt.engine.core.vdsbroker.vdsbroker"), HotUnplugNic("org.ovirt.engine.core.vdsbroker.vdsbroker"), + PrepareForBackup("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 0487595..94987f2 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 @@ -75,6 +75,7 @@ VAR__ACTION__STOP_PROFILE, VAR__ACTION__ENABLE, VAR__ACTION__DISABLE, + VAR__ACTION__PREPARE__FOR__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 aac3fc0..ca99dcf 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 @@ -57,6 +57,13 @@ @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON, MediaType.APPLICATION_X_YAML}) public Response move(Action action); + @POST + @Formatted + @Actionable + @Path("prepareForBackup") + @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON, MediaType.APPLICATION_X_YAML}) + public Response prepareForBackup(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 422423e..0214890 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 @@ -417,6 +417,15 @@ Content-Type: {value: application/xml|json, required: true} Correlation-Id: {value: 'any string', required: false} Filter: {value: true|false, required: false} +- name: /api/vms/{vm:id}/disks/{disk:id}/prepareForBackup|rel=prepareForBackup + 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 f1c74e1..b641591 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 @@ -1,5 +1,4 @@ package org.ovirt.engine.api.restapi.resource; - import static org.ovirt.engine.api.restapi.resource.BackendVmDisksResource.SUB_COLLECTIONS; import java.util.Collections; @@ -17,6 +16,7 @@ import org.ovirt.engine.core.common.action.HotPlugDiskToVmParameters; 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.VdcActionType; import org.ovirt.engine.core.common.queries.GetPermissionsForObjectParameters; import org.ovirt.engine.core.common.queries.IdQueryParameters; @@ -99,6 +99,14 @@ return doAction(VdcActionType.MoveDisks, params, action); } + @Override + public Response prepareForBackup(Action action) { + PrepareForBackupParameters params = + new PrepareForBackupParameters(((BackendVmDisksResource) collection).parentId, + guid); + return doAction(VdcActionType.PrepareForBackup, 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/PrepareForBackupVDSCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/PrepareForBackupVDSCommand.java new file mode 100644 index 0000000..eeea47e --- /dev/null +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/PrepareForBackupVDSCommand.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.PrepareForBackupVDSParameters; + +public class PrepareForBackupVDSCommand<P extends PrepareForBackupVDSParameters> extends VdsBrokerCommand<P> { + + protected Map<String, Object> sendInfo = new HashMap<String, Object>(); + + public PrepareForBackupVDSCommand(P parameters) { + super(parameters); + } + + @Override + protected void ExecuteVdsBrokerCommand() { + buildSendDataToVdsm(); + ProceedProxyReturnValue(); + } + + protected void buildSendDataToVdsm() { + sendInfo.put("vmId", getParameters().getVmId().toString()); + PrepareForBackupVDSParameters 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/15143 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ia5c23eef3599fb56606c01cd06354acadb144046 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Sharad Mishra <snmis...@linux.vnet.ibm.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches