Skip to content

Commit ddc1689

Browse files
author
Anurag Awasthi
committed
CR comments
1 parent 1c5112e commit ddc1689

File tree

2 files changed

+121
-116
lines changed

2 files changed

+121
-116
lines changed

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

Lines changed: 120 additions & 110 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,14 @@
1919
import java.util.HashMap;
2020
import java.util.Map;
2121

22+
import org.apache.log4j.Logger;
23+
import org.apache.xmlrpc.XmlRpcException;
24+
2225
import com.cloud.exception.InvalidParameterValueException;
2326
import com.cloud.utils.exception.CloudRuntimeException;
2427
import com.xensource.xenapi.Connection;
2528
import com.xensource.xenapi.Types;
2629
import com.xensource.xenapi.VM;
27-
import org.apache.log4j.Logger;
28-
import org.apache.xmlrpc.XmlRpcException;
2930

3031
public class ExtraConfigurationUtility {
3132
private static final Logger LOG = Logger.getLogger(ExtraConfigurationUtility.class);
@@ -42,115 +43,9 @@ public static void setExtraConfigurationToVm(Connection conn, VM.Record vmr, VM
4243

4344
//Map params
4445
if (paramKey.contains(":")) {
45-
int i = paramKey.indexOf(":");
46-
String actualParam = paramKey.substring(0, i);
47-
String keyName = paramKey.substring(i + 1);
48-
boolean isValidOperation = isValidOperation(recordMap, actualParam);
49-
if (isValidOperation) {
50-
try {
51-
switch (actualParam) {
52-
case "VCPUs_params":
53-
vm.addToVCPUsParams(conn, keyName, paramValue);
54-
break;
55-
case "platform":
56-
vm.addToOtherConfig(conn, keyName, paramValue);
57-
break;
58-
case "HVM_boot_params":
59-
vm.addToHVMBootParams(conn, keyName, paramValue);
60-
break;
61-
case "other_config":
62-
vm.addToOtherConfig(conn, keyName, paramValue);
63-
break;
64-
case "xenstore_data":
65-
vm.addToXenstoreData(conn, keyName, paramValue);
66-
break;
67-
default:
68-
String msg = String.format("Passed configuration %s is not supported", paramKey);
69-
LOG.warn(msg);
70-
}
71-
} catch (XmlRpcException | Types.XenAPIException e) {
72-
LOG.error("Exception caught while setting VM configuration: " + cfg);
73-
throw new CloudRuntimeException("Exception caught while setting VM configuration: " + cfg, e);
74-
}
75-
} else {
76-
LOG.error("Unsupported extra configuration has been passed");
77-
throw new InvalidParameterValueException("Unsupported extra configuration option has been passed: " + actualParam);
78-
}
79-
46+
applyConfigWithNestedKeyValue(conn, vm, recordMap, paramKey, paramValue);
8047
} else {
81-
boolean isValidOperation = isValidOperation(recordMap, paramKey);
82-
if (isValidOperation) {
83-
try {
84-
switch (paramKey) {
85-
case "HVM_boot_policy":
86-
vm.setHVMBootPolicy(conn, paramValue);
87-
break;
88-
case "HVM_shadow_multiplier":
89-
vm.setHVMShadowMultiplier(conn, Double.valueOf(paramValue));
90-
break;
91-
case "PV_kernel":
92-
vm.setPVKernel(conn, paramValue);
93-
break;
94-
case "PV_ramdisk":
95-
vm.setPVRamdisk(conn, paramValue);
96-
break;
97-
case "PV_args":
98-
vm.setPVArgs(conn, paramValue);
99-
break;
100-
case "PV_legacy_args":
101-
vm.setPVLegacyArgs(conn, paramValue);
102-
break;
103-
case "PV_bootloader":
104-
vm.setPVBootloader(conn, paramValue);
105-
break;
106-
case "PV_bootloader_args":
107-
vm.setPVBootloaderArgs(conn, paramValue);
108-
break;
109-
case "ha_restart_priority":
110-
vm.setHaRestartPriority(conn, paramValue);
111-
break;
112-
case "start_delay":
113-
vm.setStartDelay(conn, Long.valueOf(paramValue));
114-
break;
115-
case "shutdown_delay":
116-
vm.setShutdownDelay(conn, Long.valueOf(paramValue));
117-
break;
118-
case "order":
119-
vm.setOrder(conn, Long.valueOf(paramValue));
120-
break;
121-
case "VCPUs_max":
122-
vm.setVCPUsMax(conn, Long.valueOf(paramValue));
123-
break;
124-
case "VCPUs_at_startup":
125-
vm.setVCPUsAtStartup(conn, Long.valueOf(paramValue));
126-
break;
127-
case "is-a-template":
128-
vm.setIsATemplate(conn, Boolean.valueOf(paramValue));
129-
break;
130-
case "memory_static_max":
131-
vm.setMemoryStaticMax(conn, Long.valueOf(paramValue));
132-
break;
133-
case "memory_static_min":
134-
vm.setMemoryStaticMin(conn, Long.valueOf(paramValue));
135-
break;
136-
case "memory_dynamic_max":
137-
vm.setMemoryDynamicMax(conn, Long.valueOf(paramValue));
138-
break;
139-
case "memory_dynamic_min":
140-
vm.setMemoryDynamicMin(conn, Long.valueOf(paramValue));
141-
break;
142-
default:
143-
String anotherMessage = String.format("Passed configuration %s is not supported", paramKey);
144-
LOG.error(anotherMessage);
145-
}
146-
} catch (XmlRpcException | Types.XenAPIException e) {
147-
LOG.error("Exception caught while setting VM configuration");
148-
throw new CloudRuntimeException("Exception caught while setting VM configuration: " + cfg, e);
149-
}
150-
} else {
151-
LOG.error("Unsupported extra configuration has been passed: " + paramKey);
152-
throw new InvalidParameterValueException("Unsupported extra configuration parameter key has been passed: " + paramKey);
153-
}
48+
applyConfigWithKeyValue(conn, vm, recordMap, paramKey, paramValue);
15449
}
15550
}
15651
}
@@ -159,6 +54,121 @@ private static boolean isValidOperation(Map<String, Object> recordMap, String ac
15954
return recordMap.containsKey(actualParam);
16055
}
16156

