Skip to content

Commit 565e229

Browse files
committed
Use userdata uuid instead of user data in global settings
1 parent d7b2b62 commit 565e229

File tree

12 files changed

+68
-15
lines changed

12 files changed

+68
-15
lines changed

api/src/main/java/org/apache/cloudstack/userdata/UserDataManager.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
// under the License.
1717
package org.apache.cloudstack.userdata;
1818

19+
import com.cloud.template.VirtualMachineTemplate;
1920
import org.apache.cloudstack.api.BaseCmd;
2021
import org.apache.cloudstack.framework.config.ConfigKey;
2122
import org.apache.cloudstack.framework.config.Configurable;
@@ -29,4 +30,5 @@ public interface UserDataManager extends Manager, Configurable {
2930

3031
String concatenateUserData(String userdata1, String userdata2, String userdataProvider);
3132
String validateUserData(String userData, BaseCmd.HTTPMethod httpmethod);
33+
String getUserDataForSystemVms(String userDataUuid, VirtualMachineTemplate vmTemplate);
3234
}

engine/userdata/src/main/java/org/apache/cloudstack/userdata/UserDataManagerImpl.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,11 @@
2222
import java.util.List;
2323
import java.util.Map;
2424

25+
import com.cloud.domain.Domain;
26+
import com.cloud.template.VirtualMachineTemplate;
27+
import com.cloud.user.User;
28+
import com.cloud.user.UserDataVO;
29+
import com.cloud.user.dao.UserDataDao;
2530
import org.apache.cloudstack.api.BaseCmd;
2631
import org.apache.cloudstack.framework.config.ConfigKey;
2732
import org.apache.commons.codec.binary.Base64;
@@ -31,7 +36,12 @@
3136
import com.cloud.utils.component.ManagerBase;
3237
import com.cloud.utils.exception.CloudRuntimeException;
3338

