Skip to content

Commit 78bdde9

Browse files
AutoScaling: support Managed User Data (#7769)
1 parent 405ef82 commit 78bdde9

File tree

27 files changed

+785
-128
lines changed

27 files changed

+785
-128
lines changed

api/src/main/java/com/cloud/network/as/AutoScaleVmProfile.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,10 @@ public interface AutoScaleVmProfile extends ControlledEntity, InternalIdentity,
3535

3636
String getUserData();
3737

38+
Long getUserDataId();
39+
40+
String getUserDataDetails();
41+
3842
public String getUuid();
3943

4044
public Long getZoneId();

api/src/main/java/org/apache/cloudstack/api/BaseCmd.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,10 @@
2121
import java.text.DateFormat;
2222
import java.text.SimpleDateFormat;
2323
import java.util.ArrayList;
24+
import java.util.Collection;
2425
import java.util.Date;
2526
import java.util.HashMap;
27+
import java.util.Iterator;
2628
import java.util.List;
2729
import java.util.Map;
2830
import java.util.regex.Pattern;
@@ -42,6 +44,7 @@
4244
import org.apache.cloudstack.query.QueryService;
4345
import org.apache.cloudstack.storage.ImageStoreService;
4446
import org.apache.cloudstack.usage.UsageService;
47+
import org.apache.commons.collections.MapUtils;
4548
import org.apache.log4j.Logger;
4649

4750
import com.cloud.configuration.ConfigurationService;
@@ -456,4 +459,18 @@ public ApiCommandResourceType getApiResourceType() {
456459
return ApiCommandResourceType.None;
457460
}
458461

462+
public Map<String, String> convertDetailsToMap(Map details) {
463+
Map<String, String> detailsMap = new HashMap<String, String>();
464+
if (MapUtils.isNotEmpty(details)) {
465+
Collection parameterCollection = details.values();
466+
Iterator iter = parameterCollection.iterator();
467+
while (iter.hasNext()) {
468+
HashMap<String, String> value = (HashMap<String, String>)iter.next();
469+
for (Map.Entry<String,String> entry: value.entrySet()) {
470+
detailsMap.put(entry.getKey(),entry.getValue());
471+
}
472+
}
473+
}
474+
return detailsMap;
475+
}
459476
}

api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/CreateAutoScaleVmProfileCmd.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import org.apache.cloudstack.api.response.ProjectResponse;
3636
import org.apache.cloudstack.api.response.ServiceOfferingResponse;
3737
import org.apache.cloudstack.api.response.TemplateResponse;
38+
import org.apache.cloudstack.api.response.UserDataResponse;
3839
import org.apache.cloudstack.api.response.UserResponse;
3940
import org.apache.cloudstack.api.response.ZoneResponse;
4041
import org.apache.cloudstack.context.CallContext;
@@ -107,6 +108,12 @@ public class CreateAutoScaleVmProfileCmd extends BaseAsyncCreateCmd {
107108
since = "4.18.0")
108109
private String userData;
109110

