Liron Ar has uploaded a new change for review. Change subject: core: restapi: wip: introducing RemoveDeviceExposingDiskSnapshotCommand ......................................................................
core: restapi: wip: introducing RemoveDeviceExposingDiskSnapshotCommand *Missing tests/locks(?) Change-Id: Iec77e0738c043b078dc779383bb08740ef0edc49 Signed-off-by: Liron Aravot <[email protected]> --- A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveDeviceExposingDiskSnapshotCommand.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/RemoveDeviceExposingDiskSnapshotParameters.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.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/dbbroker/auditloghandling/AuditLogDirector.java M backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties M backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/SnapshotDiskResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendSnapshotDiskResource.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java A backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/RemoveImageAsBlockDeviceCommandParameters.java A backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/RemoveImageAsBlockDeviceVDSCommand.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java M backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java 14 files changed, 216 insertions(+), 2 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/99/16299/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveDeviceExposingDiskSnapshotCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveDeviceExposingDiskSnapshotCommand.java new file mode 100644 index 0000000..bc625e2 --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveDeviceExposingDiskSnapshotCommand.java @@ -0,0 +1,75 @@ +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.RemoveDeviceExposingDiskSnapshotParameters; +import org.ovirt.engine.core.common.businessentities.DiskImage; +import org.ovirt.engine.core.common.businessentities.VDSStatus; +import org.ovirt.engine.core.common.errors.VdcBllMessages; +import org.ovirt.engine.core.common.vdscommands.VDSCommandType; +import org.ovirt.engine.core.common.vdscommands.VDSReturnValue; +import org.ovirt.engine.core.vdsbroker.vdsbroker.ExportImageAsBlockDeviceVDSCommandParameters; + +@NonTransactiveCommandAttribute +public class RemoveDeviceExposingDiskSnapshotCommand<T extends RemoveDeviceExposingDiskSnapshotParameters> extends BaseDiskBySnapshotCommand<T> { + + public RemoveDeviceExposingDiskSnapshotCommand(T parameters) { + super(parameters); + setVdsId(getParameters().getVdsId()); + } + + @Override + protected boolean canDoAction() { + if (!super.canDoAction()) { + return false; + } + + if (getVds() == null) { + return failCanDoAction(VdcBllMessages.VDS_INVALID_SERVER_ID); + } + + if (getVds().getStatus() != VDSStatus.Up) { + return failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_VDS_NOT_MATCH_VALID_STATUS); + } + + return true; + } + + @Override + protected void executeCommand() { + DiskImage diskImage = getDiskForSnapshot(getParameters().getSnapshotId()); + VDSReturnValue vdsReturnValue = runVdsCommand(VDSCommandType.RemoveImageAsBlockDevice, + new ExportImageAsBlockDeviceVDSCommandParameters(getParameters().getVdsId(), + diskImage.getStoragePoolId(), + diskImage.getStorageIds().get(0), + diskImage.getId(), + diskImage.getImageId())); + setActionReturnValue(vdsReturnValue.getReturnValue()); + setSucceeded(true); + } + + @Override + public AuditLogType getAuditLogTypeValue() { + return getSucceeded() ? AuditLogType.REMOVE_EXPOSING_DEVICE_SUCCESS : AuditLogType.REMOVE_EXPOSING_DEVICE_FAILED; + } + + @Override + protected boolean isUserAuthorizedToRunAction() { + return true; + } + + @Override + public List<PermissionSubject> getPermissionCheckSubjects() { + // Not needed for admin operations. + return Collections.emptyList(); + } + + @Override + protected void setActionMessageParameters() { + addCanDoActionMessage(VdcBllMessages.VAR__ACTION__REMOVE); + addCanDoActionMessage(VdcBllMessages.VAR__TYPE__SYSTEM_DEVICE); + } +} 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 125231c..2604711 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 @@ -684,6 +684,9 @@ UPDATE_OVF_FOR_STORAGE_POOL_FAILED(1005), UPGRADE_STORAGE_POOL_ENCOUNTERED_PROBLEMS(1006), + REMOVE_EXPOSING_DEVICE_SUCCESS(1007), + REMOVE_EXPOSING_DEVICE_FAILED(1008), + RELOAD_CONFIGURATIONS_SUCCESS(1010), RELOAD_CONFIGURATIONS_FAILURE(1011), diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/RemoveDeviceExposingDiskSnapshotParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/RemoveDeviceExposingDiskSnapshotParameters.java new file mode 100644 index 0000000..c4b9523 --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/RemoveDeviceExposingDiskSnapshotParameters.java @@ -0,0 +1,20 @@ +package org.ovirt.engine.core.common.action; + +import org.ovirt.engine.core.compat.Guid; + +public class RemoveDeviceExposingDiskSnapshotParameters extends BaseDiskBySnapshotParameters { + private Guid vdsId; + + public RemoveDeviceExposingDiskSnapshotParameters(Guid diskId, Guid snapshotId, Guid vdsId) { + super(diskId, snapshotId); + this.vdsId = vdsId; + } + + public Guid getVdsId() { + return vdsId; + } + + public void setVdsId(Guid vdsId) { + this.vdsId = vdsId; + } +} 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 00c2ebe..e6482a9 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 @@ -214,6 +214,7 @@ LiveMigrateVmDisks(1011, false, QuotaDependency.STORAGE), MoveDisks(1012, false, QuotaDependency.NONE), ExportDiskBySnapshotAsBlockDevice(1013, false, QuotaDependency.NONE), + RemoveDeviceExposingDiskSnapshot(1014, false, QuotaDependency.NONE), // Event Notification AddEventSubscription(1100, false, QuotaDependency.NONE), RemoveEventSubscription(1101, false, QuotaDependency.NONE), 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 4a0d1c3..71dfc7d 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"), ExportImageAsBlockDevice("org.ovirt.engine.core.vdsbroker.vdsbroker"), + RemoveImageAsBlockDevice("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/dbbroker/auditloghandling/AuditLogDirector.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogDirector.java index 0e72415..49a7ac2 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogDirector.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogDirector.java @@ -438,6 +438,8 @@ severities.put(AuditLogType.STORAGE_DOMAIN_TASKS_ERROR, AuditLogSeverity.WARNING); severities.put(AuditLogType.UPDATE_OVF_FOR_STORAGE_POOL_FAILED, AuditLogSeverity.WARNING); severities.put(AuditLogType.UPGRADE_STORAGE_POOL_ENCOUNTERED_PROBLEMS, AuditLogSeverity.WARNING); + severities.put(AuditLogType.REMOVE_EXPOSING_DEVICE_SUCCESS, AuditLogSeverity.NORMAL); + severities.put(AuditLogType.REMOVE_EXPOSING_DEVICE_FAILED, AuditLogSeverity.WARNING); severities.put(AuditLogType.EXPORT_IMAGE_AS_DEVICE_SUCCEEDED, AuditLogSeverity.NORMAL); severities.put(AuditLogType.EXPORT_IMAGE_AS_DEVICE_FAILED, AuditLogSeverity.WARNING); } diff --git a/backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties b/backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties index 12031c3..5882e50 100644 --- a/backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties +++ b/backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties @@ -419,6 +419,8 @@ USER_UPDATE_STORAGE_DOMAIN_FAILED=Failed to update Storage Domain ${StorageDomainName}. (User: ${UserName}) USER_UPDATE_STORAGE_POOL=Data Center ${StoragePoolName} was updated by ${UserName} UPGRADE_STORAGE_POOL_ENCOUNTERED_PROBLEMS=Data Center ${StoragePoolName} has encountered problems during upgrade process. +REMOVE_EXPOSING_DEVICE_SUCCESS=Success in removing the device exposing Disk ${DiskAlias} from Snapshot ${SnapshotName} on Host ${VdsName}. +REMOVE_EXPOSING_DEVICE_FAILED=Failed to remove the device exposing Disk ${DiskAlias} from Snapshot ${SnapshotName} on Host ${VdsName}. USER_UPDATE_STORAGE_POOL_FAILED=Failed to update Data Center ${StoragePoolName}. (User: ${UserName}) VDS_SET_NONOPERATIONAL_NETWORK=Host ${VdsName} does not comply with the cluster ${VdsGroupName} networks, the following networks are missing on host: '${Networks}' VDS_NETWORKS_OUT_OF_SYNC=Host ${VdsName}'s following network(s) are not synchronized with their Logical Network configuration: ${Networks}. diff --git a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/SnapshotDiskResource.java b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/SnapshotDiskResource.java index da02c63..d611514 100644 --- a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/SnapshotDiskResource.java +++ b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/SnapshotDiskResource.java @@ -25,4 +25,11 @@ @Path("exportAsBlockDevice") @Consumes({ApiMediaType.APPLICATION_XML, ApiMediaType.APPLICATION_JSON, ApiMediaType.APPLICATION_X_YAML}) public Response exportAsBlockDevice(Action action); + + @POST + @Formatted + @Actionable + @Path("removeExposingDevice") + @Consumes({ApiMediaType.APPLICATION_XML, ApiMediaType.APPLICATION_JSON, ApiMediaType.APPLICATION_X_YAML}) + public Response removeExposingDevice(Action action); } diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendSnapshotDiskResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendSnapshotDiskResource.java index f92bcf6..5d534ce 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendSnapshotDiskResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendSnapshotDiskResource.java @@ -7,6 +7,7 @@ import org.ovirt.engine.api.model.Disk; import org.ovirt.engine.api.resource.SnapshotDiskResource; import org.ovirt.engine.core.common.action.ExportDiskBySnapshotAsBlockDeviceParameters; +import org.ovirt.engine.core.common.action.RemoveDeviceExposingDiskSnapshotParameters; import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.compat.Guid; @@ -33,13 +34,24 @@ @Override public Response exportAsBlockDevice(Action action) { - validateParameters(action, "host"); - validateParameters(action.getHost(), "id"); + validateHostIdInfoInput(action); ExportDiskBySnapshotAsBlockDeviceParameters params = new ExportDiskBySnapshotAsBlockDeviceParameters(Guid.createGuidFromString(diskId), collection.parent.guid, Guid.createGuidFromString(action.getHost().getId())); return doAction(VdcActionType.ExportDiskBySnapshotAsBlockDevice, params, action); } @Override + public Response removeExposingDevice(Action action) { + validateHostIdInfoInput(action); + RemoveDeviceExposingDiskSnapshotParameters params = new RemoveDeviceExposingDiskSnapshotParameters(Guid.createGuidFromString(diskId), collection.parent.guid, Guid.createGuidFromString(action.getHost().getId())); + return doAction(VdcActionType.RemoveDeviceExposingDiskSnapshot, params, action); + } + + private void validateHostIdInfoInput(Action action) { + validateParameters(action, "host"); + validateParameters(action.getHost(), "id"); + } + + @Override protected Disk doPopulate(Disk model, org.ovirt.engine.core.common.businessentities.Disk entity) { return model; } diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java index 1d38fa5..6a8ae3d 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/IVdsServer.java @@ -163,6 +163,8 @@ ExportImageAsBlockDeviceReturnForXmlRpc exportImageAsBlockDevice(String spUUID, String sdUUID, String srcImgGUID, String srcVolUUID); + StatusOnlyReturnForXmlRpc removeImageAsBlockDevice(String spUUID, String sdUUID, String srcImgGUID, String srcVolUUID); + StatusOnlyReturnForXmlRpc hotplugDisk(Map info); StatusOnlyReturnForXmlRpc hotunplugDisk(Map info); diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/RemoveImageAsBlockDeviceCommandParameters.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/RemoveImageAsBlockDeviceCommandParameters.java new file mode 100644 index 0000000..25f598c --- /dev/null +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/RemoveImageAsBlockDeviceCommandParameters.java @@ -0,0 +1,48 @@ +package org.ovirt.engine.core.vdsbroker.vdsbroker; + +import org.ovirt.engine.core.common.vdscommands.VdsIdVDSCommandParametersBase; +import org.ovirt.engine.core.compat.Guid; + +public class RemoveImageAsBlockDeviceCommandParameters extends VdsIdVDSCommandParametersBase { + private Guid storagePoolId, storageDomainId, imageGroupId, imageId; + + public RemoveImageAsBlockDeviceCommandParameters(Guid vdsId, Guid storagePoolId, Guid storageDomainId, Guid imageGroupId, Guid imageId) { + super(vdsId); + this.storagePoolId = storagePoolId; + this.storageDomainId = storageDomainId; + this.imageGroupId = imageGroupId; + this.imageId = imageId; + } + + public Guid getStoragePoolId() { + return storagePoolId; + } + + public void setStoragePoolId(Guid storagePoolId) { + this.storagePoolId = storagePoolId; + } + + public Guid getStorageDomainId() { + return storageDomainId; + } + + public void setStorageDomainId(Guid storageDomainId) { + this.storageDomainId = storageDomainId; + } + + public Guid getImageGroupId() { + return imageGroupId; + } + + public void setImageGroupId(Guid imageGroupId) { + this.imageGroupId = imageGroupId; + } + + public Guid getImageId() { + return imageId; + } + + public void setImageId(Guid imageId) { + this.imageId = imageId; + } +} diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/RemoveImageAsBlockDeviceVDSCommand.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/RemoveImageAsBlockDeviceVDSCommand.java new file mode 100644 index 0000000..23e8e37 --- /dev/null +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/RemoveImageAsBlockDeviceVDSCommand.java @@ -0,0 +1,29 @@ +package org.ovirt.engine.core.vdsbroker.vdsbroker; + +public class RemoveImageAsBlockDeviceVDSCommand<P extends RemoveImageAsBlockDeviceCommandParameters> extends VdsBrokerCommand<P> { + + public RemoveImageAsBlockDeviceVDSCommand(P parameters) { + super(parameters); + } + + @Override + protected void ExecuteVdsBrokerCommand() { + log.info("-- RemoveImageAsBlockDeviceVDSCommand::ExecuteVdsBrokerCommand: calling 'exportImageAsBlockDevice' "); + log.infoFormat("-- removeImageAsBlockDevice parameters:" + "\r\n" + + " spUUID={0}" + "\r\n" + + " sdUUID={1}" + "\r\n" + + " imageGUID={2}" + "\r\n" + + " volUUID={3}" + "\r\n", + getParameters().getStoragePoolId().toString(), + getParameters().getStorageDomainId().toString(), + getParameters().getImageGroupId().toString(), + getParameters().getImageId().toString()); + + status = + getBroker().removeImageAsBlockDevice(getParameters().getStoragePoolId().toString(), + getParameters().getStorageDomainId().toString(), + getParameters().getImageGroupId().toString(), + getParameters().getImageId().toString()); + ProceedProxyReturnValue(); + } +} diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java index 949c12e..7586aae 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerConnector.java @@ -148,6 +148,8 @@ Map<String, Object> exportImageAsBlockDevice(String spUUID, String sdUUID, String srcImgGUID, String srcVolUUID); + Map<String, Object> removeImageAsBlockDevice(String spUUID, String sdUUID, String srcImgGUID, String srcVolUUID); + Map<String, Object> hotplugDisk(Map<String, Object> info); Map<String, Object> hotunplugDisk(Map<String, Object> info); diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java index cd433b0..6843e34 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VdsServerWrapper.java @@ -797,6 +797,16 @@ } } + public StatusOnlyReturnForXmlRpc removeImageAsBlockDevice(String spUUID, String sdUUID, String srcImgGUID, String srcVolUUID) { + try { + Map<String, Object> xmlRpcReturnValue = vdsServer.removeImageAsBlockDevice(spUUID, sdUUID, srcImgGUID, srcVolUUID); + StatusOnlyReturnForXmlRpc wrapper = new StatusOnlyReturnForXmlRpc(xmlRpcReturnValue); + return wrapper; + } catch (UndeclaredThrowableException ute) { + throw new XmlRpcRunTimeException(ute); + } + } + @Override public StatusOnlyReturnForXmlRpc hotplugDisk(Map info) { try { -- To view, visit http://gerrit.ovirt.org/16299 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Iec77e0738c043b078dc779383bb08740ef0edc49 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Liron Ar <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
