Skip to content

Commit 025ff2c

Browse files
author
Abhinandan Prateek
committed
md-ova: get disk controllers from ovf file and set them up in template details
1 parent 4e963ca commit 025ff2c

File tree

8 files changed

+343
-244
lines changed

8 files changed

+343
-244
lines changed

api/src/com/cloud/agent/api/to/DatadiskTO.java

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ public class DatadiskTO {
2525
boolean bootable;
2626
private String diskId;
2727
private boolean isIso;
28+
private String diskController;
29+
private String diskControllerSubType;
2830

2931
public DatadiskTO() {
3032
}
@@ -36,13 +38,15 @@ public DatadiskTO(String path, long virtualSize, long fileSize, boolean bootable
3638
this.bootable = bootable;
3739
}
3840

39-
public DatadiskTO(String path, long virtualSize, long fileSize, String diskId, boolean isIso, boolean bootable) {
41+
public DatadiskTO(String path, long virtualSize, long fileSize, String diskId, boolean isIso, boolean bootable, String controller, String controllerSubType) {
4042
this.path = path;
4143
this.virtualSize = virtualSize;
4244
this.fileSize = fileSize;
4345
this.bootable = bootable;
4446
this.diskId = diskId;
4547
this.isIso = isIso;
48+
this.diskController = controller;
49+
this.diskControllerSubType = controllerSubType;
4650
}
4751

4852
public String getPath() {
@@ -84,4 +88,21 @@ public boolean isIso() {
8488
public void setIso(boolean isIso) {
8589
this.isIso = isIso;
8690
}
91+
92+
public String getDiskController() {
93+
return diskController;
94+
}
95+
96+
public void setDiskController(String diskController) {
97+
this.diskController = diskController;
98+
}
99+
100+
public String getDiskControllerSubType() {
101+
return diskControllerSubType;
102+
}
103+
104+
public void setDiskControllerSubType(String diskControllerSubType) {
105+
this.diskControllerSubType = diskControllerSubType;
106+
}
107+
87108
}

engine/api/src/org/apache/cloudstack/storage/image/datastore/ImageStoreEntity.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public interface ImageStoreEntity extends DataStore, ImageStore {
5151

5252
void deleteExtractUrl(String installPath, String url, Upload.Type volume);
5353

54-
List<DatadiskTO> getDatadiskTemplates(DataObject obj);
54+
List<DatadiskTO> getDataDiskTemplates(DataObject obj);
5555

5656
Void createDataDiskTemplateAsync(TemplateInfo dataDiskTemplate, String path, String diskId, long fileSize, boolean bootable, AsyncCompletionCallback<CreateCmdResult> callback);
5757
}

engine/storage/image/src/org/apache/cloudstack/storage/image/TemplateServiceImpl.java

Lines changed: 42 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@
6262
import javax.inject.Inject;
6363
import java.util.ArrayList;
6464
import java.util.Date;
65+
import java.util.HashMap;
6566
import java.util.HashSet;
6667
import java.util.List;
6768
import java.util.Map;
@@ -715,17 +716,26 @@ protected boolean createDataDiskTemplates(TemplateInfo parentTemplate) {
715716
// Get Datadisk template (if any) for OVA
716717
List<DatadiskTO> dataDiskTemplates = new ArrayList<DatadiskTO>();
717718
ImageStoreEntity tmpltStore = (ImageStoreEntity)parentTemplate.getDataStore();
718-
dataDiskTemplates = tmpltStore.getDatadiskTemplates(parentTemplate);
719+
dataDiskTemplates = tmpltStore.getDataDiskTemplates(parentTemplate);
719720
s_logger.error("MDOVA createDataDiskTemplates Found " + dataDiskTemplates.size() + " Datadisk template(s) for template: " + parentTemplate.getId());
720721
int diskCount = 0;
721-
VMTemplateVO template = _templateDao.findById(parentTemplate.getId());
722+
VMTemplateVO templateVO = _templateDao.findById(parentTemplate.getId());
722723
DataStore imageStore = parentTemplate.getDataStore();
724+
String dataDiskController="osdefault";
725+
String rootDiskController="osdefault";
723726
for (DatadiskTO dataDiskTemplate : dataDiskTemplates) {
724727
if (!dataDiskTemplate.isBootable()){
725-
createChildDataDiskTemplate(dataDiskTemplate, template, parentTemplate, imageStore, diskCount++);
728+
createChildDataDiskTemplate(dataDiskTemplate, templateVO, parentTemplate, imageStore, diskCount++);
729+
dataDiskController = getDiskControllerDetails(dataDiskTemplate); // TODO: Additional checks to ensure that data disk controllers are consistent
726730
}
727731
else {
728-
finalizeParentTemplate(dataDiskTemplate, template, parentTemplate, imageStore, diskCount++);
732+
finalizeParentTemplate(dataDiskTemplate, templateVO, parentTemplate, imageStore, diskCount++);
733+
rootDiskController = getDiskControllerDetails(dataDiskTemplate);
734+
Map<String, String> details = new HashMap<String, String>();
735+
details.put("rootDiskController", rootDiskController);
736+
details.put("datatDiskController", dataDiskController);
737+
templateVO.setDetails(details);
738+
_templateDao.saveDetails(templateVO);
729739
}
730740
}
731741
return true;
@@ -770,13 +780,13 @@ private boolean createChildDataDiskTemplate(DatadiskTO dataDiskTemplate, VMTempl
770780
}
771781
return result.isSuccess();
772782
} catch (Exception e) {
773-
s_logger.error("Creation of Datadisk: " + templateVO.getId() + " failed: " + result.getResult());
783+
s_logger.error("Creation of Datadisk: " + templateVO.getId() + " failed: " + result.getResult(), e);
774784
return false;
775785
}
776786
}
777787

778-
private boolean finalizeParentTemplate(DatadiskTO dataDiskTemplate, VMTemplateVO template, TemplateInfo parentTemplate, DataStore imageStore, int diskCount) {
779-
TemplateInfo templateInfo = imageFactory.getTemplate(template.getId(), imageStore);
788+
private boolean finalizeParentTemplate(DatadiskTO dataDiskTemplate, VMTemplateVO templateVO, TemplateInfo parentTemplate, DataStore imageStore, int diskCount) {
789+
TemplateInfo templateInfo = imageFactory.getTemplate(templateVO.getId(), imageStore);
780790
AsyncCallFuture<TemplateApiResult> templateFuture = createDatadiskTemplateAsync(parentTemplate, templateInfo, dataDiskTemplate.getPath(), dataDiskTemplate.getDiskId(),
781791
dataDiskTemplate.getFileSize(), dataDiskTemplate.isBootable());
782792
TemplateApiResult result = null;
@@ -789,11 +799,35 @@ private boolean finalizeParentTemplate(DatadiskTO dataDiskTemplate, VMTemplateVO
789799
}
790800
return result.isSuccess();
791801
} catch (Exception e) {
792-
s_logger.error("Creation of template: " + template.getId() + " failed: " + result.getResult());
802+
s_logger.error("Creation of template: " + templateVO.getId() + " failed: " + result.getResult(), e);
793803
return false;
794804
}
795805
}
796806

807+
private String getDiskControllerDetails(DatadiskTO dataDiskTemplate) {
808+
String controller = dataDiskTemplate.getDiskController() ;
809+
String controlerSubType = dataDiskTemplate.getDiskControllerSubType();
810+
String details = new String();
811+
if (controller != null) {
812+
if (controller.equalsIgnoreCase("osdefault")) {
813+
return "osdefault";
814+
} else if (controller.contains("IDE") || controller.contains("ide")) {
815+
return"ide";
816+
} else if (controller.contains("SCSI") || controller.contains("scsi")) {
817+
if (controlerSubType != null ){
818+
return controlerSubType;
819+
}
820+
else {
821+
return "lislogic";
822+
}
823+
}
824+
else {
825+
return "osdefault";
826+
}
827+
}
828+
return details;
829+
}
830+
797831
private void cleanupDatadiskTemplates(TemplateInfo parentTemplateInfo) {
798832
DataStore imageStore = parentTemplateInfo.getDataStore();
799833
List<VMTemplateVO> datadiskTemplatesToDelete = _templateDao.listByParentTemplatetId(parentTemplateInfo.getId());

engine/storage/image/src/org/apache/cloudstack/storage/image/store/ImageStoreImpl.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -213,8 +213,8 @@ public void deleteExtractUrl(String installPath, String url, Upload.Type entityT
213213
}
214214

215215
@Override
216-
public List<DatadiskTO> getDatadiskTemplates(DataObject obj) {
217-
return driver.getDatadiskTemplates(obj);
216+
public List<DatadiskTO> getDataDiskTemplates(DataObject obj) {
217+
return driver.getDataDiskTemplates(obj);
218218
}
219219

220220
@Override

engine/storage/src/org/apache/cloudstack/storage/image/BaseImageStoreDriverImpl.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -312,7 +312,7 @@ public void deleteEntityExtractUrl(DataStore store, String installPath, String u
312312
}
313313

314314
@Override
315-
public List<DatadiskTO> getDatadiskTemplates(DataObject obj) {
315+
public List<DatadiskTO> getDataDiskTemplates(DataObject obj) {
316316
List<DatadiskTO> dataDiskDetails = new ArrayList<DatadiskTO>();
317317
if (s_logger.isDebugEnabled()) {
318318
s_logger.debug("Get the data disks present in the OVA template");
@@ -333,7 +333,7 @@ public List<DatadiskTO> getDatadiskTemplates(DataObject obj) {
333333
GetDatadisksAnswer getDatadisksAnswer = (GetDatadisksAnswer)answer;
334334
dataDiskDetails = getDatadisksAnswer.getDataDiskDetails(); // Details - Disk path, virtual size
335335
}
336-
s_logger.debug("MDOVA getDatadiskTemplates dataDiskDetails " + dataDiskDetails.toString());
336+
s_logger.debug("MDOVA getDataDiskTemplates dataDiskDetails " + dataDiskDetails.toString());
337337
return dataDiskDetails;
338338
}
339339

engine/storage/src/org/apache/cloudstack/storage/image/ImageStoreDriver.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public interface ImageStoreDriver extends DataStoreDriver {
3737

3838
void deleteEntityExtractUrl(DataStore store, String installPath, String url, Upload.Type entityType);
3939

40-
List<DatadiskTO> getDatadiskTemplates(DataObject obj);
40+
List<DatadiskTO> getDataDiskTemplates(DataObject obj);
4141

4242
Void createDataDiskTemplateAsync(TemplateInfo dataDiskTemplate, String path, String diskId, boolean bootable, long fileSize, AsyncCompletionCallback<CreateCmdResult> callback);
4343
}

0 commit comments

Comments
 (0)