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

Reply via email to