57+
/**
58+
* Nested keys contain ":" between the paramKey and need to split into operation param and key
59+
* */
60+
private static void applyConfigWithNestedKeyValue(Connection conn, VM vm, Map<String, Object> recordMap, String paramKey, String paramValue) {
61+
int i = paramKey.indexOf(":");
62+
String actualParam = paramKey.substring(0, i);
63+
String keyName = paramKey.substring(i + 1);
64+
65+
if (!isValidOperation(recordMap, actualParam)) {
66+
LOG.error("Unsupported extra configuration has been passed " + actualParam);
67+
throw new InvalidParameterValueException("Unsupported extra configuration option has been passed: " + actualParam);
68+
}
69+
70+
try {
71+
switch (actualParam) {
72+
case "VCPUs_params":
73+
vm.addToVCPUsParams(conn, keyName, paramValue);
74+
break;
75+
case "platform":
76+
vm.addToOtherConfig(conn, keyName, paramValue);
77+
break;
78+
case "HVM_boot_params":
79+
vm.addToHVMBootParams(conn, keyName, paramValue);
80+
break;
81+
case "other_config":
82+
vm.addToOtherConfig(conn, keyName, paramValue);
83+
break;
84+
case "xenstore_data":
85+
vm.addToXenstoreData(conn, keyName, paramValue);
86+
break;
87+
default:
88+
String msg = String.format("Passed configuration %s is not supported", paramKey);
89+
LOG.warn(msg);
90+
}
91+
} catch (XmlRpcException | Types.XenAPIException e) {
92+
LOG.error("Exception caught while setting VM configuration. exception: " + e.getMessage());
93+
throw new CloudRuntimeException("Exception caught while setting VM configuration", e);
94+
}
95+
}
96+
97+
private static void applyConfigWithKeyValue(Connection conn, VM vm, Map<String, Object> recordMap, String paramKey, String paramValue) {
98+
if (!isValidOperation(recordMap, paramKey)) {
99+
LOG.error("Unsupported extra configuration has been passed: " + paramKey);
100+
throw new InvalidParameterValueException("Unsupported extra configuration parameter key has been passed: " + paramKey);
101+
}
102+
103+
try {
104+
switch (paramKey) {
105+
case "HVM_boot_policy":
106+
vm.setHVMBootPolicy(conn, paramValue);
107+
break;
108+
case "HVM_shadow_multiplier":
109+
vm.setHVMShadowMultiplier(conn, Double.valueOf(paramValue));
110+
break;
111+
case "PV_kernel":
112+
vm.setPVKernel(conn, paramValue);
113+
break;
114+
case "PV_ramdisk":
115+
vm.setPVRamdisk(conn, paramValue);
116+
break;
117+
case "PV_args":
118+
vm.setPVArgs(conn, paramValue);
119+
break;
120+
case "PV_legacy_args":
121+
vm.setPVLegacyArgs(conn, paramValue);
122+
break;
123+
case "PV_bootloader":
124+
vm.setPVBootloader(conn, paramValue);
125+
break;
126+
case "PV_bootloader_args":
127+
vm.setPVBootloaderArgs(conn, paramValue);
128+
break;
129+
case "ha_restart_priority":
130+
vm.setHaRestartPriority(conn, paramValue);
131+
break;
132+
case "start_delay":
133+
vm.setStartDelay(conn, Long.valueOf(paramValue));
134+
break;
135+
case "shutdown_delay":
136+
vm.setShutdownDelay(conn, Long.valueOf(paramValue));
137+
break;
138+
case "order":
139+
vm.setOrder(conn, Long.valueOf(paramValue));
140+
break;
141+
case "VCPUs_max":
142+
vm.setVCPUsMax(conn, Long.valueOf(paramValue));
143+
break;
144+
case "VCPUs_at_startup":
145+
vm.setVCPUsAtStartup(conn, Long.valueOf(paramValue));
146+
break;
147+
case "is-a-template":
148+
vm.setIsATemplate(conn, Boolean.valueOf(paramValue));
149+
break;
150+
case "memory_static_max":
151+
vm.setMemoryStaticMax(conn, Long.valueOf(paramValue));
152+
break;
153+
case "memory_static_min":
154+
vm.setMemoryStaticMin(conn, Long.valueOf(paramValue));
155+
break;
156+
case "memory_dynamic_max":
157+
vm.setMemoryDynamicMax(conn, Long.valueOf(paramValue));
158+
break;
159+
case "memory_dynamic_min":
160+
vm.setMemoryDynamicMin(conn, Long.valueOf(paramValue));
161+
break;
162+
default:
163+
String anotherMessage = String.format("Passed configuration %s is not supported", paramKey);
164+
LOG.error(anotherMessage);
165+
}
166+
} catch (XmlRpcException | Types.XenAPIException e) {
167+
LOG.error("Exception caught while setting VM configuration, exception: " + e.getMessage());
168+
throw new CloudRuntimeException("Exception caught while setting VM configuration: ", e);
169+
}
170+
}
171+
162172
private static Map<String, String> prepareKeyValuePair(String cfg) {
163173
Map<String, String> configKeyPair = new HashMap<>();
164174
int indexOfEqualSign = cfg.indexOf("=");

server/src/main/java/com/cloud/vm/UserVmManagerImpl.java

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5143,12 +5143,7 @@ protected void persistExtraConfigVmware(String decodedUrl, UserVm vm) {
51435143
boolean validXenOrVmwareConfiguration = isValidXenOrVmwareConfiguration(cfg, allowedKeyList);
51445144
String[] paramArray = cfg.split("=");
51455145
if (validXenOrVmwareConfiguration && paramArray.length == 2) {
5146-
try {
5147-
userVmDetailsDao.addDetail(vm.getId(), paramArray[0].trim(), paramArray[1].trim(), true);
5148-
} catch (ArrayIndexOutOfBoundsException e) {
5149-
throw new CloudRuntimeException("Issue occurred during parsing of:" + cfg);
5150-
}
5151-
5146+
userVmDetailsDao.addDetail(vm.getId(), paramArray[0].trim(), paramArray[1].trim(), true);
51525147
} else {
51535148
throw new CloudRuntimeException("Extra config " + cfg + " is not on the list of allowed keys for VMware hypervisor hosts.");
51545149
}

0 commit comments

Comments
 (0)