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

Reply via email to