Liron Ar has uploaded a new change for review. Change subject: core: wip: Introducing ImportVmFromConfigurationCommand ......................................................................
core: wip: Introducing ImportVmFromConfigurationCommand ImportVmFromConfigurationCommand is used for adding a vm to the engine with a configuration specified in an ovf file. The command adds the vm and related devices as specified in the given configuration and then attempts to attach to the vm the related disks. Change-Id: I9390bcc11e5f3cb8c8c89ce791aabe63fe0ca341 Signed-off-by: Liron Aravot <lara...@redhat.com> --- A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ConfigurationType.java A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmFromConfigurationCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/VmDeviceUtils.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/ImportVmFromConfigurationParameters.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/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogDirector.java M backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties M backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties M backend/manager/modules/dal/src/main/resources/bundles/ExecutionMessages.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 14 files changed, 215 insertions(+), 4 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/94/15894/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ConfigurationType.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ConfigurationType.java new file mode 100644 index 0000000..9b922f0 --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ConfigurationType.java @@ -0,0 +1,12 @@ +package org.ovirt.engine.core.bll; + +public enum ConfigurationType { + OVF; + + public static ConfigurationType getConfiugrationType(String type) { + if (type != null && type.equalsIgnoreCase("ovf")) { + return OVF; + } + return null; + } +} diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmFromConfigurationCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmFromConfigurationCommand.java new file mode 100644 index 0000000..6f3a076 --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmFromConfigurationCommand.java @@ -0,0 +1,133 @@ +package org.ovirt.engine.core.bll; + +import org.apache.commons.lang.StringUtils; +import org.ovirt.engine.core.bll.context.CommandContext; +import org.ovirt.engine.core.bll.utils.PermissionSubject; +import org.ovirt.engine.core.common.AuditLogType; +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.VdcActionType; +import org.ovirt.engine.core.common.action.VdcReturnValueBase; +import org.ovirt.engine.core.common.businessentities.Disk; +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.auditloghandling.AuditLogDirector; +import org.ovirt.engine.core.utils.log.Log; +import org.ovirt.engine.core.utils.log.LogFactory; +import org.ovirt.engine.core.utils.ovf.OvfReaderException; + +import java.util.Collection; +import java.util.Collections; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; + +@NonTransactiveCommandAttribute(forceCompensation = true) +public class ImportVmFromConfigurationCommand<T extends ImportVmFromConfigurationParameters> extends CommandBase<T> { + + private static final Log log = LogFactory.getLog(ImportVmFromConfigurationCommand.class); + + protected ImportVmFromConfigurationCommand(Guid commandId) { + super(commandId); + } + + public ImportVmFromConfigurationCommand(T parameters) { + super(parameters); + setCommandShouldBeLogged(false); + setVdsGroupId(getParameters().getVdsGroupId()); + } + + @Override + public boolean canDoAction() { + ConfigurationType configType = ConfigurationType.getConfiugrationType(getParameters().getConfigurationType()); + if (configType == null) { + return failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_UNSUPPORTED_CONFIGURATION_TYPE); + } + + if (getVmFromConfiguration(configType) == null) { + return failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_ERROR_PARSING_CONFIGURATION); + } + + getVm().getStaticData().setVdsGroupId(getParameters().getVdsGroupId()); + return true; + } + + @Override + public void executeCommand() { + Collection<Disk> vmDisksToAttach = getVm().getDiskMap().values(); + clearVmDisks(); + + ImportVmParameters importParams = + new ImportVmParameters(getVm(), + Guid.Empty, + Guid.Empty, + getVdsGroup().getStoragePoolId().getValue(), + getVdsGroup().getId()); + importParams.setVm(getVm()); + importParams.setVdsGroupId(getParameters().getVdsGroupId()); + VdcReturnValueBase returnVal = getBackend().runInternalAction(VdcActionType.ImportVm, importParams, new CommandContext(getCompensationContext())); + + if (returnVal.getSucceeded() && !vmDisksToAttach.isEmpty()) { + AuditLogDirector.log(this, attemptToAttachDisksToImportedVm(vmDisksToAttach)); + } + + setActionReturnValue(getVm().getId()); + setSucceeded(returnVal.getSucceeded()); + } + + private void clearVmDisks(){ + getVm().setDiskMap(Collections.<Guid, Disk> emptyMap()); + getVm().getImages().clear(); + getVm().getDiskList().clear(); + } + + @Override + public List<PermissionSubject> getPermissionCheckSubjects() { + return Collections.emptyList(); + } + + @Override + public Map<String, String> getJobMessageProperties() { + return Collections.emptyMap(); + } + + private AuditLogType attemptToAttachDisksToImportedVm(Collection<Disk> disks){ + List<String> failedDisks = new LinkedList<>(); + for (Disk disk : disks) { + AttachDettachVmDiskParameters params = new AttachDettachVmDiskParameters(getVm().getId(), disk.getId(), disk.getPlugged()); + VdcReturnValueBase returnVal = getBackend().runInternalAction(VdcActionType.AttachDiskToVm, params); + if (!returnVal.getSucceeded()) { + failedDisks.add(disk.getDiskAlias()); + } + } + + if (!failedDisks.isEmpty()) { + this.addCustomValue("DiskAliases", StringUtils.join(failedDisks, ",")); + return AuditLogType.VM_IMPORT_FROM_CONFIGURATION_ATTACH_DISKS_FAILED; + } + + return AuditLogType.VM_IMPORT_FROM_CONFIGURATION_EXECUTED_SUCCESFULLY; + } + + protected VM getVmFromConfiguration(ConfigurationType configurationType) { + if (getVm() == null) { + if (ConfigurationType.OVF.equals(configurationType)) { + OvfManager ovfManager = new OvfManager(); + try { + setVm(ovfManager.readVmFromOvf(getParameters().getVmConfiguration())); + } catch (OvfReaderException e) { + log.debug("failed to parse a given ovf file", e); + return null; + } + } + } + return getVm(); + } + + @Override + protected boolean isUserAuthorizedToRunAction() { + return true; + } +} diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/VmDeviceUtils.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/VmDeviceUtils.java index 219d717..65edde1 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/VmDeviceUtils.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/VmDeviceUtils.java @@ -420,20 +420,33 @@ * adds imported VM or Template devices * @param entity */ - public static <T extends VmBase> void addImportedDevices(T entity, boolean isImportAsNewEntity) { + public static <T extends VmBase> void addImportedDevices(T entity, boolean isImportAsNewEntity, boolean addDisks, boolean addInterfaces, boolean addOtherDevices) { if (isImportAsNewEntity) { setNewIdInImportedCollections(entity); } List<VmDevice> vmDeviceToAdd = new ArrayList<VmDevice>(); List<VmDevice> vmDeviceToUpdate = new ArrayList<VmDevice>(); VmDeviceDAO dao = DbFacade.getInstance().getVmDeviceDao(); - addImportedDisks(entity, vmDeviceToUpdate); - addImportedInterfaces(entity, vmDeviceToUpdate); - addOtherDevices(entity, vmDeviceToAdd); + + if (addDisks) { + addImportedDisks(entity, vmDeviceToUpdate); + } + + if (addInterfaces) { + addImportedInterfaces(entity, vmDeviceToUpdate); + } + + if (addOtherDevices) { + addOtherDevices(entity, vmDeviceToAdd); + } dao.saveAll(vmDeviceToAdd); dao.updateAll(vmDeviceToUpdate); } + public static <T extends VmBase> void addImportedDevices(T entity, boolean isImportAsNewEntity) { + addImportedDevices(entity, isImportAsNewEntity, true, true, true); + } + public static void setVmDevices(VmBase vmBase) { Map<Guid, VmDevice> vmManagedDeviceMap = new HashMap<Guid, VmDevice>(); List<VmDevice> devices = DbFacade.getInstance().getVmDeviceDao().getVmDeviceByVmId(vmBase.getId()); 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 4e57c21..8dde174 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 @@ -371,6 +371,8 @@ VM_PAUSED_EIO(145), VM_PAUSED_EPERM(146), VM_POWER_DOWN_FAILED(147), + VM_IMPORT_FROM_CONFIGURATION_EXECUTED_SUCCESFULLY(148), + VM_IMPORT_FROM_CONFIGURATION_ATTACH_DISKS_FAILED(149), USER_ADD_VM_POOL(300), USER_ADD_VM_POOL_FAILED(301), 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..0bdd2f7 --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/ImportVmFromConfigurationParameters.java @@ -0,0 +1,31 @@ +package org.ovirt.engine.core.common.action; + +import org.ovirt.engine.core.compat.Guid; + +public class ImportVmFromConfigurationParameters extends ImportVmParameters{ + + private String vmConfiguration; + private String configurationType; + + public ImportVmFromConfigurationParameters(String configurationType, String vmConfiguration, Guid vdsGroupId) { + super(); + this.configurationType = configurationType; + this.vmConfiguration = vmConfiguration; + setVdsGroupId(vdsGroupId); + } + + public String getConfigurationType() { + return configurationType; + } + + public void setConfigurationType(String configurationType) { + this.configurationType = configurationType; + } + + public String getVmConfiguration() { + return vmConfiguration; + } + public void setVmConfiguration(String vmConfiguration) { + this.vmConfiguration = vmConfiguration; + } +} 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 953aaf1..4d02ace 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 @@ -48,6 +48,7 @@ CancelMigrateVm(41, ActionGroup.MIGRATE_VM, false, QuotaDependency.NONE), ActivateDeactivateVmNic(42, QuotaDependency.NONE), AddVmFromSnapshot(52, ActionGroup.CREATE_VM, QuotaDependency.BOTH), + ImportVmFromConfiguration(43, ActionGroup.IMPORT_EXPORT_VM, QuotaDependency.NONE), // VdsCommands AddVds(101, ActionGroup.CREATE_HOST, QuotaDependency.NONE), UpdateVds(102, ActionGroup.EDIT_HOST_CONFIGURATION, 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 3933949..0f7eebb 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 @@ -272,6 +272,8 @@ VM_CANNOT_RUN_FROM_DISK_WITHOUT_DISK(ErrorType.CONFLICT), VM_CANNOT_RUN_STATELESS_WHILE_IN_PREVIEW(ErrorType.CONFLICT), VM_CANNOT_RUN_STATELESS_HA(ErrorType.CONFLICT), + ACTION_TYPE_FAILED_ERROR_PARSING_CONFIGURATION(ErrorType.CONFLICT), + ACTION_TYPE_FAILED_UNSUPPORTED_CONFIGURATION_TYPE(ErrorType.CONFLICT), VM_CANNOT_IMPORT_VM_EXISTS(ErrorType.CONFLICT), VM_CANNOT_IMPORT_VM_NAME_EXISTS(ErrorType.CONFLICT), VM_CANNOT_SUSPEND_STATELESS_VM(ErrorType.CONFLICT), 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 0f2c466..d79701b 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 @@ -681,6 +681,8 @@ severities.put(AuditLogType.IMPORTEXPORT_FAILED_TO_IMPORT_TEMPLATE, AuditLogSeverity.WARNING); severities.put(AuditLogType.IMPORTEXPORT_IMPORT_VM_INVALID_INTERFACES, AuditLogSeverity.WARNING); severities.put(AuditLogType.IMPORTEXPORT_IMPORT_TEMPLATE_INVALID_INTERFACES, AuditLogSeverity.NORMAL); + severities.put(AuditLogType.VM_IMPORT_FROM_CONFIGURATION_EXECUTED_SUCCESFULLY, AuditLogSeverity.NORMAL); + severities.put(AuditLogType.VM_IMPORT_FROM_CONFIGURATION_ATTACH_DISKS_FAILED, AuditLogSeverity.WARNING); } private static void initNetworkSeverities() { 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 054bce0..e4c04fc 100644 --- a/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties +++ b/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties @@ -40,6 +40,8 @@ -Use the Run-Once command to select a different boot option and rerun the VM. VM_CANNOT_RUN_STATELESS_WHILE_IN_PREVIEW=Cannot ${action} ${type}. Stateless flag on VM conflicts with running the VM in Preview mode. Either remove the Stateless flag from the VM or run the VM not in Preview mode. VM_CANNOT_RUN_STATELESS_HA=Cannot ${action} ${type}. Highly Available Virtual servers can not be run as stateless. +ACTION_TYPE_FAILED_ERROR_PARSING_CONFIGURATION="Cannot ${action} ${type}. Failed to parse the given configuration." +ACTION_TYPE_FAILED_UNSUPPORTED_CONFIGURATION_TYPE="Cannot ${action} ${type}. The given configuration type '${configurationType}' isn't supported." ACTION_TYPE_FAILED_DELETE_PROTECTION_ENABLED=Cannot ${action} ${type}. Delete protection is enabled. In order to delete, disable Delete protection first. RESOURCE_MANAGER_FAILED_ATTACHING_VM_TO_USERS=Failed to attach VM to User. RESOURCE_MANAGER_MIGRATING_VM_IS_NOT_UP=Migration failed, VM is not running. 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 84eeda0..a91479f 100644 --- a/backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties +++ b/backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties @@ -301,6 +301,8 @@ VM_PAUSED_EIO=VM ${VmName} has paused due to storage I/O problem. VM_PAUSED_EPERM=VM ${VmName} has paused due to storage permissions problem. VM_POWER_DOWN_FAILED=Shutdown of VM ${VmName} failed. +VM_IMPORT_FROM_CONFIGURATION_EXECUTED_SUCCESFULLY=VM ${VmName} has been successfully imported from the given configuration. +VM_IMPORT_FROM_CONFIGURATION_ATTACH_DISKS_FAILED=Failed to attach to VM ${VmName} the following disk(s): ${DiskAliases}, please refer to the engine log for the failure reason for each disk. VDS_INSTALL=Host ${VdsName} installed VDS_INSTALL_FAILED=Host ${VdsName} installation failed. ${FailedInstallMessage}. VDS_INITIALIZING=Host ${VdsName} is initializing. Message: ${ErrorMessage} diff --git a/backend/manager/modules/dal/src/main/resources/bundles/ExecutionMessages.properties b/backend/manager/modules/dal/src/main/resources/bundles/ExecutionMessages.properties index a760995..f45a8d5 100644 --- a/backend/manager/modules/dal/src/main/resources/bundles/ExecutionMessages.properties +++ b/backend/manager/modules/dal/src/main/resources/bundles/ExecutionMessages.properties @@ -21,6 +21,7 @@ job.AddDisk=Adding Disk ${DiskAlias} job.RemoveDisk=Removing Disk ${DiskAlias} job.ImportVm=Importing VM ${VM} to Cluster ${VdsGroups} +job.ImportVmFromConfiguration=Importing VM ${VM} from configuration to Cluster ${VdsGroups} job.RemoveVmFromImportExport=Removing VM ${VM} image from Storage Domain ${Storage} job.RemoveVmTemplateFromImportExport=Removing VM Template ${VmTemplate} image from Storage Domain ${Storage} job.ImportVmTemplate=Importing VM Template ${VmTemplate} to Data Center ${StoragePool} 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 6223557..2a9e912 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 @@ -91,6 +91,12 @@ @DefaultStringValue("Cannot ${action} ${type}. Highly Available Virtual servers can not be run as stateless.") String VM_CANNOT_RUN_STATELESS_HA(); + @DefaultStringValue("Cannot ${action} ${type}. Failed to parse the given configuration.") + String ACTION_TYPE_FAILED_ERROR_PARSING_CONFIGURATION(); + + @DefaultStringValue("Cannot ${action} ${type}. The given configuration type '${configurationType}' isn't supported.") + String ACTION_TYPE_FAILED_UNSUPPORTED_CONFIGURATION_TYPE(); + @DefaultStringValue("Cannot ${action} ${type}. Delete protection is enabled. In order to delete, disable Delete protection first.") String ACTION_TYPE_FAILED_DELETE_PROTECTION_ENABLED(); 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 0924009..acb8907 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 @@ -40,6 +40,8 @@ -Use the Run-Once command to select a different boot option and rerun the VM. VM_CANNOT_RUN_STATELESS_WHILE_IN_PREVIEW=Cannot ${action} ${type}. Stateless flag on VM conflicts with running the VM in Preview mode. Either remove the Stateless flag from the VM or run the VM not in Preview mode. VM_CANNOT_RUN_STATELESS_HA=Cannot ${action} ${type}. Highly Available Virtual servers can not be run as stateless. +ACTION_TYPE_FAILED_ERROR_PARSING_CONFIGURATION="Cannot ${action} ${type}. Failed to parse the given configuration." +ACTION_TYPE_FAILED_UNSUPPORTED_CONFIGURATION_TYPE="Cannot ${action} ${type}. The given configuration type '${configurationType}' isn't supported." ACTION_TYPE_FAILED_DELETE_PROTECTION_ENABLED=Cannot ${action} ${type}. Delete protection is enabled. In order to delete, disable Delete protection first. RESOURCE_MANAGER_FAILED_ATTACHING_VM_TO_USERS=Failed to attach VM to User. RESOURCE_MANAGER_MIGRATING_VM_IS_NOT_UP=Migration failed, VM is not running. 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 5cff21a..f1eff79 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 @@ -40,6 +40,8 @@ -Use the Run-Once command to select a different boot option and rerun the VM. VM_CANNOT_RUN_STATELESS_WHILE_IN_PREVIEW=Cannot ${action} ${type}. Stateless flag on VM conflicts with running the VM in Preview mode. Either remove the Stateless flag from the VM or run the VM not in Preview mode. VM_CANNOT_RUN_STATELESS_HA=Cannot ${action} ${type}. Highly Available Virtual servers can not be run as stateless. +ACTION_TYPE_FAILED_ERROR_PARSING_CONFIGURATION="Cannot ${action} ${type}. Failed to parse the given configuration." +ACTION_TYPE_FAILED_UNSUPPORTED_CONFIGURATION_TYPE="Cannot ${action} ${type}. The given configuration type '${configurationType}' isn't supported." ACTION_TYPE_FAILED_DELETE_PROTECTION_ENABLED=Cannot ${action} ${type}. Delete protection is enabled. In order to delete, disable Delete protection first. RESOURCE_MANAGER_FAILED_ATTACHING_VM_TO_USERS=Failed to attach VM to User. RESOURCE_MANAGER_MIGRATING_VM_IS_NOT_UP=Migration failed, VM is not running. -- To view, visit http://gerrit.ovirt.org/15894 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I9390bcc11e5f3cb8c8c89ce791aabe63fe0ca341 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Liron Ar <lara...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches