You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by da...@apache.org on 2026/07/22 15:18:06 UTC
(cloudstack) 01/01: conditional error reporting for vm move failure
This is an automated email from the ASF dual-hosted git repository.
DaanHoogland pushed a commit to branch ghi13406-vmMove-error
in repository https://gitbox.apache.org/repos/asf/cloudstack.git
commit 6cfbcc84a662ca7e052307abf70ff5c4f58ea9ae
Author: Daan Hoogland <da...@apache.org>
AuthorDate: Wed Jul 22 17:15:28 2026 +0200
conditional error reporting for vm move failure
---
api/src/main/java/com/cloud/vm/UserVmService.java | 6 ++++++
.../org/apache/cloudstack/api/command/admin/vm/AssignVMCmd.java | 4 ++++
server/src/main/java/com/cloud/vm/UserVmManagerImpl.java | 2 +-
3 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/api/src/main/java/com/cloud/vm/UserVmService.java b/api/src/main/java/com/cloud/vm/UserVmService.java
index dc9e8c1f0d8..184fbd83c30 100644
--- a/api/src/main/java/com/cloud/vm/UserVmService.java
+++ b/api/src/main/java/com/cloud/vm/UserVmService.java
@@ -40,6 +40,7 @@ import org.apache.cloudstack.api.command.user.vm.UpdateVmNicIpCmd;
import org.apache.cloudstack.api.command.user.vm.UpgradeVMCmd;
import org.apache.cloudstack.api.command.user.vmgroup.CreateVMGroupCmd;
import org.apache.cloudstack.api.command.user.vmgroup.DeleteVMGroupCmd;
+import org.apache.cloudstack.framework.config.ConfigKey;
import com.cloud.dc.DataCenter;
import com.cloud.deploy.DeploymentPlanner;
@@ -64,6 +65,11 @@ import com.cloud.utils.exception.ExecutionException;
public interface UserVmService {
+ ConfigKey<Boolean> AllowExposingVmAssignFailureDetails = new ConfigKey<>("Advanced", Boolean.class,
+ "vm.assign.failure.detailed.message.enabled", "true",
+ "If true, the reason a VM ownership change (assignVirtualMachine) fails, e.g. remaining port forwarding rules or volume snapshots, is returned to the API caller. " +
+ "If false, only a generic error message referencing the Instance ID is returned, and the detailed reason is only available in the management server logs.",
+ true, ConfigKey.Scope.Global);
/**
* Destroys one virtual machine
diff --git a/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/AssignVMCmd.java b/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/AssignVMCmd.java
index e11d20d0646..dd726c339a8 100644
--- a/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/AssignVMCmd.java
+++ b/api/src/main/java/org/apache/cloudstack/api/command/admin/vm/AssignVMCmd.java
@@ -36,6 +36,7 @@ import org.apache.cloudstack.api.response.UserVmResponse;
import com.cloud.exception.InvalidParameterValueException;
import com.cloud.user.Account;
import com.cloud.uservm.UserVm;
+import com.cloud.vm.UserVmService;
import com.cloud.vm.VirtualMachine;
@APICommand(name = "assignVirtualMachine",
@@ -128,6 +129,9 @@ public class AssignVMCmd extends BaseCmd {
ApiErrorCode errorCode = e instanceof InvalidParameterValueException ? ApiErrorCode.PARAM_ERROR : ApiErrorCode.INTERNAL_ERROR;
String msg = String.format("Failed to move Instance due to [%s].", getVmId());
logger.error(msg, e);
+ if (e instanceof InvalidParameterValueException && UserVmService.AllowExposingVmAssignFailureDetails.value()) {
+ msg = e.getMessage();
+ }
throw new ServerApiException(errorCode, msg);
}
}
diff --git a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java
index 7e58cd01050..9238d9bfec0 100644
--- a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java
+++ b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java
@@ -8891,7 +8891,7 @@ public class UserVmManagerImpl extends ManagerBase implements UserVmManager, Vir
return new ConfigKey<?>[] {EnableDynamicallyScaleVm, AllowDiskOfferingChangeDuringScaleVm, AllowUserExpungeRecoverVm, VmIpFetchWaitInterval, VmIpFetchTrialMax,
VmIpFetchThreadPoolMax, VmIpFetchTaskWorkers, AllowDeployVmIfGivenHostFails, EnableAdditionalVmConfig, DisplayVMOVFProperties,
KvmAdditionalConfigAllowList, XenServerAdditionalConfigAllowList, VmwareAdditionalConfigAllowList, DestroyRootVolumeOnVmDestruction,
- EnforceStrictResourceLimitHostTagCheck, StrictHostTags, AllowUserForceStopVm};
+ EnforceStrictResourceLimitHostTagCheck, StrictHostTags, AllowUserForceStopVm, AllowExposingVmAssignFailureDetails};
}
@Override