From adc05f8d59021d9601e0a4eda1db67a20089495a Mon Sep 17 00:00:00 2001 From: Gabriel Pordeus Santos Date: Mon, 25 Mar 2024 07:19:16 -0300 Subject: [PATCH] Fix XenServer nested extra configuration (#8698) --- .../resource/CitrixResourceBase.java | 2 +- .../xenserver/ExtraConfigurationUtility.java | 19 +++++++++++++------ 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/CitrixResourceBase.java b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/CitrixResourceBase.java index 295c96025ab..8f03648deb6 100644 --- a/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/CitrixResourceBase.java +++ b/plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/CitrixResourceBase.java @@ -1972,7 +1972,7 @@ public abstract class CitrixResourceBase extends ServerResourceBase implements S // Add configuration settings VM record for User VM instances before creating VM Map extraConfig = vmSpec.getExtraConfig(); if (vmSpec.getType().equals(VirtualMachine.Type.User) && MapUtils.isNotEmpty(extraConfig)) { - logger.info("Appending user extra configuration settings to VM"); + logger.info("Appending user extra configuration settings [{}] to [{}].", extraConfig, vmSpec); ExtraConfigurationUtility.setExtraConfigurationToVm(conn,vmr, vm, extraConfig); } } diff --git a/plugins/hypervisors/xenserver/src/main/java/org/apache/cloudstack/hypervisor/xenserver/ExtraConfigurationUtility.java b/plugins/hypervisors/xenserver/src/main/java/org/apache/cloudstack/hypervisor/xenserver/ExtraConfigurationUtility.java index a2702efeb72..64d83c1427b 100644 --- a/plugins/hypervisors/xenserver/src/main/java/org/apache/cloudstack/hypervisor/xenserver/ExtraConfigurationUtility.java +++ b/plugins/hypervisors/xenserver/src/main/java/org/apache/cloudstack/hypervisor/xenserver/ExtraConfigurationUtility.java @@ -43,6 +43,7 @@ public class ExtraConfigurationUtility { String paramValue = configParams.get(paramKey); //Map params + LOGGER.debug("Applying [{}] configuration as [{}].", paramKey, paramValue); if (paramKey.contains(":")) { applyConfigWithNestedKeyValue(conn, vm, recordMap, paramKey, paramValue); } else { @@ -55,6 +56,11 @@ public class ExtraConfigurationUtility { return recordMap.containsKey(actualParam); } + private static Map putInMap(Map map, String key, String value) { + map.put(key, value); + return map; + } + /** * Nested keys contain ":" between the paramKey and need to split into operation param and key * */ @@ -71,26 +77,27 @@ public class ExtraConfigurationUtility { try { switch (actualParam) { case "VCPUs_params": - vm.addToVCPUsParams(conn, keyName, paramValue); + vm.setVCPUsParams(conn, putInMap(vm.getVCPUsParams(conn), keyName, paramValue)); break; case "platform": - vm.addToOtherConfig(conn, keyName, paramValue); + vm.setOtherConfig(conn, putInMap(vm.getOtherConfig(conn), keyName, paramValue)); break; case "HVM_boot_params": - vm.addToHVMBootParams(conn, keyName, paramValue); + vm.setHVMBootParams(conn, putInMap(vm.getHVMBootParams(conn), keyName, paramValue)); break; case "other_config": - vm.addToOtherConfig(conn, keyName, paramValue); + vm.setOtherConfig(conn, putInMap(vm.getOtherConfig(conn), keyName, paramValue)); break; case "xenstore_data": - vm.addToXenstoreData(conn, keyName, paramValue); + vm.setXenstoreData(conn, putInMap(vm.getXenstoreData(conn), keyName, paramValue)); break; default: String msg = String.format("Passed configuration %s is not supported", paramKey); LOGGER.warn(msg); } } catch (XmlRpcException | Types.XenAPIException e) { - LOGGER.error("Exception caught while setting VM configuration. exception: " + e.getMessage()); + LOGGER.error("Exception caught while setting VM configuration: [{}]", e.getMessage() == null ? e.toString() : e.getMessage()); + LOGGER.debug("Exception caught while setting VM configuration", e); throw new CloudRuntimeException("Exception caught while setting VM configuration", e); } }