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