Skip to content

Commit 926cb1d

Browse files
committed
gzip user data before sending to commandline
1 parent 53cbc87 commit 926cb1d

File tree

6 files changed

+34
-9
lines changed

6 files changed

+34
-9
lines changed

plugins/network-elements/elastic-loadbalancer/src/main/java/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import javax.inject.Inject;
3232
import javax.naming.ConfigurationException;
3333

34+
import com.cloud.utils.compression.CompressionUtil;
3435
import com.cloud.vm.UserVmManager;
3536
import org.apache.cloudstack.api.command.user.loadbalancer.CreateLoadBalancerRuleCmd;
3637
import org.apache.cloudstack.config.ApiServiceConfiguration;
@@ -495,7 +496,11 @@ public boolean finalizeVirtualMachineProfile(VirtualMachineProfile profile, Depl
495496
Long userDataId = userDataManager.validateAndGetUserDataIdForSystemVms(userDataUuid, profile.getTemplate());
496497
String userData = userVmManager.finalizeUserData(null, userDataId, profile.getTemplate());
497498
if (StringUtils.isNotBlank(userData)) {
498-
String encodedUserData = Base64.getEncoder().encodeToString(userData.getBytes());
499+
// Decode base64 user data, compress it, then re-encode to reduce command line length
500+
String plainTextUserData = new String(Base64.getDecoder().decode(userData));
501+
CompressionUtil compressionUtil = new CompressionUtil();
502+
byte[] compressedUserData = compressionUtil.compressString(plainTextUserData);
503+
String encodedUserData = Base64.getEncoder().encodeToString(compressedUserData);
499504
buf.append(" userdata=").append(encodedUserData);
500505
}
501506
} catch (Exception e) {

plugins/network-elements/internal-loadbalancer/src/main/java/org/apache/cloudstack/network/lb/InternalLoadBalancerVMManagerImpl.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737

3838
import com.cloud.event.ActionEvent;
3939
import com.cloud.event.EventTypes;
40+
import com.cloud.utils.compression.CompressionUtil;
4041
import com.cloud.vm.UserVmManager;
4142
import org.apache.cloudstack.context.CallContext;
4243
import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService;
@@ -260,7 +261,11 @@ public boolean finalizeVirtualMachineProfile(final VirtualMachineProfile profile
260261
Long userDataId = userDataManager.validateAndGetUserDataIdForSystemVms(userDataUuid, profile.getTemplate());
261262
String userData = userVmManager.finalizeUserData(null, userDataId, profile.getTemplate());
262263
if (StringUtils.isNotBlank(userData)) {
263-
String encodedUserData = Base64.getEncoder().encodeToString(userData.getBytes());
264+
// Decode base64 user data, compress it, then re-encode to reduce command line length
265+
String plainTextUserData = new String(Base64.getDecoder().decode(userData));
266+
CompressionUtil compressionUtil = new CompressionUtil();
267+
byte[] compressedUserData = compressionUtil.compressString(plainTextUserData);
268+
String encodedUserData = Base64.getEncoder().encodeToString(compressedUserData);
264269
buf.append(" userdata=").append(encodedUserData);
265270
}
266271
} catch (Exception e) {

server/src/main/java/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import javax.naming.ConfigurationException;
3535

3636
import com.cloud.vm.UserVmManager;
37+
import com.cloud.utils.compression.CompressionUtil;
3738
import org.apache.cloudstack.agent.lb.IndirectAgentLB;
3839
import org.apache.cloudstack.ca.CAManager;
3940
import org.apache.cloudstack.consoleproxy.ConsoleAccessManager;
@@ -1280,8 +1281,12 @@ public boolean finalizeVirtualMachineProfile(VirtualMachineProfile profile, Depl
12801281
try {
12811282
Long userDataId = userDataManager.validateAndGetUserDataIdForSystemVms(userDataUuid, profile.getTemplate());
12821283
String userData = userVmManager.finalizeUserData(null, userDataId, profile.getTemplate());
1283-
if (org.apache.commons.lang3.StringUtils.isNotBlank(userData)) {
1284-
String encodedUserData = Base64.getEncoder().encodeToString(userData.getBytes());
1284+
if (StringUtils.isNotBlank(userData)) {
1285+
// Decode base64 user data, compress it, then re-encode to reduce command line length
1286+
String plainTextUserData = new String(Base64.getDecoder().decode(userData));
1287+
CompressionUtil compressionUtil = new CompressionUtil();
1288+
byte[] compressedUserData = compressionUtil.compressString(plainTextUserData);
1289+
String encodedUserData = Base64.getEncoder().encodeToString(compressedUserData);
12851290
buf.append(" userdata=").append(encodedUserData);
12861291
}
12871292
} catch (Exception e) {

server/src/main/java/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
import javax.inject.Inject;
5050
import javax.naming.ConfigurationException;
5151

52+
import com.cloud.utils.compression.CompressionUtil;
5253
import com.cloud.vm.UserVmManager;
5354
import com.google.gson.JsonSyntaxException;
5455
import com.google.gson.reflect.TypeToken;
@@ -2112,7 +2113,11 @@ public boolean finalizeVirtualMachineProfile(final VirtualMachineProfile profile
21122113
profile.getTemplate());
21132114
String userData = userVmManager.finalizeUserData(null, userDataId, profile.getTemplate());
21142115
if (StringUtils.isNotBlank(userData)) {
2115-
String encodedUserData = Base64.getEncoder().encodeToString(userData.getBytes());
2116+
// Decode base64 user data, compress it, then re-encode to reduce command line length
2117+
String plainTextUserData = new String(Base64.getDecoder().decode(userData));
2118+
CompressionUtil compressionUtil = new CompressionUtil();
2119+
byte[] compressedUserData = compressionUtil.compressString(plainTextUserData);
2120+
String encodedUserData = Base64.getEncoder().encodeToString(compressedUserData);
21162121
buf.append(" userdata=").append(encodedUserData);
21172122
}
21182123
} catch (Exception e) {

services/secondary-storage/controller/src/main/java/org/apache/cloudstack/secondarystorage/SecondaryStorageManagerImpl.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import javax.inject.Inject;
3737
import javax.naming.ConfigurationException;
3838

39+
import com.cloud.utils.compression.CompressionUtil;
3940
import com.cloud.vm.UserVmManager;
4041
import org.apache.cloudstack.agent.lb.IndirectAgentLB;
4142
import org.apache.cloudstack.ca.CAManager;
@@ -1244,7 +1245,11 @@ public boolean finalizeVirtualMachineProfile(VirtualMachineProfile profile, Depl
12441245
profile.getTemplate());
12451246
String userData = userVmManager.finalizeUserData(null, userDataId, profile.getTemplate());
12461247
if (StringUtils.isNotBlank(userData)) {
1247-
String encodedUserData = Base64.getEncoder().encodeToString(userData.getBytes());
1248+
// Decode base64 user data, compress it, then re-encode to reduce command line length
1249+
String plainTextUserData = new String(Base64.getDecoder().decode(userData));
1250+
CompressionUtil compressionUtil = new CompressionUtil();
1251+
byte[] compressedUserData = compressionUtil.compressString(plainTextUserData);
1252+
String encodedUserData = Base64.getEncoder().encodeToString(compressedUserData);
12481253
buf.append(" userdata=").append(encodedUserData);
12491254
}
12501255
} catch (Exception e) {

systemvm/debian/opt/cloud/bin/setup/postinit.sh

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -102,11 +102,11 @@ EOF
102102
# Set up user data files (reuse the function from init.sh)
103103
mkdir -p /var/lib/cloud/seed/nocloud
104104

105-
# Decode and potentially decompress user data
105+
# Decode and decompress user data
106106
local decoded_userdata
107-
decoded_userdata=$(echo "$encoded_userdata" | base64 -d 2>/dev/null)
107+
decoded_userdata=$(echo "$encoded_userdata" | base64 -d 2>/dev/null | gunzip 2>/dev/null)
108108
if [ $? -ne 0 ] || [ -z "$decoded_userdata" ]; then
109-
log_it "ERROR: Failed to decode base64 user data"
109+
log_it "ERROR: Failed to decode or decompress user data"
110110
return 1
111111
fi
112112

0 commit comments

Comments
 (0)