111+
@Parameter(name = ApiConstants.USER_DATA_ID, type = CommandType.UUID, entityType = UserDataResponse.class, description = "the ID of the Userdata", since = "4.18.1")
112+
private Long userDataId;
113+
114+
@Parameter(name = ApiConstants.USER_DATA_DETAILS, type = CommandType.MAP, description = "used to specify the parameters values for the variables in userdata.", since = "4.18.1")
115+
private Map userDataDetails;
116+
110117
@Parameter(name = ApiConstants.AUTOSCALE_USER_ID,
111118
type = CommandType.UUID,
112119
entityType = UserResponse.class,
@@ -163,6 +170,14 @@ public String getUserData() {
163170
return userData;
164171
}
165172

173+
public Long getUserDataId() {
174+
return userDataId;
175+
}
176+
177+
public Map<String, String> getUserDataDetails() {
178+
return convertDetailsToMap(userDataDetails);
179+
}
180+
166181
public Long getAutoscaleUserId() {
167182
return autoscaleUserId;
168183
}

api/src/main/java/org/apache/cloudstack/api/command/user/autoscale/UpdateAutoScaleVmProfileCmd.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import org.apache.cloudstack.api.response.AutoScaleVmProfileResponse;
3636
import org.apache.cloudstack.api.response.ServiceOfferingResponse;
3737
import org.apache.cloudstack.api.response.TemplateResponse;
38+
import org.apache.cloudstack.api.response.UserDataResponse;
3839
import org.apache.cloudstack.api.response.UserResponse;
3940
import org.apache.cloudstack.context.CallContext;
4041

@@ -102,6 +103,14 @@ public class UpdateAutoScaleVmProfileCmd extends BaseAsyncCustomIdCmd {
102103
since = "4.18.0")
103104
private String userData;
104105

106+
@Parameter(name = ApiConstants.USER_DATA_ID, type = CommandType.UUID, entityType = UserDataResponse.class, description = "the ID of the userdata",
107+
since = "4.18.1")
108+
private Long userDataId;
109+
110+
@Parameter(name = ApiConstants.USER_DATA_DETAILS, type = CommandType.MAP, description = "used to specify the parameters values for the variables in userdata.",
111+
since = "4.18.1")
112+
private Map userDataDetails;
113+
105114
@Parameter(name = ApiConstants.AUTOSCALE_USER_ID,
106115
type = CommandType.UUID,
107116
entityType = UserResponse.class,
@@ -156,6 +165,14 @@ public String getUserData() {
156165
return userData;
157166
}
158167

168+
public Long getUserDataId() {
169+
return userDataId;
170+
}
171+
172+
public Map<String, String> getUserDataDetails() {
173+
return convertDetailsToMap(userDataDetails);
174+
}
175+
159176
public Long getAutoscaleUserId() {
160177
return autoscaleUserId;
161178
}

api/src/main/java/org/apache/cloudstack/api/command/user/vm/DeployVMCmd.java

Lines changed: 3 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -309,17 +309,8 @@ public ApiConstants.BootType getBootType() {
309309
}
310310

311311
public Map<String, String> getDetails() {
312-
Map<String, String> customparameterMap = new HashMap<String, String>();
313-
if (details != null && details.size() != 0) {
314-
Collection parameterCollection = details.values();
315-
Iterator iter = parameterCollection.iterator();
316-
while (iter.hasNext()) {
317-
HashMap<String, String> value = (HashMap<String, String>)iter.next();
318-
for (Map.Entry<String,String> entry: value.entrySet()) {
319-
customparameterMap.put(entry.getKey(),entry.getValue());
320-
}
321-
}
322-
}
312+
Map<String, String> customparameterMap = convertDetailsToMap(details);
313+
323314
if (getBootType() != null) {
324315
customparameterMap.put(getBootType().toString(), getBootMode().toString());
325316
}
@@ -450,18 +441,7 @@ public Long getUserdataId() {
450441
}
451442

452443
public Map<String, String> getUserdataDetails() {
453-
Map<String, String> userdataDetailsMap = new HashMap<String, String>();
454-
if (userdataDetails != null && userdataDetails.size() != 0) {
455-
Collection parameterCollection = userdataDetails.values();
456-
Iterator iter = parameterCollection.iterator();
457-
while (iter.hasNext()) {
458-
HashMap<String, String> value = (HashMap<String, String>)iter.next();
459-
for (Map.Entry<String,String> entry: value.entrySet()) {
460-
userdataDetailsMap.put(entry.getKey(),entry.getValue());
461-
}
462-
}
463-
}
464-
return userdataDetailsMap;
444+
return convertDetailsToMap(userdataDetails);
465445
}
466446

467447
public Long getZoneId() {

api/src/main/java/org/apache/cloudstack/api/command/user/vm/ResetVMUserDataCmd.java

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,6 @@
3939
import org.apache.cloudstack.context.CallContext;
4040
import org.apache.log4j.Logger;
4141

42-
import java.util.Collection;
43-
import java.util.HashMap;
44-
import java.util.Iterator;
4542
import java.util.Map;
4643

4744
@APICommand(name = "resetUserDataForVirtualMachine", responseObject = UserVmResponse.class, description = "Resets the UserData for virtual machine. " +
@@ -117,18 +114,7 @@ public Long getUserdataId() {
117114
}
118115

119116
public Map<String, String> getUserdataDetails() {
120-
Map<String, String> userdataDetailsMap = new HashMap<String, String>();
121-
if (userdataDetails != null && userdataDetails.size() != 0) {
122-
Collection parameterCollection = userdataDetails.values();
123-
Iterator iter = parameterCollection.iterator();
124-
while (iter.hasNext()) {
125-
HashMap<String, String> value = (HashMap<String, String>)iter.next();
126-
for (Map.Entry<String,String> entry: value.entrySet()) {
127-
userdataDetailsMap.put(entry.getKey(),entry.getValue());
128-
}
129-
}
130-
}
131-
return userdataDetailsMap;
117+
return convertDetailsToMap(userdataDetails);
132118
}
133119

134120
@Override

api/src/main/java/org/apache/cloudstack/api/command/user/vm/ScaleVMCmd.java

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,6 @@
1616
// under the License.
1717
package org.apache.cloudstack.api.command.user.vm;
1818

19-
import java.util.Collection;
20-
import java.util.HashMap;
21-
import java.util.Iterator;
2219
import java.util.List;
2320
import java.util.Map;
2421

@@ -99,17 +96,7 @@ public Long getServiceOfferingId() {
9996
//it is because details.values() cannot be cast to a map.
10097
//it gives a exception
10198
public Map<String, String> getDetails() {
102-
Map<String, String> customparameterMap = new HashMap<String, String>();
103-
if (details != null && details.size() != 0) {
104-
Collection parameterCollection = details.values();
105-
Iterator iter = parameterCollection.iterator();
106-
while (iter.hasNext()) {
107-
HashMap<String, String> value = (HashMap<String, String>)iter.next();
108-
for (String key : value.keySet()) {
109-
customparameterMap.put(key, value.get(key));
110-
}
111-
}
112-
}
99+
Map<String, String> customparameterMap = convertDetailsToMap(details);
113100

114101
if (shrinkOk != null) customparameterMap.put(ApiConstants.SHRINK_OK, String.valueOf(isShrinkOk()));
115102
if (autoMigrate != null) customparameterMap.put(ApiConstants.AUTO_MIGRATE, String.valueOf(getAutoMigrate()));

api/src/main/java/org/apache/cloudstack/api/command/user/vm/UpdateVMCmd.java

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818

1919
import java.util.Collection;
2020
import java.util.HashMap;
21-
import java.util.Iterator;
2221
import java.util.List;
2322
import java.util.Map;
2423

@@ -176,18 +175,7 @@ public Long getUserdataId() {
176175
}
177176

178177
public Map<String, String> getUserdataDetails() {
179-
Map<String, String> userdataDetailsMap = new HashMap<String, String>();
180-
if (userdataDetails != null && userdataDetails.size() != 0) {
181-
Collection parameterCollection = userdataDetails.values();
182-
Iterator iter = parameterCollection.iterator();
183-
while (iter.hasNext()) {
184-
HashMap<String, String> value = (HashMap<String, String>)iter.next();
185-
for (Map.Entry<String,String> entry: value.entrySet()) {
186-
userdataDetailsMap.put(entry.getKey(),entry.getValue());
187-
}
188-
}
189-
}
190-
return userdataDetailsMap;
178+
return convertDetailsToMap(userdataDetails);
191179
}
192180

193181
public Boolean getDisplayVm() {

api/src/main/java/org/apache/cloudstack/api/command/user/vm/UpgradeVMCmd.java

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,6 @@
1616
// under the License.
1717
package org.apache.cloudstack.api.command.user.vm;
1818

19-
import java.util.Collection;
20-
import java.util.HashMap;
21-
import java.util.Iterator;
2219
import java.util.Map;
2320

2421
import org.apache.log4j.Logger;
@@ -95,17 +92,7 @@ public Long getServiceOfferingId() {
9592
}
9693

9794
public Map<String, String> getDetails() {
98-
Map<String, String> customparameterMap = new HashMap<String, String>();
99-
if (details != null && details.size() != 0) {
100-
Collection parameterCollection = details.values();
101-
Iterator iter = parameterCollection.iterator();
102-
while (iter.hasNext()) {
103-
HashMap<String, String> value = (HashMap<String, String>)iter.next();
104-
for (String key : value.keySet()) {
105-
customparameterMap.put(key, value.get(key));
106-
}
107-
}
108-
}
95+
Map<String, String> customparameterMap = convertDetailsToMap(details);
10996

11097
if (shrinkOk != null) customparameterMap.put(ApiConstants.SHRINK_OK, String.valueOf(isShrinkOk()));
11198
if (autoMigrate != null) customparameterMap.put(ApiConstants.AUTO_MIGRATE, String.valueOf(getAutoMigrate()));

api/src/main/java/org/apache/cloudstack/api/response/AutoScaleVmProfileResponse.java

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,18 @@ public class AutoScaleVmProfileResponse extends BaseResponse implements Controll
7272
@Param(description = "Base 64 encoded VM user data")
7373
private String userData;
7474

75+
@SerializedName(ApiConstants.USER_DATA_ID) @Param(description="the id of userdata used for the VM", since = "4.18.1")
76+
private String userDataId;
77+
78+
@SerializedName(ApiConstants.USER_DATA_NAME) @Param(description="the name of userdata used for the VM", since = "4.18.1")
79+
private String userDataName;
80+
81+
@SerializedName(ApiConstants.USER_DATA_POLICY) @Param(description="the userdata override policy with the userdata provided while deploying VM", since = "4.18.1")
82+
private String userDataPolicy;
83+
84+
@SerializedName(ApiConstants.USER_DATA_DETAILS) @Param(description="list of variables and values for the variables declared in userdata", since = "4.18.1")
85+
private String userDataDetails;
86+
7587
@SerializedName(ApiConstants.AUTOSCALE_USER_ID)
7688
@Param(description = "the ID of the user used to launch and destroy the VMs")
7789
private String autoscaleUserId;
@@ -153,6 +165,22 @@ public void setUserData(String userData) {
153165
this.userData = userData;
154166
}
155167

168+
public void setUserDataId(String userDataId) {
169+
this.userDataId = userDataId;
170+
}
171+
172+
public void setUserDataName(String userDataName) {
173+
this.userDataName = userDataName;
174+
}
175+
176+
public void setUserDataPolicy(String userDataPolicy) {
177+
this.userDataPolicy = userDataPolicy;
178+
}
179+
180+
public void setUserDataDetails(String userDataDetails) {
181+
this.userDataDetails = userDataDetails;
182+
}
183+
156184
@Override
157185
public void setAccountName(String accountName) {
158186
this.accountName = accountName;
@@ -193,4 +221,24 @@ public void setCsUrl(String csUrl) {
193221
public void setForDisplay(Boolean forDisplay) {
194222
this.forDisplay = forDisplay;
195223
}
224+
225+
public String getUserData() {
226+
return userData;
227+
}
228+
229+
public String getUserDataId() {
230+
return userDataId;
231+
}
232+
233+
public String getUserDataName() {
234+
return userDataName;
235+
}
236+
237+
public String getUserDataPolicy() {
238+
return userDataPolicy;
239+
}
240+
241+
public String getUserDataDetails() {
242+
return userDataDetails;
243+
}
196244
}

0 commit comments

Comments
 (0)