This is an automated email from the ASF dual-hosted git repository.
DaanHoogland pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudstack.git
The following commit(s) were added to refs/heads/main by this push:
new b7d4df0a11f Add more details to VM deployment failure alert messages
(#12939)
b7d4df0a11f is described below
commit b7d4df0a11f634b23907531ef0349a3842446046
Author: GaOrtiga <[email protected]>
AuthorDate: Sat Jul 4 11:26:08 2026 -0300
Add more details to VM deployment failure alert messages (#12939)
Co-authored-by: Copilot <[email protected]>
Co-authored-by: Erik Böck <[email protected]>
---
.../src/main/java/com/cloud/vm/UserVmManagerImpl.java | 18 ++++++++++++------
1 file changed, 12 insertions(+), 6 deletions(-)
diff --git a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java
b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java
index 1a65bbaca8d..e6e110e341f 100644
--- a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java
+++ b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java
@@ -160,6 +160,7 @@ import org.apache.commons.lang.math.NumberUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
+import org.apache.logging.log4j.ThreadContext;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
@@ -2775,22 +2776,29 @@ public class UserVmManagerImpl extends ManagerBase
implements UserVmManager, Vir
if (vm != null) {
if (vm.getState().equals(State.Stopped)) {
HostVO host = _hostDao.findById(hostId);
- logger.debug("Destroying vm {} as it failed to create on Host:
{} with id {}", vm, host, hostId);
+ logger.debug("Destroying VM [{}] as it was unable to be
deployed on Host: {}.", vm, host);
try {
_itMgr.stateTransitTo(vm,
VirtualMachine.Event.OperationFailedToError, null);
} catch (NoTransitionException e1) {
- logger.warn(e1.getMessage());
+ logger.error("Error when transitioning state of [{}].",
vm, e1);
}
// destroy associated volumes for vm in error state
// get all volumes in non destroyed state
+ logger.debug("Destroying associated volumes of [{}] as it was
unable to be deployed.", vm);
List<VolumeVO> volumesForThisVm =
_volsDao.findUsableVolumesForInstance(vm.getId());
for (VolumeVO volume : volumesForThisVm) {
if (volume.getState() != Volume.State.Destroy) {
+ logger.trace("Destroying volume [{}] as its VM was
unable to be deployed.", volume);
volumeMgr.destroyVolume(volume);
}
}
- String msg = String.format("Failed to deploy Vm %s, on Host %s
with Id: %d", vm, host, hostId);
- _alertMgr.sendAlert(AlertManager.AlertType.ALERT_TYPE_USERVM,
vm.getDataCenterId(), vm.getPodIdToDeployIn(), msg, msg);
+ String subject = String.format("Failed to deploy Instance [ID:
%s]", vm.getUuid());
+ String body = String.format("Failed to deploy [%s]%s. To
troubleshoot, please check the logs with [logid:%s].",
+ vm,
+ hostId != null ? String.format(" on host [%s]",
hostId) : "",
+ ThreadContext.get("logcontextid"));
+
+ _alertMgr.sendAlert(AlertManager.AlertType.ALERT_TYPE_USERVM,
vm.getDataCenterId(), vm.getPodIdToDeployIn(), subject, body);
// Get serviceOffering and template for Virtual Machine
ServiceOfferingVO offering =
serviceOfferingDao.findById(vm.getId(), vm.getServiceOfferingId());
@@ -2802,8 +2810,6 @@ public class UserVmManagerImpl extends ManagerBase
implements UserVmManager, Vir
}
}
-
-
private class VmIpFetchTask extends ManagedContextRunnable {
@Override