Daniel Erez has uploaded a new change for review. Change subject: core: introduce RegisterCinderDiskCommand ......................................................................
core: introduce RegisterCinderDiskCommand Adding RegisterCinderDiskCommand which will be used to register (add to DB) unregisterd (not in DB) Cinder disks. Change-Id: Iefb1ecf11d66039bbc4f5080b021b7393f27a0be Bug-Url: https://bugzilla.redhat.com/1185826 Signed-off-by: Daniel Erez <de...@redhat.com> --- A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RegisterCinderDiskCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/storage/CinderDisksValidator.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/RegisterCinderDiskParameters.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/errors/VdcBllMessages.java M backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties M backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties M frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java M frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties M frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties 11 files changed, 140 insertions(+), 0 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/52/39652/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RegisterCinderDiskCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RegisterCinderDiskCommand.java new file mode 100644 index 0000000..010946c --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RegisterCinderDiskCommand.java @@ -0,0 +1,80 @@ +package org.ovirt.engine.core.bll.storage; + +import java.util.ArrayList; +import java.util.Arrays; + +import org.ovirt.engine.core.bll.context.CommandContext; +import org.ovirt.engine.core.bll.tasks.interfaces.CommandCallback; +import org.ovirt.engine.core.bll.validator.storage.CinderDisksValidator; +import org.ovirt.engine.core.common.AuditLogType; +import org.ovirt.engine.core.common.action.GetCinderEntityByStorageDomainIdParameters; +import org.ovirt.engine.core.common.action.RegisterCinderDiskParameters; +import org.ovirt.engine.core.common.businessentities.storage.CinderDisk; +import org.ovirt.engine.core.common.errors.VdcBllMessages; +import org.ovirt.engine.core.common.queries.VdcQueryReturnValue; +import org.ovirt.engine.core.common.queries.VdcQueryType; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class RegisterCinderDiskCommand<T extends RegisterCinderDiskParameters> extends AddCinderDiskCommand<T> { + + private static final Logger log = LoggerFactory.getLogger(RegisterCinderDiskCommand.class); + + public RegisterCinderDiskCommand(T parameters) { + this(parameters, null); + } + + public RegisterCinderDiskCommand(T parameters, CommandContext cmdContext) { + super(parameters, cmdContext); + } + + @Override + public boolean canDoAction() { + CinderDisk cinderDisk = getCinderDisk(); + cinderDisk.setStorageIds(new ArrayList<>(Arrays.asList(getParameters().getStorageDomainId()))); + CinderDisksValidator cinderDiskValidator = getCinderDisksValidator(cinderDisk); + return validate(cinderDiskValidator.validateCinderDisksAlreadyRegistered()); + } + + @Override + public void executeCommand() { + VdcQueryReturnValue returnValue = runInternalQuery(VdcQueryType.GetUnregisteredCinderDiskByIdAndStorageDomainId, + new GetCinderEntityByStorageDomainIdParameters( + getCinderDisk().getId(), getParameters().getStorageDomainId())); + CinderDisk cinderDisk = returnValue.getReturnValue(); + if (cinderDisk != null) { + addCinderDiskToDB(cinderDisk); + getReturnValue().setActionReturnValue(cinderDisk.getId()); + setSucceeded(true); + } + } + + @Override + public CommandCallback getCallback() { + return null; + } + + @Override + public AuditLogType getAuditLogTypeValue() { + addAuditLogCustomValues(); + return getSucceeded() ? AuditLogType.USER_REGISTER_DISK_FINISHED_SUCCESS : AuditLogType.USER_REGISTER_DISK_FINISHED_FAILURE; + } + + private void addAuditLogCustomValues() { + this.addCustomValue("DiskAlias", getCinderDisk().getDiskAlias()); + } + + @Override + protected void setActionMessageParameters() { + addCanDoActionMessage(VdcBllMessages.VAR__ACTION__REGISTER); + addCanDoActionMessage(VdcBllMessages.VAR__TYPE__VM_DISK); + } + + protected CinderDisk getCinderDisk() { + return getParameters().getCinderDisk(); + } + + protected CinderDisksValidator getCinderDisksValidator(CinderDisk disk) { + return new CinderDisksValidator(disk); + } +} diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/storage/CinderDisksValidator.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/storage/CinderDisksValidator.java index ce326f7..624af85 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/storage/CinderDisksValidator.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/storage/CinderDisksValidator.java @@ -2,6 +2,7 @@ import com.woorea.openstack.base.client.OpenStackResponseException; import com.woorea.openstack.cinder.model.Limits; +import com.woorea.openstack.cinder.model.Volume; import org.ovirt.engine.core.bll.ValidationResult; import org.ovirt.engine.core.bll.provider.storage.OpenStackVolumeProviderProxy; import org.ovirt.engine.core.common.businessentities.storage.CinderDisk; @@ -61,6 +62,23 @@ }); } + public ValidationResult validateCinderDisksAlreadyRegistered() { + return validate(new Callable<ValidationResult>() { + @Override + public ValidationResult call() { + for (CinderDisk disk : cinderDisks) { + OpenStackVolumeProviderProxy proxy = diskProxyMap.get(disk.getId()); + Volume volume = proxy.getVolumeById(disk.getId().toString()); + if (getDiskDao().get(disk.getId()) != null) { + return new ValidationResult(VdcBllMessages.CINDER_DISK_ALREADY_REGISTERED, + String.format("$diskAlias %s", volume.getName())); + } + } + return ValidationResult.VALID; + } + }); + } + private Map<Guid, OpenStackVolumeProviderProxy> initializeVolumeProviderProxyMap() { if (diskProxyMap == null) { diskProxyMap = new HashMap<>(); 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 4db5ac0..7639509 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 @@ -512,6 +512,8 @@ USER_REMOVE_DISK_SNAPSHOT_FINISHED_SUCCESS(375), USER_REMOVE_DISK_SNAPSHOT_FINISHED_FAILURE(376, AuditLogSeverity.ERROR), USER_EXTENDED_DISK_SIZE(377), + USER_REGISTER_DISK_FINISHED_SUCCESS(378), + USER_REGISTER_DISK_FINISHED_FAILURE(379, AuditLogSeverity.ERROR), USER_EJECT_VM_DISK(528), USER_EJECT_VM_FLOPPY(529), diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/RegisterCinderDiskParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/RegisterCinderDiskParameters.java new file mode 100644 index 0000000..d63db74 --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/RegisterCinderDiskParameters.java @@ -0,0 +1,23 @@ +package org.ovirt.engine.core.common.action; + +import org.ovirt.engine.core.common.businessentities.storage.CinderDisk; +import org.ovirt.engine.core.compat.Guid; + +public class RegisterCinderDiskParameters extends AddDiskParameters { + + private static final long serialVersionUID = -6020756467875901455L; + + private CinderDisk cinderDisk; + + public RegisterCinderDiskParameters() { + } + + public RegisterCinderDiskParameters(CinderDisk cinderDisk, Guid storageDomainId) { + this.cinderDisk = cinderDisk; + setStorageDomainId(storageDomainId); + } + + public CinderDisk getCinderDisk() { + return cinderDisk; + } +} 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 4eec38a..f781370 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 @@ -440,6 +440,7 @@ RemoveAllVmCinderDisks(3203, QuotaDependency.STORAGE), CloneSingleCinderDisk(3204, ActionGroup.CONFIGURE_VM_STORAGE, QuotaDependency.STORAGE), CloneCinderDisks(3205, ActionGroup.CONFIGURE_VM_STORAGE, QuotaDependency.STORAGE), + RegisterCinderDisk(3206, ActionGroup.CONFIGURE_VM_STORAGE, false, QuotaDependency.NONE), // Host Devices RefreshHostDevices(4000, ActionGroup.MANIPULATE_HOST, false, QuotaDependency.NONE); diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java index 8ac5b34..03bbcc8 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java @@ -128,6 +128,7 @@ VAR__ACTION__SYNC, VAR__ACTION__GET_PUB_KEY, VAR__ACTION__WRITE_PUB_KEYS, + VAR__ACTION__REGISTER, // Host statuses replacements VAR__HOST_STATUS__UP, @@ -1203,6 +1204,7 @@ ACTION_TYPE_FAILED_PROVIDER_NOT_SUPPORTED(ErrorType.NOT_SUPPORTED), ACTION_TYPE_FAILED_CINDER(ErrorType.INTERNAL_ERROR), CANNOT_ADD_CINDER_DISK_VOLUME_LIMIT_EXCEEDED(ErrorType.CONFLICT), + CINDER_DISK_ALREADY_REGISTERED(ErrorType.CONFLICT), NO_HOST_PROVIDER_FOR_SYSTEM(ErrorType.NOT_SUPPORTED); diff --git a/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties b/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties index 9bf07b6..424134a 100644 --- a/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties +++ b/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties @@ -390,6 +390,7 @@ VAR__ACTION__EXTEND_IMAGE_SIZE=$action extend VAR__ACTION__UPDATE_VM_VERSION=$action update version for VAR__ACTION__VOLUME_SNAPSHOT_CONFIG_UPDATE="$action gluster volume snapshot config update" +VAR__ACTION__REGISTER=$action register VAR__HOST_STATUS__UP=$hostStatus Up VAR__HOST_STATUS__UP_MAINTENANCE_OR_NON_OPERATIONAL=$hostStatus Up, Maintenance or Non operational @@ -1401,5 +1402,6 @@ ACTION_TYPE_FAILED_PROVIDER_NOT_SUPPORTED=Cannot ${action} ${type}. The current type ${providerType} is not supported. ACTION_TYPE_FAILED_CINDER=Cannot ${action} ${type}. An error occurred on Cinder - '${cinderException}'. CANNOT_ADD_CINDER_DISK_VOLUME_LIMIT_EXCEEDED=Cannot ${action} ${type}. Maximum number of volumes allowed (${maxTotalVolumes}) exceeded - could not create Cinder disk ${diskAlias}. +CINDER_DISK_ALREADY_REGISTERED=Cannot ${action} ${type}. Cinder disk is already registered (${diskAlias}). NO_HOST_PROVIDER_FOR_SYSTEM=The engine server is not associated with any host provider. 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 300a427..7c8de66 100644 --- a/backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties +++ b/backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties @@ -57,6 +57,8 @@ USER_FAILED_REMOVE_DISK_SNAPSHOT=Failed to delete Disk '${DiskAlias}' from Snapshot(s) ${Snapshots} of VM ${VmName} (User: ${UserName}). USER_REMOVE_DISK_SNAPSHOT_FINISHED_SUCCESS=Disk '${DiskAlias}' from Snapshot(s) '${Snapshots}' of VM '${VmName}' deletion has been completed (User: ${UserName}). USER_REMOVE_DISK_SNAPSHOT_FINISHED_FAILURE=Failed to complete deletion of Disk '${DiskAlias}' from snapshot(s) '${Snapshots}' of VM '${VmName}' (User: ${UserName}). +USER_REGISTER_DISK_FINISHED_SUCCESS=Disk '${DiskAlias}' has been successfully registered as a floating disk. +USER_REGISTER_DISK_FINISHED_FAILURE=Failed to register Disk '${DiskAlias}'. USER_DETACH_USER_FROM_POOL=User ${AdUserName} was detached from VM Pool ${VmPoolName} by ${UserName}. USER_DETACH_USER_FROM_POOL_FAILED=Failed to detach User ${AdUserName} from VM Pool ${VmPoolName} (User: ${UserName}). USER_DETACH_USER_FROM_VM=User ${AdUserName} was detached from VM ${VmName} by ${UserName}. diff --git a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java index 2d1f427..3b36b04 100644 --- a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java +++ b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java @@ -1045,6 +1045,9 @@ @DefaultStringValue("$action sync") String VAR__ACTION__SYNC(); + @DefaultStringValue("$action register") + String VAR__ACTION__REGISTER(); + @DefaultStringValue("$action start profiling") String VAR__ACTION__START_PROFILE(); @@ -3748,6 +3751,9 @@ @DefaultStringValue("Cannot ${action} ${type}. Maximum number of volumes allowed (${maxTotalVolumes}) exceeded - could not create Cinder disk ${diskAlias}.") String CANNOT_ADD_CINDER_DISK_VOLUME_LIMIT_EXCEEDED(); + @DefaultStringValue("Cannot ${action} ${type}. Cinder disk is already registered (${diskAlias}).") + String CINDER_DISK_ALREADY_REGISTERED(); + @DefaultStringValue("The engine server is not associated with any host provider.") String NO_HOST_PROVIDER_FOR_SYSTEM(); } diff --git a/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties b/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties index 97e1f20..b2e7b35 100644 --- a/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties +++ b/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties @@ -341,6 +341,7 @@ VAR__ACTION__SCAN_ALIGNMENT=$action scan alignment VAR__ACTION__EXTEND_IMAGE_SIZE=$action extend VAR__ACTION__UPDATE_VM_VERSION=$action update version for +VAR__ACTION__REGISTER=$action register VAR__HOST_STATUS__UP=$hostStatus Up VAR__HOST_STATUS__UP_MAINTENANCE_OR_NON_OPERATIONAL=$hostStatus Up, Maintenance or Non operational @@ -1095,3 +1096,4 @@ ACTION_TYPE_FAILED_PROVIDER_NOT_SUPPORTED=Cannot ${action} ${type}. The current type ${providerType} is not supported. ACTION_TYPE_FAILED_CINDER=Cannot ${action} ${type}. An error occurred on Cinder - '${cinderException}'. CANNOT_ADD_CINDER_DISK_VOLUME_LIMIT_EXCEEDED=Cannot ${action} ${type}. Maximum number of volumes allowed (${maxTotalVolumes}) exceeded - could not create Cinder disk ${diskAlias}. +CINDER_DISK_ALREADY_REGISTERED=Cannot ${action} ${type}. Cinder disk is already registered (${diskAlias}). diff --git a/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties b/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties index de15003..28d156f 100644 --- a/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties +++ b/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties @@ -391,6 +391,7 @@ VAR__ACTION__EXTEND_IMAGE_SIZE=$action extend VAR__ACTION__UPDATE_VM_VERSION=$action update version for VAR__ACTION__VOLUME_SNAPSHOT_CONFIG_UPDATE="$action gluster volume snapshot config update" +VAR__ACTION__REGISTER=$action register VAR__HOST_STATUS__UP=$hostStatus Up VAR__HOST_STATUS__UP_MAINTENANCE_OR_NON_OPERATIONAL=$hostStatus Up, Maintenance or Non operational @@ -1349,5 +1350,6 @@ ACTION_TYPE_FAILED_PROVIDER_NOT_SUPPORTED=Cannot ${action} ${type}. The current type ${providerType} is not supported. ACTION_TYPE_FAILED_CINDER=Cannot ${action} ${type}. An error occurred on Cinder - '${cinderException}'. CANNOT_ADD_CINDER_DISK_VOLUME_LIMIT_EXCEEDED=Cannot ${action} ${type}. Maximum number of volumes allowed (${maxTotalVolumes}) exceeded - could not create Cinder disk ${diskAlias}. +CINDER_DISK_ALREADY_REGISTERED=Cannot ${action} ${type}. Cinder disk is already registered (${diskAlias}). NO_HOST_PROVIDER_FOR_SYSTEM=The engine server is not associated with any host provider. -- To view, visit https://gerrit.ovirt.org/39652 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Iefb1ecf11d66039bbc4f5080b021b7393f27a0be Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Daniel Erez <de...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches