Maor Lipchuk has uploaded a new change for review.

Change subject: core: Adding a new command for register VMs
......................................................................

core: Adding a new command for register VMs

Adding a bll command to register an unregistered VM to a cluster.
Also adding a parameter class.

WIP : Tests should be added

Change-Id: I5ee64651eb614feb6ac9d7fde88a4ee6348aff06
Signed-off-by: Maor Lipchuk <mlipc...@redhat.com>
---
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RegisterVMToClusterCommand.java
A 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/ImportVmFromConfigurationParameters.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java
3 files changed, 137 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/47/27247/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RegisterVMToClusterCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RegisterVMToClusterCommand.java
new file mode 100644
index 0000000..91bf5c3
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RegisterVMToClusterCommand.java
@@ -0,0 +1,99 @@
+package org.ovirt.engine.core.bll;
+
+import java.util.Collection;
+
+import org.ovirt.engine.core.bll.job.ExecutionHandler;
+import org.ovirt.engine.core.bll.storage.StorageDomainCommandBase;
+import org.ovirt.engine.core.bll.validator.StorageDomainValidator;
+import org.ovirt.engine.core.common.action.AttachDettachVmDiskParameters;
+import org.ovirt.engine.core.common.action.ImportVmFromConfigurationParameters;
+import org.ovirt.engine.core.common.action.ImportVmParameters;
+import org.ovirt.engine.core.common.action.RegisterDiskParameters;
+import org.ovirt.engine.core.common.action.VdcActionType;
+import org.ovirt.engine.core.common.action.VdcReturnValueBase;
+import org.ovirt.engine.core.common.businessentities.Disk;
+import org.ovirt.engine.core.common.businessentities.Disk.DiskStorageType;
+import org.ovirt.engine.core.common.businessentities.DiskImage;
+import org.ovirt.engine.core.common.businessentities.OvfEntityData;
+import org.ovirt.engine.core.common.businessentities.VM;
+import org.ovirt.engine.core.common.errors.VdcBllMessages;
+import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.dal.dbbroker.DbFacade;
+import org.ovirt.engine.core.dao.UnregisteredOVFDataDAO;
+import org.ovirt.engine.core.utils.ovf.OvfReaderException;
+
+public class RegisterVMToClusterCommand<T extends 
ImportVmFromConfigurationParameters> extends StorageDomainCommandBase<T> {
+    private Collection<Disk> vmDisksToRegister;
+    private VM vmFromConfiguration;
+    protected RegisterVMToClusterCommand(Guid commandId) {
+        super(commandId);
+    }
+
+    public RegisterVMToClusterCommand(T parameters) {
+        super(parameters);
+        setCommandShouldBeLogged(false);
+    }
+
+    @Override
+    protected boolean canDoAction() {
+        if (!validate(new 
StorageDomainValidator(getStorageDomain()).isDomainExistAndActive())) {
+            // TODO: Find a CDA message
+            return false;
+        }
+
+        if (!getStorageDomain().getStorageDomainType().isDataDomain()) {
+            addCanDoActionMessage("$domainId " + 
getParameters().getStorageDomainId());
+            addCanDoActionMessage("$domainType " + 
getStorageDomain().getStorageDomainType());
+            
addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_STORAGE_DOMAIN_TYPE_UNSUPPORTED);
+            return false;
+        }
+
+        OvfEntityData ovfEntityData = 
getUnregisteredOVFDataDao().getByVmId(getParameters().getVmId());
+        OvfHelper ovfHelper = new OvfHelper();
+        try {
+            vmFromConfiguration = 
ovfHelper.readVmFromOvf(ovfEntityData.getOvfData());
+            vmDisksToRegister = vmFromConfiguration.getDiskMap().values();
+        } catch (OvfReaderException e) {
+            log.errorFormat("failed to parse a given ovf configuration: \n" + 
ovfEntityData.getOvfData(), e);
+            
//addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_UNSUPPORTED_OVF);
+            return false;
+        }
+
+        for (Disk disk : vmDisksToRegister) {
+            // Currently this only supports importing images and does not work 
with luns.
+            if (disk.getDiskStorageType() != DiskStorageType.IMAGE) {
+                addCanDoActionMessage("$diskId " + disk.getId());
+                addCanDoActionMessage("$storageType " + 
disk.getDiskStorageType());
+                
addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_UNSUPPORTED_DISK_STORAGE_TYPE);
+                return false;
+            }
+        }
+        return true;
+    }
+
+    @Override
+    protected void executeCommand() {
+            for (Disk disk : vmDisksToRegister) {
+                AttachDettachVmDiskParameters params = new 
AttachDettachVmDiskParameters(getVm().getId(),
+                        disk.getId(), disk.getPlugged(), disk.getReadOnly());
+                RegisterDiskParameters registerDiskParams =
+                        new RegisterDiskParameters((DiskImage) disk, 
getParameters().getStorageDomainId());
+                getBackend().runInternalAction(VdcActionType.RegisterDisk,
+                        registerDiskParams,
+                        
ExecutionHandler.createDefaultContexForTasks(getExecutionContext()));
+            }
+
+            ImportVmParameters parameters = new ImportVmParameters();
+            parameters.setVm(vmFromConfiguration);
+            parameters.setVdsGroupId(getParameters().getVdsGroupId());
+            VdcReturnValueBase result =
+                    
getBackend().runInternalAction(VdcActionType.ImportVmFromConfiguration,
+                            parameters,
+                            
ExecutionHandler.createDefaultContexForTasks(getExecutionContext()));
+            // TODO: Remove the OVF if succeed
+    }
+
+    protected static UnregisteredOVFDataDAO getUnregisteredOVFDataDao() {
+        return DbFacade.getInstance().getUnregisteredOVFDataDao();
+    }
+}
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/ImportVmFromConfigurationParameters.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/ImportVmFromConfigurationParameters.java
new file mode 100644
index 0000000..d253342
--- /dev/null
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/ImportVmFromConfigurationParameters.java
@@ -0,0 +1,37 @@
+package org.ovirt.engine.core.common.action;
+
+import java.io.Serializable;
+
+import org.ovirt.engine.core.compat.Guid;
+
+public class ImportVmFromConfigurationParameters extends 
StorageDomainParametersBase implements Serializable {
+
+    private static final long serialVersionUID = -7202189901604706014L;
+    private Guid vmId;
+    private Guid vdsGroupId;
+
+    public ImportVmFromConfigurationParameters() {
+    }
+
+    public ImportVmFromConfigurationParameters(Guid vmId, Guid vdsGroupId) {
+        this.vmId = vmId;
+        this.vdsGroupId = vdsGroupId;
+    }
+
+    public Guid getVmId() {
+        return vmId;
+    }
+
+    public void setVmId(Guid vmId) {
+        this.vmId = vmId;
+    }
+
+    public Guid getVdsGroupId() {
+        return vdsGroupId;
+    }
+
+    public void setVdsGroupId(Guid vdsGroupId) {
+        this.vdsGroupId = vdsGroupId;
+    }
+
+}
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 872b6c5..39101e8 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
@@ -54,6 +54,7 @@
     CloneVm(53, ActionGroup.CREATE_VM, QuotaDependency.BOTH),
     ImportVmFromConfiguration(43, ActionGroup.IMPORT_EXPORT_VM, 
QuotaDependency.NONE),
     UpdateVmVersion(44, QuotaDependency.NONE),
+    RegisterVMToCluster(45, ActionGroup.IMPORT_EXPORT_VM, 
QuotaDependency.NONE),
     // VdsCommands
     AddVds(101, ActionGroup.CREATE_HOST, QuotaDependency.NONE),
     UpdateVds(102, ActionGroup.EDIT_HOST_CONFIGURATION, false, 
QuotaDependency.NONE),


-- 
To view, visit http://gerrit.ovirt.org/27247
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I5ee64651eb614feb6ac9d7fde88a4ee6348aff06
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Maor Lipchuk <mlipc...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to