Search in sources :

Example 1 with GetUploadParamsResponse

use of org.apache.cloudstack.api.response.GetUploadParamsResponse in project cloudstack by apache.

the class GetUploadParamsForIsoCmd method execute.

// ///////////////////////////////////////////////////
// ///////////// API Implementation///////////////////
// ///////////////////////////////////////////////////
@Override
public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, ResourceAllocationException, NetworkRuleConflictException {
    validateRequest();
    try {
        GetUploadParamsResponse response = _templateService.registerIsoForPostUpload(this);
        response.setResponseName(getCommandName());
        setResponseObject(response);
    } catch (ResourceAllocationException | MalformedURLException e) {
        s_logger.error("Exception while registering template", e);
        throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Exception while registering ISO: " + e.getMessage());
    }
}
Also used : MalformedURLException(java.net.MalformedURLException) ServerApiException(org.apache.cloudstack.api.ServerApiException) ResourceAllocationException(com.cloud.exception.ResourceAllocationException) GetUploadParamsResponse(org.apache.cloudstack.api.response.GetUploadParamsResponse)

Example 2 with GetUploadParamsResponse

use of org.apache.cloudstack.api.response.GetUploadParamsResponse in project cloudstack by apache.

the class GetUploadParamsForTemplateCmd method execute.

@Override
public void execute() throws ServerApiException {
    validateRequest();
    try {
        GetUploadParamsResponse response = _templateService.registerTemplateForPostUpload(this);
        response.setResponseName(getCommandName());
        setResponseObject(response);
    } catch (ResourceAllocationException | MalformedURLException e) {
        s_logger.error("exception while registering template", e);
        throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "exception while registering template: " + e.getMessage());
    }
}
Also used : MalformedURLException(java.net.MalformedURLException) ServerApiException(org.apache.cloudstack.api.ServerApiException) ResourceAllocationException(com.cloud.exception.ResourceAllocationException) GetUploadParamsResponse(org.apache.cloudstack.api.response.GetUploadParamsResponse)

Example 3 with GetUploadParamsResponse

use of org.apache.cloudstack.api.response.GetUploadParamsResponse in project cloudstack by apache.

the class TemplateManagerImpl method registerPostUploadInternal.

/**
 * Internal register template or ISO method - post local upload
 * @param adapter
 * @param profile
 */
private GetUploadParamsResponse registerPostUploadInternal(TemplateAdapter adapter, TemplateProfile profile) throws MalformedURLException {
    List<TemplateOrVolumePostUploadCommand> payload = adapter.createTemplateForPostUpload(profile);
    if (CollectionUtils.isNotEmpty(payload)) {
        GetUploadParamsResponse response = new GetUploadParamsResponse();
        /*
             * There can be one or more commands depending on the number of secondary stores the template needs to go to. Taking the first one to do the url upload. The
             * template will be propagated to the rest through copy by management server commands.
             */
        TemplateOrVolumePostUploadCommand firstCommand = payload.get(0);
        String ssvmUrlDomain = _configDao.getValue(Config.SecStorageSecureCopyCert.key());
        String url = ImageStoreUtil.generatePostUploadUrl(ssvmUrlDomain, firstCommand.getRemoteEndPoint(), firstCommand.getEntityUUID());
        response.setPostURL(new URL(url));
        // set the post url, this is used in the monitoring thread to determine the SSVM
        TemplateDataStoreVO templateStore = _tmplStoreDao.findByTemplate(firstCommand.getEntityId(), DataStoreRole.getRole(firstCommand.getDataToRole()));
        if (templateStore != null) {
            templateStore.setExtractUrl(url);
            _tmplStoreDao.persist(templateStore);
        }
        response.setId(UUID.fromString(firstCommand.getEntityUUID()));
        int timeout = ImageStoreUploadMonitorImpl.getUploadOperationTimeout();
        DateTime currentDateTime = new DateTime(DateTimeZone.UTC);
        String expires = currentDateTime.plusMinutes(timeout).toString();
        response.setTimeout(expires);
        String key = _configDao.getValue(Config.SSVMPSK.key());
        /*
             * encoded metadata using the post upload config ssh key
             */
        Gson gson = new GsonBuilder().create();
        String metadata = EncryptionUtil.encodeData(gson.toJson(firstCommand), key);
        response.setMetadata(metadata);
        /*
             * signature calculated on the url, expiry, metadata.
             */
        response.setSignature(EncryptionUtil.generateSignature(metadata + url + expires, key));
        return response;
    } else {
        throw new CloudRuntimeException("Unable to register template.");
    }
}
Also used : TemplateOrVolumePostUploadCommand(org.apache.cloudstack.storage.command.TemplateOrVolumePostUploadCommand) GsonBuilder(com.google.gson.GsonBuilder) CloudRuntimeException(com.cloud.utils.exception.CloudRuntimeException) Gson(com.google.gson.Gson) TemplateDataStoreVO(org.apache.cloudstack.storage.datastore.db.TemplateDataStoreVO) GetUploadParamsResponse(org.apache.cloudstack.api.response.GetUploadParamsResponse) URL(java.net.URL) EndPoint(org.apache.cloudstack.engine.subsystem.api.storage.EndPoint) DateTime(org.joda.time.DateTime)

