Skip to content

Commit adc05f8

Browse files
authored
Fix XenServer nested extra configuration (#8698)
1 parent 4b4dfef commit adc05f8

2 files changed

Lines changed: 14 additions & 7 deletions

File tree

plugins/hypervisors/xenserver/src/main/java/com/cloud/hypervisor/xenserver/resource/CitrixResourceBase.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1972,7 +1972,7 @@ protected void finalizeVmMetaData(final VM vm, final VM.Record vmr, final Connec
19721972
// Add configuration settings VM record for User VM instances before creating VM
19731973
Map<String, String> extraConfig = vmSpec.getExtraConfig();
19741974
if (vmSpec.getType().equals(VirtualMachine.Type.User) && MapUtils.isNotEmpty(extraConfig)) {
1975-
logger.info("Appending user extra configuration settings to VM");
1975+
logger.info("Appending user extra configuration settings [{}] to [{}].", extraConfig, vmSpec);
19761976
ExtraConfigurationUtility.setExtraConfigurationToVm(conn,vmr, vm, extraConfig);
19771977
}
19781978
}

plugins/hypervisors/xenserver/src/main/java/org/apache/cloudstack/hypervisor/xenserver/ExtraConfigurationUtility.java

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ public static void setExtraConfigurationToVm(Connection conn, VM.Record vmr, VM
4343
String paramValue = configParams.get(paramKey);
4444

4545
//Map params
46+
LOGGER.debug("Applying [{}] configuration as [{}].", paramKey, paramValue);
4647
if (paramKey.contains(":")) {
4748
applyConfigWithNestedKeyValue(conn, vm, recordMap, paramKey, paramValue);
4849
} else {
@@ -55,6 +56,11 @@ private static boolean isValidOperation(Map<String, Object> recordMap, String ac
5556
return recordMap.containsKey(actualParam);
5657
}
5758

59+
private static Map<String, String> putInMap(Map<String, String> map, String key, String value) {
60+
map.put(key, value);
61+
return map;
62+
}
63+
5864
/**
5965
* Nested keys contain ":" between the paramKey and need to split into operation param and key
6066
* */
@@ -71,26 +77,27 @@ private static void applyConfigWithNestedKeyValue(Connection conn, VM vm, Map<St
7177
try {
7278
switch (actualParam) {
7379
case "VCPUs_params":
74-
vm.addToVCPUsParams(conn, keyName, paramValue);
80+
vm.setVCPUsParams(conn, putInMap(vm.getVCPUsParams(conn), keyName, paramValue));
7581
break;
7682
case "platform":
77-
vm.addToOtherConfig(conn, keyName, paramValue);
83+
vm.setOtherConfig(conn, putInMap(vm.getOtherConfig(conn), keyName, paramValue));
7884
break;
7985
case "HVM_boot_params":
80-
vm.addToHVMBootParams(conn, keyName, paramValue);
86+
vm.setHVMBootParams(conn, putInMap(vm.getHVMBootParams(conn), keyName, paramValue));
8187
break;
8288
case "other_config":
83-
vm.addToOtherConfig(conn, keyName, paramValue);
89+
vm.setOtherConfig(conn, putInMap(vm.getOtherConfig(conn), keyName, paramValue));
8490
break;
8591
case "xenstore_data":
86-
vm.addToXenstoreData(conn, keyName, paramValue);
92+
vm.setXenstoreData(conn, putInMap(vm.getXenstoreData(conn), keyName, paramValue));
8793
break;
8894
default:
8995
String msg = String.format("Passed configuration %s is not supported", paramKey);
9096
LOGGER.warn(msg);
9197
}
9298
} catch (XmlRpcException | Types.XenAPIException e) {
93-
LOGGER.error("Exception caught while setting VM configuration. exception: " + e.getMessage());
99+
LOGGER.error("Exception caught while setting VM configuration: [{}]", e.getMessage() == null ? e.toString() : e.getMessage());
100+
LOGGER.debug("Exception caught while setting VM configuration", e);
94101
throw new CloudRuntimeException("Exception caught while setting VM configuration", e);
95102
}
96103
}

0 commit comments

Comments
 (0)