Skip to content

Commit 76000a7

Browse files
committed
Don't use userdata in system VM's template
1 parent 926cb1d commit 76000a7

File tree

7 files changed

+16
-25
lines changed

7 files changed

+16
-25
lines changed

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

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

19-
import com.cloud.template.VirtualMachineTemplate;
2019
import org.apache.cloudstack.api.BaseCmd;
2120
import org.apache.cloudstack.framework.config.ConfigKey;
2221
import org.apache.cloudstack.framework.config.Configurable;
@@ -30,5 +29,5 @@ public interface UserDataManager extends Manager, Configurable {
3029

3130
String concatenateUserData(String userdata1, String userdata2, String userdataProvider);
3231
String validateUserData(String userData, BaseCmd.HTTPMethod httpmethod);
33-
Long validateAndGetUserDataIdForSystemVms(String userDataUuid, VirtualMachineTemplate vmTemplate);
32+
String validateAndGetUserDataForSystemVM(String userDataUuid);
3433
}

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

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
import java.util.Map;
2424

2525
import com.cloud.domain.Domain;
26-
import com.cloud.template.VirtualMachineTemplate;
2726
import com.cloud.user.User;
2827
import com.cloud.user.UserDataVO;
2928
import com.cloud.user.dao.UserDataDao;
@@ -129,20 +128,20 @@ public String validateUserData(String userData, BaseCmd.HTTPMethod httpmethod) {
129128
}
130129

131130
@Override
132-
public Long validateAndGetUserDataIdForSystemVms(String userDataUuid, VirtualMachineTemplate vmTemplate) {
133-
UserDataVO templateUserDataVo = vmTemplate.getUserDataId() != null ? userDataDao.findById(vmTemplate.getUserDataId()): null;
134-
UserDataVO userDataVo = StringUtils.isNotBlank(userDataUuid) ? userDataDao.findByUuid(userDataUuid) : null;
135-
if (isUserDataAllowedForSystemVm(templateUserDataVo) &&
136-
isUserDataAllowedForSystemVm(userDataVo)) {
137-
return userDataVo != null ? userDataVo.getId() : null;
131+
public String validateAndGetUserDataForSystemVM(String userDataUuid) {
132+
if (StringUtils.isBlank(userDataUuid)) {
133+
return null;
134+
}
135+
UserDataVO userDataVo = userDataDao.findByUuid(userDataUuid);
136+
if (userDataVo == null) {
137+
return null;
138+
}
139+
if (userDataVo.getDomainId() == Domain.ROOT_DOMAIN && userDataVo.getAccountId() == User.UID_ADMIN) {
140+
return userDataVo.getUserData();
138141
}
139142
throw new CloudRuntimeException("User data can only be used by system VMs if it belongs to the ROOT domain and ADMIN account.");
140143
}
141144

142-
private boolean isUserDataAllowedForSystemVm(UserDataVO userData) {
143-
return userData == null || (userData.getDomainId() == Domain.ROOT_DOMAIN && userData.getAccountId() == User.UID_ADMIN);
144-
}
145-
146145
private byte[] validateAndDecodeByHTTPMethod(String userData, int maxHTTPLength, BaseCmd.HTTPMethod httpMethod) {
147146
byte[] decodedUserData = Base64.decodeBase64(userData.getBytes());
148147
if (decodedUserData == null || decodedUserData.length < 1) {

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -493,8 +493,7 @@ public boolean finalizeVirtualMachineProfile(VirtualMachineProfile profile, Depl
493493
if (SystemVmEnableUserData.valueIn(dc.getId())) {
494494
String userDataUuid = RouterUserData.valueIn(dc.getId());
495495
try {
496-
Long userDataId = userDataManager.validateAndGetUserDataIdForSystemVms(userDataUuid, profile.getTemplate());
497-
String userData = userVmManager.finalizeUserData(null, userDataId, profile.getTemplate());
496+
String userData = userDataManager.validateAndGetUserDataForSystemVM(userDataUuid);
498497
if (StringUtils.isNotBlank(userData)) {
499498
// Decode base64 user data, compress it, then re-encode to reduce command line length
500499
String plainTextUserData = new String(Base64.getDecoder().decode(userData));

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -258,8 +258,7 @@ public boolean finalizeVirtualMachineProfile(final VirtualMachineProfile profile
258258
if (SystemVmEnableUserData.valueIn(dcId)) {
259259
String userDataUuid = RouterUserData.valueIn(dcId);
260260
try {
261-
Long userDataId = userDataManager.validateAndGetUserDataIdForSystemVms(userDataUuid, profile.getTemplate());
262-
String userData = userVmManager.finalizeUserData(null, userDataId, profile.getTemplate());
261+
String userData = userDataManager.validateAndGetUserDataForSystemVM(userDataUuid);
263262
if (StringUtils.isNotBlank(userData)) {
264263
// Decode base64 user data, compress it, then re-encode to reduce command line length
265264
String plainTextUserData = new String(Base64.getDecoder().decode(userData));

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1279,8 +1279,7 @@ public boolean finalizeVirtualMachineProfile(VirtualMachineProfile profile, Depl
12791279
if (SystemVmEnableUserData.valueIn(dc.getId())) {
12801280
String userDataUuid = ConsoleProxyUserData.valueIn(dc.getId());
12811281
try {
1282-
Long userDataId = userDataManager.validateAndGetUserDataIdForSystemVms(userDataUuid, profile.getTemplate());
1283-
String userData = userVmManager.finalizeUserData(null, userDataId, profile.getTemplate());
1282+
String userData = userDataManager.validateAndGetUserDataForSystemVM(userDataUuid);
12841283
if (StringUtils.isNotBlank(userData)) {
12851284
// Decode base64 user data, compress it, then re-encode to reduce command line length
12861285
String plainTextUserData = new String(Base64.getDecoder().decode(userData));

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

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2109,9 +2109,7 @@ public boolean finalizeVirtualMachineProfile(final VirtualMachineProfile profile
21092109
if (SystemVmEnableUserData.valueIn(router.getDataCenterId())) {
21102110
String userDataUuid = RouterUserData.valueIn(dc.getId());
21112111
try {
2112-
Long userDataId = userDataManager.validateAndGetUserDataIdForSystemVms(userDataUuid,
2113-
profile.getTemplate());
2114-
String userData = userVmManager.finalizeUserData(null, userDataId, profile.getTemplate());
2112+
String userData = userDataManager.validateAndGetUserDataForSystemVM(userDataUuid);
21152113
if (StringUtils.isNotBlank(userData)) {
21162114
// Decode base64 user data, compress it, then re-encode to reduce command line length
21172115
String plainTextUserData = new String(Base64.getDecoder().decode(userData));

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

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1241,9 +1241,7 @@ public boolean finalizeVirtualMachineProfile(VirtualMachineProfile profile, Depl
12411241
if (SystemVmEnableUserData.valueIn(dc.getId())) {
12421242
String userDataUuid = SecondaryStorageUserData.valueIn(dc.getId());
12431243
try {
1244-
Long userDataId = userDataManager.validateAndGetUserDataIdForSystemVms(userDataUuid,
1245-
profile.getTemplate());
1246-
String userData = userVmManager.finalizeUserData(null, userDataId, profile.getTemplate());
1244+
String userData = userDataManager.validateAndGetUserDataForSystemVM(userDataUuid);
12471245
if (StringUtils.isNotBlank(userData)) {
12481246
// Decode base64 user data, compress it, then re-encode to reduce command line length
12491247
String plainTextUserData = new String(Base64.getDecoder().decode(userData));

0 commit comments

Comments
 (0)