Example 4 with GetUploadParamsResponse

use of org.apache.cloudstack.api.response.GetUploadParamsResponse in project cloudstack by apache.

the class GetUploadParamsForVolumeCmd method execute.

@Override
public void execute() throws ServerApiException {
    try {
        GetUploadParamsResponse response = _volumeService.uploadVolume(this);
        response.setResponseName(getCommandName());
        setResponseObject(response);
    } catch (MalformedURLException | ResourceAllocationException e) {
        s_logger.error("exception while uploading volume", e);
        throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "exception while uploading a volume: " + e.getMessage());
    }
}
Also used : MalformedURLException(java.net.MalformedURLException) ServerApiException(org.apache.cloudstack.api.ServerApiException) ResourceAllocationException(com.cloud.exception.ResourceAllocationException) GetUploadParamsResponse(org.apache.cloudstack.api.response.GetUploadParamsResponse)

Example 5 with GetUploadParamsResponse

use of org.apache.cloudstack.api.response.GetUploadParamsResponse in project cloudstack by apache.

the class VolumeApiServiceImpl method uploadVolume.

@Override
@ActionEvent(eventType = EventTypes.EVENT_VOLUME_UPLOAD, eventDescription = "uploading volume for post upload", async = true)
public GetUploadParamsResponse uploadVolume(final GetUploadParamsForVolumeCmd cmd) throws ResourceAllocationException, MalformedURLException {
    Account caller = CallContext.current().getCallingAccount();
    long ownerId = cmd.getEntityOwnerId();
    final Account owner = _entityMgr.findById(Account.class, ownerId);
    final Long zoneId = cmd.getZoneId();
    final String volumeName = cmd.getName();
    String format = cmd.getFormat();
    final Long diskOfferingId = cmd.getDiskOfferingId();
    String imageStoreUuid = cmd.getImageStoreUuid();
    final DataStore store = _tmpltMgr.getImageStore(imageStoreUuid, zoneId);
    validateVolume(caller, ownerId, zoneId, volumeName, null, format, diskOfferingId);
    return Transaction.execute(new TransactionCallbackWithException<GetUploadParamsResponse, MalformedURLException>() {

        @Override
        public GetUploadParamsResponse doInTransaction(TransactionStatus status) throws MalformedURLException {
            VolumeVO volume = persistVolume(owner, zoneId, volumeName, null, cmd.getFormat(), diskOfferingId, Volume.State.NotUploaded);
            VolumeInfo vol = volFactory.getVolume(volume.getId());
            RegisterVolumePayload payload = new RegisterVolumePayload(null, cmd.getChecksum(), cmd.getFormat());
            vol.addPayload(payload);
            Pair<EndPoint, DataObject> pair = volService.registerVolumeForPostUpload(vol, store);
            EndPoint ep = pair.first();
            DataObject dataObject = pair.second();
            GetUploadParamsResponse response = new GetUploadParamsResponse();
            String ssvmUrlDomain = _configDao.getValue(Config.SecStorageSecureCopyCert.key());
            String url = ImageStoreUtil.generatePostUploadUrl(ssvmUrlDomain, ep.getPublicAddr(), vol.getUuid());
            response.setPostURL(new URL(url));
            // set the post url, this is used in the monitoring thread to determine the SSVM
            VolumeDataStoreVO volumeStore = _volumeStoreDao.findByVolume(vol.getId());
            assert (volumeStore != null) : "sincle volume is registered, volumestore cannot be null at this stage";
            volumeStore.setExtractUrl(url);
            _volumeStoreDao.persist(volumeStore);
            response.setId(UUID.fromString(vol.getUuid()));
            int timeout = ImageStoreUploadMonitorImpl.getUploadOperationTimeout();
            DateTime currentDateTime = new DateTime(DateTimeZone.UTC);
            String expires = currentDateTime.plusMinutes(timeout).toString();
            response.setTimeout(expires);
            String key = _configDao.getValue(Config.SSVMPSK.key());
            /*
                 * encoded metadata using the post upload config key
                 */
            TemplateOrVolumePostUploadCommand command = new TemplateOrVolumePostUploadCommand(vol.getId(), vol.getUuid(), volumeStore.getInstallPath(), cmd.getChecksum(), vol.getType().toString(), vol.getName(), vol.getFormat().toString(), dataObject.getDataStore().getUri(), dataObject.getDataStore().getRole().toString());
            command.setLocalPath(volumeStore.getLocalDownloadPath());
            // using the existing max upload size configuration
            command.setProcessTimeout(NumbersUtil.parseLong(_configDao.getValue("vmware.package.ova.timeout"), 3600));
            command.setMaxUploadSize(_configDao.getValue(Config.MaxUploadVolumeSize.key()));
            command.setDefaultMaxAccountSecondaryStorage(_configDao.getValue(Config.DefaultMaxAccountSecondaryStorage.key()));
            command.setAccountId(vol.getAccountId());
            Gson gson = new GsonBuilder().create();
            String metadata = EncryptionUtil.encodeData(gson.toJson(command), key);
            response.setMetadata(metadata);
            /*
                 * signature calculated on the url, expiry, metadata.
                 */
            response.setSignature(EncryptionUtil.generateSignature(metadata + url + expires, key));
            return response;
        }
    });
}
Also used : Account(com.cloud.user.Account) MalformedURLException(java.net.MalformedURLException) GsonBuilder(com.google.gson.GsonBuilder) TransactionStatus(com.cloud.utils.db.TransactionStatus) Gson(com.google.gson.Gson) VolumeInfo(org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo) EndPoint(org.apache.cloudstack.engine.subsystem.api.storage.EndPoint) GetUploadParamsResponse(org.apache.cloudstack.api.response.GetUploadParamsResponse) URL(java.net.URL) DateTime(org.joda.time.DateTime) DataObject(org.apache.cloudstack.engine.subsystem.api.storage.DataObject) TemplateOrVolumePostUploadCommand(org.apache.cloudstack.storage.command.TemplateOrVolumePostUploadCommand) DataStore(org.apache.cloudstack.engine.subsystem.api.storage.DataStore) VolumeDataStoreVO(org.apache.cloudstack.storage.datastore.db.VolumeDataStoreVO) Pair(com.cloud.utils.Pair) ActionEvent(com.cloud.event.ActionEvent)

