2626import com .cloud .agent .api .to .NfsTO ;
2727import com .cloud .storage .Storage ;
2828import com .cloud .storage .VMTemplateStorageResourceAssoc ;
29- import com .cloud .storage .VMTemplateVO ;
30- import com .cloud .storage .VolumeVO ;
3129import com .cloud .storage .dao .VMTemplateDao ;
3230import com .cloud .storage .dao .VolumeDao ;
3331import org .apache .cloudstack .engine .subsystem .api .storage .CreateCmdResult ;
3432import org .apache .cloudstack .engine .subsystem .api .storage .DataObject ;
3533import org .apache .cloudstack .engine .subsystem .api .storage .DataStore ;
36- import org .apache .cloudstack .engine .subsystem .api .storage .ObjectInDataStoreStateMachine ;
34+ import org .apache .cloudstack .engine .subsystem .api .storage .EndPoint ;
35+ import org .apache .cloudstack .engine .subsystem .api .storage .EndPointSelector ;
3736import org .apache .cloudstack .framework .async .AsyncCallbackDispatcher ;
3837import org .apache .cloudstack .framework .async .AsyncCompletionCallback ;
39- import org .apache .cloudstack .framework .async .AsyncRpcContext ;
4038import org .apache .cloudstack .storage .datastore .db .TemplateDataStoreDao ;
41- import org .apache .cloudstack .storage .datastore .db .TemplateDataStoreVO ;
4239import org .apache .cloudstack .storage .datastore .db .VolumeDataStoreDao ;
43- import org .apache .cloudstack .storage .datastore .db .VolumeDataStoreVO ;
4440import org .apache .cloudstack .storage .image .BaseImageStoreDriverImpl ;
4541import org .apache .cloudstack .storage .image .store .ImageStoreImpl ;
46- import org .apache .cloudstack .storage .to .TemplateObjectTO ;
47- import org .apache .cloudstack .storage .to .VolumeObjectTO ;
42+ import org .apache .log4j .Logger ;
4843
4944import javax .inject .Inject ;
50- import java .util .Date ;
5145import java .util .UUID ;
5246
5347public class SimulatorImageStoreDriverImpl extends BaseImageStoreDriverImpl {
48+ private static final Logger s_logger = Logger .getLogger (SimulatorImageStoreDriverImpl .class );
5449
5550 @ Inject
5651 TemplateDataStoreDao _templateStoreDao ;
@@ -60,6 +55,8 @@ public class SimulatorImageStoreDriverImpl extends BaseImageStoreDriverImpl {
6055 VolumeDao _volumeDao ;
6156 @ Inject
6257 VolumeDataStoreDao _volumeStoreDao ;
58+ @ Inject
59+ EndPointSelector _epSelector ;
6360
6461 @ Override
6562 public DataStoreTO getStoreTO (DataStore store ) {
@@ -71,11 +68,6 @@ public DataStoreTO getStoreTO(DataStore store) {
7168 }
7269
7370
74-
75- public String createEntityExtractUrl (DataStore store , String installPath , Storage .ImageFormat format ) {
76- return null ;
77- }
78-
7971 @ Override
8072 public void createAsync (DataStore dataStore , DataObject data , AsyncCompletionCallback <CreateCmdResult > callback ) {
8173 if (data .getType () == DataObjectType .TEMPLATE ) {
@@ -112,4 +104,20 @@ protected void createVolume(DataObject data, AsyncCompletionCallback<CreateCmdRe
112104 caller .complete (answer );
113105 return ;
114106 }
107+
108+ @ Override
109+ public String createEntityExtractUrl (DataStore store , String installPath , Storage .ImageFormat format , DataObject dataObject ) {
110+ EndPoint ep = _epSelector .select (store );
111+ // Create Symlink at ssvm
112+ String path = installPath ;
113+ String uuid = UUID .randomUUID ().toString () + "." + format .getFileExtension ();
114+ // Construct actual URL locally now that the symlink exists at SSVM
115+ return generateCopyUrl (ep .getPublicAddr (), uuid );
116+ }
117+
118+ private String generateCopyUrl (String ipAddress , String uuid ){
119+ String hostname = ipAddress ;
120+ String scheme = "http" ;
121+ return scheme + "://" + hostname + "/userdata/" + uuid ;
122+ }
115123}
0 commit comments