39+
import javax.inject.Inject;
40+
3441
public class UserDataManagerImpl extends ManagerBase implements UserDataManager {
42+
@Inject
43+
UserDataDao userDataDao;
44+
3545
private static final int MAX_USER_DATA_LENGTH_BYTES = 2048;
3646
private static final int MAX_HTTP_GET_LENGTH = 2 * MAX_USER_DATA_LENGTH_BYTES; // 4KB
3747
private static final int NUM_OF_2K_BLOCKS = 512;
@@ -118,6 +128,29 @@ public String validateUserData(String userData, BaseCmd.HTTPMethod httpmethod) {
118128
return Base64.encodeBase64String(decodedUserData);
119129
}
120130

131+
@Override
132+
public String getUserDataForSystemVms(String userDataUuid, VirtualMachineTemplate vmTemplate) {
133+
UserDataVO templateUserDataVo = userDataDao.findById(vmTemplate.getUserDataId());
134+
UserDataVO userDataVo = userDataDao.findByUuid(userDataUuid);
135+
String templateUserData = validateAndGetUserDataForSystemVm(templateUserDataVo);
136+
String userData = validateAndGetUserDataForSystemVm(userDataVo);
137+
if (templateUserData == null && userData == null) {
138+
return null;
139+
} else if (templateUserData != null && userData == null) {
140+
return templateUserData;
141+
} else if (userData != null && templateUserData == null) {
142+
return userData;
143+
}
144+
return concatenateUserData(templateUserData, userData, null);
145+
}
146+
147+
private String validateAndGetUserDataForSystemVm(UserDataVO userData) {
148+
if (userData.getDomainId() == Domain.ROOT_DOMAIN && userData.getAccountId() == User.UID_ADMIN) {
149+
return userData.getUserData();
150+
}
151+
return null;
152+
}
153+
121154
private byte[] validateAndDecodeByHTTPMethod(String userData, int maxHTTPLength, BaseCmd.HTTPMethod httpMethod) {
122155
byte[] decodedUserData = Base64.decodeBase64(userData.getBytes());
123156
if (decodedUserData == null || decodedUserData.length < 1) {

framework/config/src/main/java/org/apache/cloudstack/framework/config/ConfigKey.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ public class ConfigKey<T> {
4141
public static final String CATEGORY_ADVANCED = "Advanced";
4242
public static final String CATEGORY_ALERT = "Alert";
4343
public static final String CATEGORY_NETWORK = "Network";
44-
public static final String CATEGORY_SECURE = "Secure";
4544
public static final String CATEGORY_SYSTEM = "System";
4645

4746
// Configuration Groups to be used to define group for a config key

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService;
3737
import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
3838
import org.apache.cloudstack.managed.context.ManagedContextRunnable;
39+
import org.apache.cloudstack.userdata.UserDataManager;
3940
import org.apache.commons.lang3.StringUtils;
4041
import org.springframework.stereotype.Component;
4142

@@ -141,6 +142,8 @@ public class ElasticLoadBalancerManagerImpl extends ManagerBase implements Elast
141142
private ElasticLbVmMapDao _elbVmMapDao;
142143
@Inject
143144
private NicDao _nicDao;
145+
@Inject
146+
private UserDataManager userDataManager;
144147

145148
String _instance;
146149

@@ -484,7 +487,8 @@ public boolean finalizeVirtualMachineProfile(VirtualMachineProfile profile, Depl
484487
buf.append(" authorized_key=").append(VirtualMachineGuru.getEncodedMsPublicKey(msPublicKey));
485488

486489
if (SystemVmEnableUserData.valueIn(dc.getId())) {
487-
String userData = RouterUserData.valueIn(dc.getId());
490+
String userDataUuid = RouterUserData.valueIn(dc.getId());
491+
String userData = userDataManager.getUserDataForSystemVms(userDataUuid, profile.getTemplate());
488492
if (StringUtils.isNotBlank(userData)) {
489493
String encodedUserData = Base64.getEncoder().encodeToString(userData.getBytes());
490494
buf.append(" userdata=").append(encodedUserData);

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
4343
import org.apache.cloudstack.lb.ApplicationLoadBalancerRuleVO;
4444
import org.apache.cloudstack.lb.dao.ApplicationLoadBalancerRuleDao;
45+
import org.apache.cloudstack.userdata.UserDataManager;
4546
import org.apache.commons.collections.CollectionUtils;
4647

4748
import com.cloud.agent.AgentManager;
@@ -179,6 +180,8 @@ public class InternalLoadBalancerVMManagerImpl extends ManagerBase implements In
179180
ResourceManager _resourceMgr;
180181
@Inject
181182
UserDao _userDao;
183+
@Inject
184+
private UserDataManager userDataManager;
182185

183186
@Override
184187
public boolean finalizeVirtualMachineProfile(final VirtualMachineProfile profile, final DeployDestination dest, final ReservationContext context) {
@@ -249,7 +252,8 @@ public boolean finalizeVirtualMachineProfile(final VirtualMachineProfile profile
249252

250253
long dcId = profile.getVirtualMachine().getDataCenterId();
251254
if (SystemVmEnableUserData.valueIn(dcId)) {
252-
String userData = RouterUserData.valueIn(dcId);
255+
String userDataUuid = RouterUserData.valueIn(dcId);
256+
String userData = userDataManager.getUserDataForSystemVms(userDataUuid, profile.getTemplate());
253257
if (StringUtils.isNotBlank(userData)) {
254258
String encodedUserData = Base64.getEncoder().encodeToString(userData.getBytes());
255259
buf.append(" userdata=").append(encodedUserData);

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,8 @@ public interface ConsoleProxyManager extends Manager, ConsoleProxyService {
9494
"last console proxy service management state", false, ConfigKey.Kind.Select, consoleProxyManagementStates);
9595

9696
ConfigKey<String> ConsoleProxyUserData = new ConfigKey<>(String.class, "consoleproxy.userdata",
97-
ConfigKey.CATEGORY_SECURE, "",
98-
"Default user data for console proxy VMs. This works only when systemvm.userdata.enabled is set to true",
97+
ConfigKey.CATEGORY_ADVANCED, "",
98+
"UUID for user data for console proxy VMs. This works only when systemvm.userdata.enabled is set to true",
9999
true, ConfigKey.Scope.Zone, null, "User Data for CPVMs",
100100
null, ConfigKey.GROUP_SYSTEM_VMS, ConfigKey.SUBGROUP_CONSOLE_PROXY_VM);
101101

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
5050
import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
5151
import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreDao;
52+
import org.apache.cloudstack.userdata.UserDataManager;
5253
import org.apache.commons.collections.CollectionUtils;
5354
import org.apache.commons.lang3.BooleanUtils;
5455

@@ -230,6 +231,8 @@ public class ConsoleProxyManagerImpl extends ManagerBase implements ConsoleProxy
230231
private CAManager caManager;
231232
@Inject
232233
private NetworkOrchestrationService networkMgr;
234+
@Inject
235+
private UserDataManager userDataManager;
233236

234237
private ConsoleProxyListener consoleProxyListener;
235238

@@ -1270,7 +1273,8 @@ public boolean finalizeVirtualMachineProfile(VirtualMachineProfile profile, Depl
12701273
buf.append(" keystore_password=").append(VirtualMachineGuru.getEncodedString(PasswordGenerator.generateRandomPassword(16)));
12711274

12721275
if (SystemVmEnableUserData.valueIn(dc.getId())) {
1273-
String userData = ConsoleProxyUserData.valueIn(dc.getId());
1276+
String userDataUuid = ConsoleProxyUserData.valueIn(dc.getId());
1277+
String userData = userDataManager.getUserDataForSystemVms(userDataUuid, profile.getTemplate());
12741278
if (StringUtils.isNotBlank(userData)) {
12751279
String encodedUserData = Base64.getEncoder().encodeToString(userData.getBytes());
12761280
buf.append(" userdata=").append(encodedUserData);

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,8 @@ public interface VirtualNetworkApplianceManager extends Manager, VirtualNetworkA
6565
"Name of the default router template on Ovm3.", true, ConfigKey.Scope.Zone, null);
6666

6767
ConfigKey<String> RouterUserData = new ConfigKey<>(String.class, "router.userdata",
68-
ConfigKey.CATEGORY_SECURE, "",
69-
"Default user data for VR, VPC VR, internal LB, and elastic LB. This works only when systemvm.userdata.enabled is set to true",
68+
ConfigKey.CATEGORY_ADVANCED, "",
69+
"UUID for user data of VR, VPC VR, internal LB, and elastic LB. This works only when systemvm.userdata.enabled is set to true",
7070
true, ConfigKey.Scope.Zone, null, "User Data for VRs",
7171
null, ConfigKey.GROUP_SYSTEM_VMS, ConfigKey.SUBGROUP_VIRTUAL_ROUTER);
7272

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@
7373
import org.apache.cloudstack.network.RoutedIpv4Manager;
7474
import org.apache.cloudstack.network.topology.NetworkTopology;
7575
import org.apache.cloudstack.network.topology.NetworkTopologyContext;
76+
import org.apache.cloudstack.userdata.UserDataManager;
7677
import org.apache.cloudstack.utils.CloudStackVersion;
7778
import org.apache.cloudstack.utils.identity.ManagementServerNode;
7879
import org.apache.cloudstack.utils.usage.UsageUtils;
@@ -354,6 +355,9 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
354355
@Inject
355356
BGPService bgpService;
356357

358+
@Inject
359+
private UserDataManager userDataManager;
360+
357361
private int _routerStatsInterval = 300;
358362
private int _routerCheckInterval = 30;
359363
private int _rvrStatusUpdatePoolSize = 10;
@@ -2099,7 +2103,8 @@ public boolean finalizeVirtualMachineProfile(final VirtualMachineProfile profile
20992103
buf.append(String.format(" logrotatefrequency=%s", routerLogrotateFrequency));
21002104

21012105
if (SystemVmEnableUserData.valueIn(router.getDataCenterId())) {
2102-
String userData = RouterUserData.valueIn(router.getDataCenterId());
2106+
String userDataUuid = RouterUserData.valueIn(dc.getId());
2107+
String userData = userDataManager.getUserDataForSystemVms(userDataUuid, profile.getTemplate());
21032108
if (StringUtils.isNotBlank(userData)) {
21042109
String encodedUserData = Base64.getEncoder().encodeToString(userData.getBytes());
21052110
buf.append(" userdata=").append(encodedUserData);

server/src/main/java/com/cloud/storage/secondary/SecondaryStorageVmManager.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@ public interface SecondaryStorageVmManager extends Manager {
4545
false);
4646

4747
ConfigKey<String> SecondaryStorageUserData = new ConfigKey<>(String.class, "secstorage.userdata",
48-
ConfigKey.CATEGORY_SECURE, "",
49-
"Default user data for secondary storage VMs. This works only when systemvm.userdata.enabled is set to true",
48+
ConfigKey.CATEGORY_ADVANCED, "",
49+
"UUID for user data for secondary storage VMs. This works only when systemvm.userdata.enabled is set to true",
5050
true, ConfigKey.Scope.Zone, null, "User Data for SSVMs",
5151
null, ConfigKey.GROUP_SYSTEM_VMS, ConfigKey.SUBGROUP_SEC_STORAGE_VM);
5252

0 commit comments

Comments
 (0)