Aggregations

GetUploadParamsResponse (org.apache.cloudstack.api.response.GetUploadParamsResponse)5 MalformedURLException (java.net.MalformedURLException)4 ResourceAllocationException (com.cloud.exception.ResourceAllocationException)3 ServerApiException (org.apache.cloudstack.api.ServerApiException)3 Gson (com.google.gson.Gson)2 GsonBuilder (com.google.gson.GsonBuilder)2 URL (java.net.URL)2 EndPoint (org.apache.cloudstack.engine.subsystem.api.storage.EndPoint)2 TemplateOrVolumePostUploadCommand (org.apache.cloudstack.storage.command.TemplateOrVolumePostUploadCommand)2 DateTime (org.joda.time.DateTime)2 ActionEvent (com.cloud.event.ActionEvent)1 Account (com.cloud.user.Account)1 Pair (com.cloud.utils.Pair)1 TransactionStatus (com.cloud.utils.db.TransactionStatus)1 CloudRuntimeException (com.cloud.utils.exception.CloudRuntimeException)1 DataObject (org.apache.cloudstack.engine.subsystem.api.storage.DataObject)1 DataStore (org.apache.cloudstack.engine.subsystem.api.storage.DataStore)1 VolumeInfo (org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo)1 TemplateDataStoreVO (org.apache.cloudstack.storage.datastore.db.TemplateDataStoreVO)1 VolumeDataStoreVO (org.apache.cloudstack.storage.datastore.db.VolumeDataStoreVO)1