4646import org .apache .cloudstack .engine .subsystem .api .storage .DataStore ;
4747import org .apache .cloudstack .engine .subsystem .api .storage .DataStoreCapabilities ;
4848import org .apache .cloudstack .engine .subsystem .api .storage .DataStoreDriver ;
49+ import org .apache .cloudstack .engine .subsystem .api .storage .DataStoreProvider ;
4950import org .apache .cloudstack .engine .subsystem .api .storage .EndPoint ;
5051import org .apache .cloudstack .engine .subsystem .api .storage .EndPointSelector ;
5152import org .apache .cloudstack .engine .subsystem .api .storage .ObjectInDataStoreStateMachine ;
@@ -1317,16 +1318,15 @@ private void createManagedVolumeCopyTemplateAsync(VolumeInfo volumeInfo, Primary
13171318 AsyncCallbackDispatcher <VolumeServiceImpl , CopyCommandResult > caller = AsyncCallbackDispatcher .create (this );
13181319
13191320 caller .setCallback (caller .getTarget ().managedCopyBaseImageCallback (null , null )).setContext (context );
1320- grantAccess ( volumeInfo , destHost , primaryDataStore );
1321+
13211322 Map <String , String > details = new HashMap <>();
13221323
13231324 details .put (PrimaryDataStore .MANAGED , Boolean .TRUE .toString ());
13241325 details .put (PrimaryDataStore .STORAGE_HOST , primaryDataStore .getHostAddress ());
13251326 details .put (PrimaryDataStore .STORAGE_PORT , String .valueOf (primaryDataStore .getPort ()));
13261327 // for managed storage, the storage repository (XenServer) or datastore (ESX) name is based off of the iScsiName property of a volume
1327- // For Netapp ONTAP iscsiName or Lun path is available only after grantAccess
1328- String managedStoreTarget = ObjectUtils .defaultIfNull (volumeInfo .get_iScsiName (), volumeInfo .getUuid ());
1329- details .put (PrimaryDataStore .MANAGED_STORE_TARGET , managedStoreTarget ); details .put (PrimaryDataStore .MANAGED_STORE_TARGET_ROOT_VOLUME , volumeInfo .getName ());
1328+ details .put (PrimaryDataStore .MANAGED_STORE_TARGET , volumeInfo .get_iScsiName ());
1329+ details .put (PrimaryDataStore .MANAGED_STORE_TARGET_ROOT_VOLUME , volumeInfo .getName ());
13301330 details .put (PrimaryDataStore .VOLUME_SIZE , String .valueOf (volumeInfo .getSize ()));
13311331 details .put (StorageManager .STORAGE_POOL_DISK_WAIT .toString (), String .valueOf (StorageManager .STORAGE_POOL_DISK_WAIT .valueIn (primaryDataStore .getId ())));
13321332
@@ -1340,6 +1340,17 @@ private void createManagedVolumeCopyTemplateAsync(VolumeInfo volumeInfo, Primary
13401340 }
13411341
13421342 primaryDataStore .setDetails (details );
1343+
1344+ grantAccess (volumeInfo , destHost , primaryDataStore );
1345+
1346+ if (DataStoreProvider .ONTAP_PLUGIN_NAME .equals (primaryDataStore .getStorageProviderName ())) {
1347+ volumeInfo = volFactory .getVolume (volumeInfo .getId (), primaryDataStore );
1348+ // For Netapp ONTAP iscsiName or Lun path is available only after grantAccess
1349+ String managedStoreTarget = ObjectUtils .defaultIfNull (volumeInfo .get_iScsiName (), volumeInfo .getUuid ());
1350+ details .put (PrimaryDataStore .MANAGED_STORE_TARGET , managedStoreTarget );
1351+ primaryDataStore .setDetails (details );
1352+ }
1353+
13431354 try {
13441355 motionSrv .copyAsync (srcTemplateInfo , destTemplateInfo , destHost , caller );
13451356 } finally {
0 commit comments