@@ -849,18 +849,20 @@ public Answer cloneVolumeFromBaseTemplate(CopyCommand cmd) {
849849 s_logger .warn ("Template host in vSphere is not in connected state, request template reload" );
850850 return new CopyCmdAnswer ("Template host in vSphere is not in connected state, request template reload" );
851851 }
852- if (dsMo .getDatastoreType ().equalsIgnoreCase ("VVOL" ) && volume . getVolumeType () == Volume . Type . ROOT ) {
853- vmdkFileBaseName = cloneVMwithVMname (context , hyperHost , template , vmTemplate , volume , dcMo , dsMo );
852+ if (dsMo .getDatastoreType ().equalsIgnoreCase ("VVOL" )) {
853+ vmdkFileBaseName = cloneVMforVvols (context , hyperHost , template , vmTemplate , volume , dcMo , dsMo );
854854 } else {
855855 vmdkFileBaseName = createVMFolderWithVMName (context , hyperHost , template , vmTemplate , volume , dcMo , dsMo , searchExcludedFolders );
856856 }
857857 }
858858 // restoreVM - move the new ROOT disk into corresponding VM folder
859859 VirtualMachineMO restoreVmMo = dcMo .findVm (volume .getVmName ());
860860 if (restoreVmMo != null ) {
861- String vmNameInVcenter = restoreVmMo .getName (); // VM folder name in datastore will be VM's name in vCenter.
862- if (dsMo .folderExists (String .format ("[%s]" , dsMo .getName ()), vmNameInVcenter )) {
863- VmwareStorageLayoutHelper .syncVolumeToVmDefaultFolder (dcMo , vmNameInVcenter , dsMo , vmdkFileBaseName , searchExcludedFolders );
861+ if (!dsMo .getDatastoreType ().equalsIgnoreCase ("VVOL" )) {
862+ String vmNameInVcenter = restoreVmMo .getName (); // VM folder name in datastore will be VM's name in vCenter.
863+ if (dsMo .folderExists (String .format ("[%s]" , dsMo .getName ()), vmNameInVcenter )) {
864+ VmwareStorageLayoutHelper .syncVolumeToVmDefaultFolder (dcMo , vmNameInVcenter , dsMo , vmdkFileBaseName , searchExcludedFolders );
865+ }
864866 }
865867 }
866868 }
@@ -887,24 +889,32 @@ public Answer cloneVolumeFromBaseTemplate(CopyCommand cmd) {
887889 }
888890 }
889891
890- private String cloneVMwithVMname (VmwareContext context , VmwareHypervisorHost hyperHost , TemplateObjectTO template ,
891- VirtualMachineMO vmTemplate , VolumeObjectTO volume , DatacenterMO dcMo , DatastoreMO dsMo ) throws Exception {
892+ private String cloneVMforVvols (VmwareContext context , VmwareHypervisorHost hyperHost , TemplateObjectTO template ,
893+ VirtualMachineMO vmTemplate , VolumeObjectTO volume , DatacenterMO dcMo , DatastoreMO dsMo ) throws Exception {
892894 ManagedObjectReference morDatastore = dsMo .getMor ();
893895 ManagedObjectReference morPool = hyperHost .getHyperHostOwnerResourcePool ();
894896 ManagedObjectReference morCluster = hyperHost .getHyperHostCluster ();
895897 if (template .getSize () != null ) {
896898 _fullCloneFlag = volume .getSize () > template .getSize () ? true : _fullCloneFlag ;
897899 }
900+ String vmName = volume .getVmName ();
901+ if (volume .getVolumeType () == Volume .Type .DATADISK )
902+ vmName = volume .getName ();
898903 if (!_fullCloneFlag ) {
899- createVMLinkedClone (vmTemplate , dcMo , volume . getVmName () , morDatastore , morPool );
904+ createVMLinkedClone (vmTemplate , dcMo , vmName , morDatastore , morPool );
900905 } else {
901- createVMFullClone (vmTemplate , dcMo , dsMo , volume . getVmName () , morDatastore , morPool );
906+ createVMFullClone (vmTemplate , dcMo , dsMo , vmName , morDatastore , morPool );
902907 }
903908
904- VirtualMachineMO vmMo = new ClusterMO (context , morCluster ).findVmOnHyperHost (volume . getVmName () );
909+ VirtualMachineMO vmMo = new ClusterMO (context , morCluster ).findVmOnHyperHost (vmName );
905910 assert (vmMo != null );
906-
907- return vmMo .getVmdkFileBaseNames ().get (0 );
911+ String vmdkFileBaseName = vmMo .getVmdkFileBaseNames ().get (0 );
912+ if (volume .getVolumeType () == Volume .Type .DATADISK ) {
913+ s_logger .info ("detach disks from volume-wrapper VM " + vmName );
914+ vmMo .detachAllDisks ();
915+ vmMo .destroy ();
916+ }
917+ return vmdkFileBaseName ;
908918 }
909919
910920 private String createVMFolderWithVMName (VmwareContext context , VmwareHypervisorHost hyperHost , TemplateObjectTO template ,
0 commit comments