6262import javax .inject .Inject ;
6363import java .util .ArrayList ;
6464import java .util .Date ;
65+ import java .util .HashMap ;
6566import java .util .HashSet ;
6667import java .util .List ;
6768import 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 ());
0 commit comments