Oved Ourfali has uploaded a new change for review. Change subject: core: importing external and hosted-engine VMs to the engine ......................................................................
core: importing external and hosted-engine VMs to the engine This patch adds two new origin types: 1. Hosted engine - VMs that were created by the hosted-engine setup. 2. External - VMs that run on the engine hosts, but weren't created by any oVirt project Change-Id: Ic00289a53aba6db5c6fe0364101e407178a48158 Signed-off-by: Oved Ourfali <oourf...@redhat.com> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddDiskCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AttachDiskToVmCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CancelMigrateVmCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ChangeDiskCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ChangeVMClusterCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/DetachDiskFromVmCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/HibernateVmCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/HotPlugDiskToVmCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MigrateVmCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/PauseVmCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveSnapshotCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveVmCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RestoreAllSnapshotsCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/SetVmTicketCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/StopVmCommandBase.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmDiskCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsEventListener.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmHandler.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmLogonCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/ActivateDeactivateVmNicCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/AddVmInterfaceCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/RemoveVmInterfaceCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/UpdateVmInterfaceCommand.java M backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommandTest.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/IVdsEventListener.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/OriginType.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/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfo.java M frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java M frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Enums.java M frontend/webadmin/modules/uicompat/src/main/resources/org/ovirt/engine/ui/uicompat/Enums.properties 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 38 files changed, 267 insertions(+), 6 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/93/17993/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddDiskCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddDiskCommand.java index 0a8842a..81eeb84 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddDiskCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddDiskCommand.java @@ -88,6 +88,10 @@ VM vm = getVm(); if (vm != null) { + if (!canRunActionOnNonManagedVm()) { + return false; + } + updateDisksFromDb(); // if user sent drive check that its not in use if (!isDiskCanBeAddedToVm(getParameters().getDiskInfo(), vm) || diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AttachDiskToVmCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AttachDiskToVmCommand.java index 32db917..0c1c092 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AttachDiskToVmCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AttachDiskToVmCommand.java @@ -74,6 +74,10 @@ return false; } + if (!canRunActionOnNonManagedVm()) { + return false; + } + updateDisksFromDb(); if (!isDiskCanBeAddedToVm(disk, getVm()) || !isDiskPassPciAndIdeLimit(disk)) { return false; diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CancelMigrateVmCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CancelMigrateVmCommand.java index 282cfc7..2abc4ee 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CancelMigrateVmCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CancelMigrateVmCommand.java @@ -38,6 +38,11 @@ addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_VM_NOT_EXIST); return false; } + + if (!canRunActionOnNonManagedVm()) { + return false; + } + if (getVm().getStatus() != VMStatus.MigratingFrom) { addCanDoActionMessage(VdcBllMessages.VM_CANNOT_CANCEL_MIGRATION_WHEN_VM_IS_NOT_MIGRATING); return false; diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ChangeDiskCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ChangeDiskCommand.java index f28443e..c455861 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ChangeDiskCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ChangeDiskCommand.java @@ -24,7 +24,16 @@ @Override protected boolean canDoAction() { boolean retValue = true; - if (!getVm().isRunningOrPaused()) { + if (getVm() == null) { + addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_VM_NOT_EXIST); + retValue = false; + } + + if (retValue && !canRunActionOnNonManagedVm()) { + retValue = false; + } + + if (retValue && !getVm().isRunningOrPaused()) { setSucceeded(false); retValue = false; addCanDoActionMessage(VdcBllMessages.VAR__TYPE__VM); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ChangeVMClusterCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ChangeVMClusterCommand.java index 6371b72..920f867 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ChangeVMClusterCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ChangeVMClusterCommand.java @@ -40,6 +40,11 @@ addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_VM_NOT_EXIST); return false; } else { + + if (!canRunActionOnNonManagedVm()) { + return false; + } + if (ObjectIdentityChecker.CanUpdateField(vm, "vdsGroupId", vm.getStatus())) { targetCluster = DbFacade.getInstance().getVdsGroupDao().get(getParameters().getClusterId()); if (targetCluster == null) { diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommand.java index 06c1a5f..d375ab4 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommand.java @@ -411,6 +411,16 @@ @Override protected boolean canDoAction() { + + if (getVm() == null) { + addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_VM_NOT_EXIST); + return false; + } + + if (!canRunActionOnNonManagedVm()) { + return false; + } + // Initialize validators. VmValidator vmValidator = createVmValidator(); SnapshotsValidator snapshotValidator = createSnapshotValidator(); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/DetachDiskFromVmCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/DetachDiskFromVmCommand.java index cd83378..661d34f 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/DetachDiskFromVmCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/DetachDiskFromVmCommand.java @@ -24,6 +24,10 @@ @Override protected boolean canDoAction() { boolean retValue = isVmExist(); + if (retValue) { + retValue = canRunActionOnNonManagedVm(); + } + if (retValue && getVm().getStatus() != VMStatus.Up && getVm().getStatus() != VMStatus.Down) { retValue = false; addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_VM_STATUS_ILLEGAL); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/HibernateVmCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/HibernateVmCommand.java index c81908e..a4ee64c 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/HibernateVmCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/HibernateVmCommand.java @@ -234,6 +234,11 @@ if (getVm() == null) { return failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_VM_NOT_FOUND); } + + if (!canRunActionOnNonManagedVm()) { + return false; + } + VMStatus vmStatus = getVm().getStatus(); if (vmStatus == VMStatus.WaitForLaunch || vmStatus == VMStatus.NotResponding) { return failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_VM_STATUS_ILLEGAL); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/HotPlugDiskToVmCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/HotPlugDiskToVmCommand.java index 6ab31de..00096dc 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/HotPlugDiskToVmCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/HotPlugDiskToVmCommand.java @@ -45,6 +45,7 @@ return isVmExist() && isVmInUpPausedDownStatus() && + canRunActionOnNonManagedVm() && isDiskExist(disk) && checkCanPerformPlugUnPlugDisk() && isVmNotInPreviewSnapshot() && diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MigrateVmCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MigrateVmCommand.java index 6b6774d..b58b2fe 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MigrateVmCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MigrateVmCommand.java @@ -243,6 +243,11 @@ if (vm == null) { return failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_VM_NOT_FOUND); } + + if (!canRunActionOnNonManagedVm()) { + return false; + } + // If VM is pinned to host, no migration can occur if (vm.getMigrationSupport() == MigrationSupport.PINNED_TO_HOST) { return failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_VM_IS_PINNED_TO_HOST); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/PauseVmCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/PauseVmCommand.java index 9228cc4..9e70525 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/PauseVmCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/PauseVmCommand.java @@ -33,15 +33,22 @@ return getSucceeded() ? AuditLogType.USER_PAUSE_VM : AuditLogType.USER_FAILED_PAUSE_VM; } - public static boolean CanPauseVm(Guid vmId, java.util.ArrayList<String> message) { + public boolean CanPauseVm(Guid vmId, java.util.ArrayList<String> message) { boolean retValue = true; VM vm = DbFacade.getInstance().getVmDao().get(vmId); if (vm == null) { retValue = false; message.add(VdcBllMessages.ACTION_TYPE_FAILED_VM_NOT_FOUND.toString()); } else { - if (vm.getStatus() == VMStatus.WaitForLaunch || vm.getStatus() == VMStatus.MigratingFrom - || vm.getStatus() == VMStatus.NotResponding) { + + ValidationResult nonManagedVmValidationResult = VmHandler.canRunActionOnNonManagedVm(getVm(), this.getActionType()); + if (!nonManagedVmValidationResult.isValid()) { + message.add(nonManagedVmValidationResult.getMessage().toString()); + retValue = false; + } + + if (retValue && (vm.getStatus() == VMStatus.WaitForLaunch || vm.getStatus() == VMStatus.MigratingFrom + || vm.getStatus() == VMStatus.NotResponding)) { retValue = false; message.add(VdcBllMessages.ACTION_TYPE_FAILED_VM_STATUS_ILLEGAL.toString()); } else if (!vm.isRunning()) { diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveSnapshotCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveSnapshotCommand.java index 32bb5f8..7e3992e 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveSnapshotCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveSnapshotCommand.java @@ -198,6 +198,14 @@ protected boolean canDoAction() { initializeObjectState(); + if (getVm() == null) { + return failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_VM_NOT_FOUND); + } + + if (!canRunActionOnNonManagedVm()) { + return false; + } + if (!validate(new StoragePoolValidator(getStoragePool()).isUp()) || !validateVmNotDuringSnapshot() || !validateVmNotInPreview() || diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveVmCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveVmCommand.java index ba35b6d..ef4ab02 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveVmCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RemoveVmCommand.java @@ -122,6 +122,10 @@ return failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_VM_NOT_FOUND); } + if (!canRunActionOnNonManagedVm()) { + return false; + } + if (getVm().isDeleteProtected()) { return failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_DELETE_PROTECTION_ENABLED); } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RestoreAllSnapshotsCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RestoreAllSnapshotsCommand.java index badac89..c59935f 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RestoreAllSnapshotsCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RestoreAllSnapshotsCommand.java @@ -312,6 +312,14 @@ @Override protected boolean canDoAction() { + if (getVm() == null) { + return failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_VM_NOT_FOUND); + } + + if (!canRunActionOnNonManagedVm()) { + return false; + } + if (Guid.Empty.equals(getParameters().getDstSnapshotId())) { return failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_CORRUPTED_VM_SNAPSHOT_ID); } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java index 09db8f9..4e7f59d 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java @@ -761,6 +761,10 @@ return failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_VM_NOT_FOUND); } + if (!canRunActionOnNonManagedVm()) { + return false; + } + if (vm.getStatus() == VMStatus.Paused) { // if VM is paused, it was already checked before that it is capable to run return true; diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/SetVmTicketCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/SetVmTicketCommand.java index def8c88..853bc83 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/SetVmTicketCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/SetVmTicketCommand.java @@ -95,6 +95,10 @@ return false; } + if (!canRunActionOnNonManagedVm()) { + return false; + } + // Check that the virtual machine is in state that allows connections // to the console: final VMStatus status = vm.getStatus(); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/StopVmCommandBase.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/StopVmCommandBase.java index fa90ef5..e0a44c8 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/StopVmCommandBase.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/StopVmCommandBase.java @@ -49,6 +49,10 @@ return failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_VM_NOT_FOUND); } + if (!canRunActionOnNonManagedVm()) { + return false; + } + if (!getVm().isRunning() && getVm().getStatus() != VMStatus.Paused && getVm().getStatus() != VMStatus.NotResponding && getVm().getStatus() != VMStatus.Suspended) { return failCanDoAction( diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmCommand.java index d187571..a23b744 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmCommand.java @@ -219,6 +219,10 @@ return false; } + if (!canRunActionOnNonManagedVm()) { + return false; + } + if (StringUtils.isEmpty(vmFromParams.getName())) { addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_NAME_MAY_NOT_BE_EMPTY); return false; diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmDiskCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmDiskCommand.java index 2b8b908..20d8134 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmDiskCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmDiskCommand.java @@ -118,6 +118,10 @@ return false; } + if (!canRunActionOnNonManagedVm()) { + return false; + } + List<VM> vmsDiskPluggedTo = getVmsDiskPluggedTo(); if (vmsDiskPluggedTo != null && !vmsDiskPluggedTo.isEmpty()) { // only virtual drive size can be updated when VMs is running diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsEventListener.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsEventListener.java index 20e87f9..7935dbc 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsEventListener.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsEventListener.java @@ -15,6 +15,7 @@ import org.ovirt.engine.core.bll.job.ExecutionHandler; import org.ovirt.engine.core.bll.storage.StoragePoolStatusHandler; import org.ovirt.engine.core.common.AuditLogType; +import org.ovirt.engine.core.common.action.AddVmFromScratchParameters; import org.ovirt.engine.core.common.action.FenceVdsActionParameters; import org.ovirt.engine.core.common.action.HostStoragePoolParametersBase; import org.ovirt.engine.core.common.action.MigrateVmToServerParameters; @@ -309,6 +310,17 @@ } @Override + public void addExternallyManagedVms(List<VmStatic> externalVmList) { + for (VmStatic currVm : externalVmList) { + AddVmFromScratchParameters params = new AddVmFromScratchParameters(currVm, null, null); + VdcReturnValueBase returnValue = Backend.getInstance().runInternalAction(VdcActionType.AddVmFromScratch, params, ExecutionHandler.createInternalJobContext()); + if (!returnValue.getSucceeded()) { + log.debugFormat("Failed adding Externally managed VM {0}", currVm.getName()); + } + } + } + + @Override public void rerun(Guid vmId) { final IVdsAsyncCommand command = Backend.getInstance().getResourceManager().GetAsyncCommandForVm(vmId); if (command != null) { diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmCommand.java index 9ab8da8..a2ebb46 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmCommand.java @@ -460,4 +460,13 @@ } return returnValue; } + + protected boolean canRunActionOnNonManagedVm() { + ValidationResult nonManagedVmValidationResult = VmHandler.canRunActionOnNonManagedVm(getVm(), this.getActionType()); + if (!nonManagedVmValidationResult.isValid()) { + return failCanDoAction(nonManagedVmValidationResult.getMessage()); + } + return true; + } + } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmHandler.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmHandler.java index bb3002d..9cbec43 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmHandler.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmHandler.java @@ -2,8 +2,10 @@ import java.util.Arrays; import java.util.Collections; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; import org.apache.commons.lang.StringUtils; import org.ovirt.engine.core.bll.context.CompensationContext; @@ -11,12 +13,14 @@ import org.ovirt.engine.core.bll.validator.StorageDomainValidator; import org.ovirt.engine.core.bll.validator.VmValidationUtils; import org.ovirt.engine.core.common.FeatureSupported; +import org.ovirt.engine.core.common.action.VdcActionType; import org.ovirt.engine.core.common.backendinterfaces.BaseHandler; import org.ovirt.engine.core.common.businessentities.Disk; import org.ovirt.engine.core.common.businessentities.DiskImage; import org.ovirt.engine.core.common.businessentities.DisplayType; import org.ovirt.engine.core.common.businessentities.EditableField; import org.ovirt.engine.core.common.businessentities.EditableOnVmStatusField; +import org.ovirt.engine.core.common.businessentities.OriginType; import org.ovirt.engine.core.common.businessentities.StorageDomain; import org.ovirt.engine.core.common.businessentities.StorageDomainStatus; import org.ovirt.engine.core.common.businessentities.StorageDomainType; @@ -59,6 +63,7 @@ private static final Log log = LogFactory.getLog(VmHandler.class); + private static Set<VdcActionType> COMMANDS_ALLOWED_ON_NON_MANAGED_VMS = new HashSet<>(); /** * Initialize static list containers, for identity and permission check. The initialization should be executed * before calling ObjectIdentityChecker. @@ -84,7 +89,10 @@ inspectedClassNames)) { mUpdateVmsStatic.AddField(Arrays.asList(pair.getFirst().statuses()), pair.getSecond()); } - + COMMANDS_ALLOWED_ON_NON_MANAGED_VMS.add(VdcActionType.MigrateVm); + COMMANDS_ALLOWED_ON_NON_MANAGED_VMS.add(VdcActionType.SetVmTicket); + COMMANDS_ALLOWED_ON_NON_MANAGED_VMS.add(VdcActionType.VmLogon); + COMMANDS_ALLOWED_ON_NON_MANAGED_VMS.add(VdcActionType.CancelMigrateVm); } public static boolean isUpdateValid(VmStatic source, VmStatic destination, VMStatus status) { @@ -558,4 +566,28 @@ // not calling validate in order not to add the messages per domain return (new StorageDomainValidator(storageDomain).isDomainHasSpaceForRequest(sizeRequested)).isValid(); } + + public static ValidationResult canRunActionOnNonManagedVm(VM vm, VdcActionType actionType) { + ValidationResult validationResult = ValidationResult.VALID; + + if (!isManagedVm(vm)) { + if (!COMMANDS_ALLOWED_ON_NON_MANAGED_VMS.contains(actionType)) { + validationResult = new ValidationResult(VdcBllMessages.ACTION_TYPE_FAILED_CANNOT_RUN_ACTION_ON_NON_MANAGED_VM); + } + } + return validationResult; + } + + public static boolean isHostedEngine(VM vm) { + return OriginType.HOSTED_ENGINE.equals(vm.getOrigin()); + } + + public static boolean isExternalVm(VM vm) { + return OriginType.EXTERNAL.equals(vm.getOrigin()); + } + + public static boolean isManagedVm(VM vm) { + return !isHostedEngine(vm) && !isExternalVm(vm); + } + } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmLogonCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmLogonCommand.java index 4bbc689..c34b12a 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmLogonCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmLogonCommand.java @@ -29,6 +29,10 @@ return false; } + if (!canRunActionOnNonManagedVm()) { + return false; + } + // Everything is OK: return true; } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/ActivateDeactivateVmNicCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/ActivateDeactivateVmNicCommand.java index 8ef2ede..51675a2 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/ActivateDeactivateVmNicCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/ActivateDeactivateVmNicCommand.java @@ -47,6 +47,16 @@ @Override protected boolean canDoAction() { + + if (getVm() == null) { + addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_VM_NOT_EXIST); + return false; + } + + if (!canRunActionOnNonManagedVm()) { + return false; + } + if (!activateDeactivateVmNicAllowed(getVm().getStatus())) { addCanDoActionMessage(VdcBllMessages.ACTIVATE_DEACTIVATE_NIC_VM_STATUS_ILLEGAL); return false; diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/AddVmInterfaceCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/AddVmInterfaceCommand.java index 35c62c2..3fe8e23 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/AddVmInterfaceCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/AddVmInterfaceCommand.java @@ -102,6 +102,10 @@ return false; } + if (!canRunActionOnNonManagedVm()) { + return false; + } + switch (getVmDynamicDao().get(getParameters().getVmId()).getStatus()) { case Up: case Down: diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/RemoveVmInterfaceCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/RemoveVmInterfaceCommand.java index a4d7ad7..db0c1ca 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/RemoveVmInterfaceCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/RemoveVmInterfaceCommand.java @@ -51,6 +51,14 @@ @Override protected boolean canDoAction() { + if (getVm() == null) { + return failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_VM_NOT_FOUND); + } + + if (!canRunActionOnNonManagedVm()) { + return false; + } + VmDynamic vm = getVmDynamicDao().get(getParameters().getVmId()); if (vm.getStatus() != VMStatus.Down && getDbFacade().getVmDeviceDao() diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/UpdateVmInterfaceCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/UpdateVmInterfaceCommand.java index bd44a02..6bc1d96 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/UpdateVmInterfaceCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/UpdateVmInterfaceCommand.java @@ -139,6 +139,15 @@ @Override protected boolean canDoAction() { + if (getVm() == null) { + addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_VM_NOT_EXIST); + return false; + } + + if (!canRunActionOnNonManagedVm()) { + return false; + } + if (!updateVmNicAllowed(getVm().getStatus())) { addCanDoActionMessage(VdcBllMessages.NETWORK_CANNOT_CHANGE_STATUS_WHEN_NOT_DOWN_UP); return false; diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommandTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommandTest.java index 1fcec21..ecc401a 100644 --- a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommandTest.java +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/CreateAllSnapshotsFromVmCommandTest.java @@ -21,6 +21,7 @@ import org.ovirt.engine.core.bll.validator.VmValidator; import org.ovirt.engine.core.common.action.CreateAllSnapshotsFromVmParameters; import org.ovirt.engine.core.common.businessentities.DiskImage; +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.dao.SnapshotDao; @@ -44,6 +45,9 @@ private SnapshotsValidator snapshotsValidator; @Mock + private VM vm; + + @Mock private DiskImagesValidator diskImagesValidator; @Mock @@ -57,6 +61,7 @@ public void setUp() { CreateAllSnapshotsFromVmParameters params = new CreateAllSnapshotsFromVmParameters(Guid.newGuid(), ""); cmd = spy(new CreateAllSnapshotsFromVmCommand<CreateAllSnapshotsFromVmParameters>(params)); + doReturn(vm).when(cmd).getVm(); doReturn(vmValidator).when(cmd).createVmValidator(); doReturn(snapshotsValidator).when(cmd).createSnapshotValidator(); doReturn(storagePoolValidator).when(cmd).createStoragePoolValidator(); diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/IVdsEventListener.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/IVdsEventListener.java index 32127f0..cd1b424 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/IVdsEventListener.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/IVdsEventListener.java @@ -1,5 +1,6 @@ package org.ovirt.engine.core.common.businessentities; +import java.util.List; import java.util.Map; import org.ovirt.engine.core.common.AuditLogType; import org.ovirt.engine.core.common.errors.VdcBllErrors; @@ -57,4 +58,6 @@ void runFailedAutoStartVM(Guid vmId); boolean restartVds(Guid vdsId); + + void addExternallyManagedVms(List<VmStatic> externalVmList); } diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/OriginType.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/OriginType.java index 687d0f7..782edaf 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/OriginType.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/OriginType.java @@ -7,7 +7,11 @@ RHEV(0), VMWARE(1), XEN(2), - OVIRT(3); + OVIRT(3), + // VMs that externally run on the host (not created by the engine) + EXTERNAL(4), + // VMs that were created by the hosted engine setup + HOSTED_ENGINE(5); private int intValue; private static Map<Integer, OriginType> mappings; 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 4429958..e8d0405 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 @@ -130,6 +130,7 @@ ACTION_TYPE_FAILED_VM_RUNNING_STATELESS(ErrorType.CONFLICT), ACTION_TYPE_FAILED_VM_HAS_STATELESS_SNAPSHOT_LEFTOVER(ErrorType.DATA_CORRUPTION), ACTION_TYPE_FAILED_VM_IN_USE_BY_OTHER_USER(ErrorType.CONFLICT), + ACTION_TYPE_FAILED_CANNOT_RUN_ACTION_ON_NON_MANAGED_VM(ErrorType.NOT_SUPPORTED), ACTION_TYPE_FAILED_DELETE_PROTECTION_ENABLED(ErrorType.CONFLICT), ACTION_TYPE_FAILED_EXCEEDED_MAX_PCI_SLOTS(ErrorType.CONFLICT), ACTION_TYPE_FAILED_EXCEEDED_MAX_IDE_SLOTS(ErrorType.CONFLICT), 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 60d0e7b..7852457 100644 --- a/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties +++ b/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties @@ -16,6 +16,7 @@ ACTION_TYPE_FAILED_CORRUPTED_VM_SNAPSHOT_ID=Cannot ${action} ${type}. The snapshot configuration is corrupted (snapshot ID is empty). Please contact the system administrator. ACTION_TYPE_FAILED_VM_SNAPSHOT_HAS_NO_CONFIGURATION=Cannot ${action} ${type}. The snapshot ${SnapshotName} of VM ${VmName} has no configuration available. Please choose a snapshot with configuration available. ACTION_TYPE_FAILED_VM_SNAPSHOT_IS_BROKEN=Cannot ${action} ${type}. The snapshot is broken, and no further work can be done on it. Please remove this snapshot from the VM. +ACTION_TYPE_FAILED_CANNOT_RUN_ACTION_ON_NON_MANAGED_VM=Cannot ${action} ${type}. This VM is not managed by the engine. IMAGE_REPOSITORY_NOT_FOUND=Storage Domain cannot be accessed.\n\ Possible reasons:\n\ No operational Host in Data Center or Data Center state is not Up. diff --git a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfo.java b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfo.java index 5af3ae9..cef1ab8 100644 --- a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfo.java +++ b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/VdsUpdateRunTimeInfo.java @@ -24,6 +24,7 @@ import org.ovirt.engine.core.common.businessentities.DiskImage; import org.ovirt.engine.core.common.businessentities.DiskImageDynamic; import org.ovirt.engine.core.common.businessentities.Entities; +import org.ovirt.engine.core.common.businessentities.OriginType; import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.core.common.businessentities.VDSGroup; import org.ovirt.engine.core.common.businessentities.VDSStatus; @@ -39,6 +40,7 @@ import org.ovirt.engine.core.common.businessentities.VmExitStatus; import org.ovirt.engine.core.common.businessentities.VmGuestAgentInterface; import org.ovirt.engine.core.common.businessentities.VmPauseStatus; +import org.ovirt.engine.core.common.businessentities.VmStatic; import org.ovirt.engine.core.common.businessentities.VmStatistics; import org.ovirt.engine.core.common.businessentities.network.InterfaceStatus; import org.ovirt.engine.core.common.businessentities.network.Network; @@ -108,6 +110,7 @@ private final List<Guid> _succededToRunVms = new ArrayList<Guid>(); private static final Map<Guid,Integer> vmsWithBalloonDriverProblem = new HashMap<>(); private static final Map<Guid,Integer> vmsWithUncontrolledBalloon = new HashMap<>(); + private final List<VmStatic> _externalVmsToAdd = new ArrayList(); private boolean _saveVdsDynamic; private VDSStatus _firstStatus = VDSStatus.forValue(0); private boolean _saveVdsStatistics; @@ -123,6 +126,8 @@ private static final Log log = LogFactory.getLog(VdsUpdateRunTimeInfo.class); private static final int TO_MEGA_BYTES = 1024; + private static final String HOSTED_ENGINE_VM_NAME = "oVirtHostedEngine"; + private static final String EXTERNAL_VM_NAME_FORMAT = "external-%1$s"; private void saveDataToDb() { if (_saveVdsDynamic) { @@ -168,6 +173,7 @@ updateAllInTransaction(_vmDiskImageDynamicToSave.values(), getDbFacade().getDiskImageDynamicDao()); saveVmDevicesToDb(); saveVmGuestAgentNetworkDevices(); + ResourceManager.getInstance().getEventListener().addExternallyManagedVms(_externalVmsToAdd); } private void saveVmGuestAgentNetworkDevices() { @@ -972,6 +978,8 @@ proceedDownVms(); proceedGuaranteedMemoryCheck(); + + processExternallyManagedVms(); // update repository and check if there are any vm in cache that not // in vdsm updateRepository(running); @@ -1586,6 +1594,48 @@ } } + private void processExternallyManagedVms() { + List<String> vmsToQuery = new ArrayList<String>(); + // Searching for External VMs that run on the host + for (VmInternalData vmInternalData : _runningVms.values()) { + VM currentVmData = _vmDict.get(vmInternalData.getVmDynamic().getId()); + if (currentVmData == null) { + if (getDbFacade().getVmStaticDao().get(vmInternalData.getVmDynamic().getId()) == null) { + Guid vmId = vmInternalData.getVmDynamic().getId(); + vmsToQuery.add(vmId.toString()); + } + } + } + // Fetching for details from the host + // and marking the VMs for addition + if (!vmsToQuery.isEmpty()) { + // Query VDSM for VMs info, and creating a proper VMStatic to be used when importing them + Map[] vmsInfo = getVmInfo(vmsToQuery); + for (Map vmInfo : vmsInfo) { + Guid vmId = Guid.createGuidFromString((String) vmInfo.get(VdsProperties.vm_guid)); + VmStatic vmStatic = new VmStatic(); + vmStatic.setId(vmId); + vmStatic.setCreationDate(new Date()); + vmStatic.setVdsGroupId(_vds.getVdsGroupId()); + String vmNameOnHost = (String) vmInfo.get(VdsProperties.vm_name); + + if (StringUtils.equals(HOSTED_ENGINE_VM_NAME, vmNameOnHost)) { + vmStatic.setName(vmNameOnHost); + vmStatic.setOrigin(OriginType.HOSTED_ENGINE); + } else { + vmStatic.setName(String.format(EXTERNAL_VM_NAME_FORMAT, vmNameOnHost)); + vmStatic.setOrigin(OriginType.EXTERNAL); + } + + vmStatic.setNumOfSockets(Integer.parseInt((String) vmInfo.get(VdsProperties.num_of_cpus))); + vmStatic.setMemSizeMb(Integer.parseInt((String) vmInfo.get(VdsProperties.mem_size_mb))); + _externalVmsToAdd.add(vmStatic); + log.infoFormat("Importing VM {0} as {1}, as it is running on the on Host, but does not exist in the engine.", vmNameOnHost, vmStatic.getName()); + } + } + } + + private void updateRepository(List<VM> running) { for (VmInternalData vmInternalData : _runningVms.values()) { VmDynamic runningVm = vmInternalData.getVmDynamic(); 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 4ad4ad4..0a441cd 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 @@ -58,6 +58,9 @@ @DefaultStringValue("Cannot ${action} ${type}. The snapshot is broken, and no further work can be done on it. Please remove this snapshot from the VM.") String ACTION_TYPE_FAILED_VM_SNAPSHOT_IS_BROKEN(); + @DefaultStringValue("Cannot ${action} ${type}. This VM is not managed by the engine.") + String ACTION_TYPE_FAILED_CANNOT_RUN_ACTION_ON_NON_MANAGED_VM(); + @DefaultStringValue("Storage Domain cannot be accessed.\nPossible reasons:\nNo operational Host in Data Center or Data Center state is not Up.") String IMAGE_REPOSITORY_NOT_FOUND(); diff --git a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Enums.java b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Enums.java index 404b1a9..686af81 100644 --- a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Enums.java +++ b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Enums.java @@ -193,6 +193,9 @@ String OriginType___OVIRT(); + String OriginType___HOSTED_ENGINE(); + + String OriginType___EXTERNAL(); /** * This needs to cleaned up. We are leaving it in place to support import of * VMs created using previous versions. diff --git a/frontend/webadmin/modules/uicompat/src/main/resources/org/ovirt/engine/ui/uicompat/Enums.properties b/frontend/webadmin/modules/uicompat/src/main/resources/org/ovirt/engine/ui/uicompat/Enums.properties index d5f99f3..ffd1467 100644 --- a/frontend/webadmin/modules/uicompat/src/main/resources/org/ovirt/engine/ui/uicompat/Enums.properties +++ b/frontend/webadmin/modules/uicompat/src/main/resources/org/ovirt/engine/ui/uicompat/Enums.properties @@ -94,6 +94,8 @@ OriginType___OVIRT=oVirt OriginType___VMWARE=VmWare OriginType___XEN=Xen +OriginType___HOSTED_ENGINE=Hosted Engine +OriginType___EXTERNAL=External VmInterfaceType___rtl8139_pv=Dual mode rtl8139, VirtIO VmInterfaceType___rtl8139=rtl8139 VmInterfaceType___e1000=e1000 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 10f060d..0349b62 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 @@ -16,6 +16,7 @@ ACTION_TYPE_FAILED_CORRUPTED_VM_SNAPSHOT_ID=Cannot ${action} ${type}. The snapshot configuration is corrupted (snapshot ID is empty). Please contact the system administrator. ACTION_TYPE_FAILED_VM_SNAPSHOT_HAS_NO_CONFIGURATION=Cannot ${action} ${type}. The snapshot ${SnapshotName} of VM ${VmName} has no configuration available. Please choose a snapshot with configuration available. ACTION_TYPE_FAILED_VM_SNAPSHOT_IS_BROKEN=Cannot ${action} ${type}. The snapshot is broken, and no further work can be done on it. Please remove this snapshot from the VM. +ACTION_TYPE_FAILED_CANNOT_RUN_ACTION_ON_NON_MANAGED_VM=Cannot ${action} ${type}. This VM is not managed by the engine. IMAGE_REPOSITORY_NOT_FOUND=Storage Domain cannot be accessed.\n\ Possible reasons:\n\ No operational Host in Data Center or Data Center state is not Up. 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 dc57b46..eabae40 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 @@ -16,6 +16,7 @@ ACTION_TYPE_FAILED_CORRUPTED_VM_SNAPSHOT_ID=Cannot ${action} ${type}. The snapshot configuration is corrupted (snapshot ID is empty). Please contact the system administrator. ACTION_TYPE_FAILED_VM_SNAPSHOT_HAS_NO_CONFIGURATION=Cannot ${action} ${type}. The snapshot ${SnapshotName} of VM ${VmName} has no configuration available. Please choose a snapshot with configuration available. ACTION_TYPE_FAILED_VM_SNAPSHOT_IS_BROKEN=Cannot ${action} ${type}. The snapshot is broken, and no further work can be done on it. Please remove this snapshot from the VM. +ACTION_TYPE_FAILED_CANNOT_RUN_ACTION_ON_NON_MANAGED_VM=Cannot ${action} ${type}. This VM is not managed by the engine. IMAGE_REPOSITORY_NOT_FOUND=Storage Domain cannot be accessed.\n\ Possible reasons:\n\ No operational Host in Data Center or Data Center state is not Up. -- To view, visit http://gerrit.ovirt.org/17993 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ic00289a53aba6db5c6fe0364101e407178a48158 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Oved Ourfali <oourf...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches