Skip to content

Commit e03b95a

Browse files
committed
md-ova: implement diskoffering selections for data disks
Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
1 parent 2c9f2e9 commit e03b95a

File tree

6 files changed

+45
-13
lines changed

6 files changed

+45
-13
lines changed

api/src/org/apache/cloudstack/api/ApiConstants.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ public class ApiConstants {
7171
public static final String MIN_IOPS = "miniops";
7272
public static final String MAX_IOPS = "maxiops";
7373
public static final String HYPERVISOR_SNAPSHOT_RESERVE = "hypervisorsnapshotreserve";
74-
public static final String DATADISKTEMPLATE_TO_DISKOFFERING_LIST = "datadisktemplatetodiskofferinglist";
74+
public static final String DATADISK_OFFERING_LIST = "datadiskofferinglist";
7575
public static final String DESCRIPTION = "description";
7676
public static final String DESTINATION_ZONE_ID = "destzoneid";
7777
public static final String DETAILS = "details";

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ public class DeployVMCmd extends BaseAsyncCreateCustomIdCmd implements SecurityG
186186
@Parameter(name = ApiConstants.DEPLOYMENT_PLANNER, type = CommandType.STRING, description = "Deployment planner to use for vm allocation. Available to ROOT admin only", since = "4.4", authorized = { RoleType.Admin })
187187
private String deploymentPlanner;
188188

189-
@Parameter(name = ApiConstants.DATADISKTEMPLATE_TO_DISKOFFERING_LIST, type = CommandType.MAP, since = "4.4", description = "datadisk template to disk-offering mapping;" +
189+
@Parameter(name = ApiConstants.DATADISK_OFFERING_LIST, type = CommandType.MAP, since = "4.10", description = "datadisk template to disk-offering mapping;" +
190190
" an optional parameter used to create additional data disks from datadisk templates; can't be specified with diskOfferingId parameter")
191191
private Map dataDiskTemplateToDiskOfferingList;
192192

api/src/org/apache/cloudstack/api/response/TemplateResponse.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818

1919
import java.util.Date;
2020
import java.util.LinkedHashSet;
21-
import java.util.List;
2221
import java.util.Map;
2322
import java.util.Set;
2423

@@ -186,9 +185,9 @@ public class TemplateResponse extends BaseResponseWithTagInformation implements
186185
@Param(description = "if Datadisk template, then id of the root disk template this template belongs to")
187186
private String parentTemplateId;
188187

189-
@SerializedName("childtemplateids")
188+
@SerializedName("childtemplates")
190189
@Param(description = "if root disk template, then ids of the datas disk templates this template owns")
191-
private List<String> childTemplateIds;
190+
private Map<String, String> childTemplates;
192191

193192
public TemplateResponse() {
194193
tags = new LinkedHashSet<ResourceTagResponse>();
@@ -368,8 +367,8 @@ public void setParentTemplateId(String parentTemplateId) {
368367
this.parentTemplateId = parentTemplateId;
369368
}
370369

371-
public void setChildTemplateIds(List<String> childTemplateIds) {
372-
this.childTemplateIds = childTemplateIds;
370+
public void setChildTemplates(Map<String, String> childTemplateIds) {
371+
this.childTemplates = childTemplateIds;
373372
}
374373

375374
}

engine/schema/src/com/cloud/storage/dao/VMTemplateDaoImpl.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,6 @@ public VMTemplateVO findByTemplateName(String templateName) {
138138

139139
@Override
140140
public List<VMTemplateVO> listByParentTemplatetId(long parentTemplatetId) {
141-
new Exception().printStackTrace();
142141
SearchCriteria<VMTemplateVO> sc = ParentTemplateIdSearch.create();
143142
sc.setParameters("parentTemplateId", parentTemplatetId);
144143
sc.setParameters("state", VirtualMachineTemplate.State.Active);

server/src/com/cloud/api/query/dao/TemplateJoinDaoImpl.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -203,8 +203,8 @@ public TemplateResponse newTemplateResponse(ResponseView view, TemplateJoinVO te
203203
//set template children disks
204204
if (template.getHypervisorType() == HypervisorType.VMware) {
205205
List<VMTemplateVO> childTemplates = _vmTemplateDao.listByParentTemplatetId(template.getId());
206-
List<String> childUuids = childTemplates.stream().map(VMTemplateVO::getUuid).collect(Collectors.toList());
207-
templateResponse.setChildTemplateIds(childUuids);
206+
Map<String, String> childUuidNameMap = childTemplates.stream().collect(Collectors.toMap(VMTemplateVO::getUuid, VMTemplateVO::getName));
207+
templateResponse.setChildTemplates(childUuidNameMap);
208208
}
209209

210210
templateResponse.setObjectName("template");

ui/scripts/instanceWizard.js

Lines changed: 37 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -376,21 +376,46 @@
376376

377377
// Step 4: Data disk offering
378378
function(args) {
379-
var isRequred = (args.currentData["select-template"] == "select-iso" ? true : false);
379+
var isRequired = (args.currentData["select-template"] == "select-iso" ? true : false);
380380
$.ajax({
381381
url: createURL("listDiskOfferings"),
382382
dataType: "json",
383383
async: true,
384384
success: function(json) {
385385
diskOfferingObjs = json.listdiskofferingsresponse.diskoffering;
386+
var multiDisks = false;
387+
if (!isRequired) {
388+
$.ajax({
389+
url: createURL("listTemplates"),
390+
data: {
391+
id: args.currentData.templateid,
392+
templatefilter: 'all'
393+
},
394+
dataType: "json",
395+
async: false,
396+
success: function(json) {
397+
var templateDataDisks = json.listtemplatesresponse.template[0].childtemplates;
398+
if (templateDataDisks && Object.keys(templateDataDisks).length > 0) {
399+
multiDisks = [];
400+
$.each(templateDataDisks, function(uuid, name) {
401+
multiDisks.push({
402+
id: uuid,
403+
label: name
404+
});
405+
});
406+
}
407+
}
408+
});
409+
}
410+
386411
args.response.success({
387-
required: isRequred,
412+
required: isRequired,
388413
customFlag: 'iscustomized', // Field determines if custom slider is shown
389414
customIopsDoFlag: 'iscustomizediops',
390415
data: {
391416
diskOfferings: diskOfferingObjs
392417
},
393-
multiDisk: false
418+
multiDisk: multiDisks
394419
});
395420
}
396421
});
@@ -815,6 +840,15 @@
815840
}
816841
}
817842

843+
if (args.data["disk-offerings-multi"] != null && args.data["disk-offerings-multi"].length > 0) {
844+
$(args.data["disk-offerings-multi"]).each(function(index, disk) {
845+
var diskMap = {};
846+
diskMap['datadiskofferinglist[' + index + '].datadisktemplateid'] = disk.id;
847+
diskMap['datadiskofferinglist[' + index + '].diskofferingid'] = disk._diskOfferingId;
848+
$.extend(deployVmData, diskMap);
849+
});
850+
}
851+
818852
//step 5: select an affinity group
819853
var checkedAffinityGroupIdArray;
820854
if (typeof(args.data["affinity-groups"]) == "object" && args.data["affinity-groups"].length != null) { //args.data["affinity-groups"] is an array of string, e.g. ["2375f8cc-8a73-4b8d-9b26-50885a25ffe0", "27c60d2a-de7f-4bb7-96e5-a602cec681df","c6301d77-99b5-4e8a-85e2-3ea2ab31c342"],

0 commit comments

Comments
 (0)