This is an automated email from the ASF dual-hosted git repository. omartushevskyi pushed a commit to branch DLAB-573-dev in repository https://gitbox.apache.org/repos/asf/incubator-dlab.git
commit 044a12035f8e4c9407c5523662c255c14ffd70ea Author: bhliva <[email protected]> AuthorDate: Wed Mar 27 13:33:44 2019 +0200 DLAB-573 added refresh token param for spark reconfiguration --- .../ComputationalClusterConfigDTO.java | 2 + ...xploratoryReconfigureSparkClusterActionDTO.java | 19 +- .../epam/dlab/backendapi/util/RequestBuilder.java | 1046 ++++++++++---------- 3 files changed, 544 insertions(+), 523 deletions(-) diff --git a/services/dlab-model/src/main/java/com/epam/dlab/dto/computational/ComputationalClusterConfigDTO.java b/services/dlab-model/src/main/java/com/epam/dlab/dto/computational/ComputationalClusterConfigDTO.java index 016c513..7c03582 100644 --- a/services/dlab-model/src/main/java/com/epam/dlab/dto/computational/ComputationalClusterConfigDTO.java +++ b/services/dlab-model/src/main/java/com/epam/dlab/dto/computational/ComputationalClusterConfigDTO.java @@ -33,4 +33,6 @@ public class ComputationalClusterConfigDTO extends ComputationalBase<Computation private String copmutationalId; @JsonProperty("spark_configurations") private List<ClusterConfig> config; + @JsonProperty("azure_user_refresh_token") + private String azureUserRefreshToken; } diff --git a/services/dlab-model/src/main/java/com/epam/dlab/dto/exploratory/ExploratoryReconfigureSparkClusterActionDTO.java b/services/dlab-model/src/main/java/com/epam/dlab/dto/exploratory/ExploratoryReconfigureSparkClusterActionDTO.java index 5226570..3a7f6ab 100644 --- a/services/dlab-model/src/main/java/com/epam/dlab/dto/exploratory/ExploratoryReconfigureSparkClusterActionDTO.java +++ b/services/dlab-model/src/main/java/com/epam/dlab/dto/exploratory/ExploratoryReconfigureSparkClusterActionDTO.java @@ -26,11 +26,18 @@ import java.util.List; public class ExploratoryReconfigureSparkClusterActionDTO extends ExploratoryActionDTO<ExploratoryReconfigureSparkClusterActionDTO> { - @JsonProperty("spark_configurations") - private List<ClusterConfig> config; + @JsonProperty("spark_configurations") + private List<ClusterConfig> config; + @JsonProperty("azure_user_refresh_token") + private String azureUserRefreshToken; - public ExploratoryReconfigureSparkClusterActionDTO withConfig(List<ClusterConfig> config) { - this.config = config; - return this; - } + public ExploratoryReconfigureSparkClusterActionDTO withConfig(List<ClusterConfig> config) { + this.config = config; + return this; + } + + public ExploratoryReconfigureSparkClusterActionDTO withAzureUserRefreshToken(String azureUserRefreshToken) { + this.azureUserRefreshToken = azureUserRefreshToken; + return this; + } } diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/util/RequestBuilder.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/util/RequestBuilder.java index 7d42516..aaad7d1 100644 --- a/services/self-service/src/main/java/com/epam/dlab/backendapi/util/RequestBuilder.java +++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/util/RequestBuilder.java @@ -74,523 +74,535 @@ import static com.epam.dlab.cloud.CloudProvider.*; @Singleton public class RequestBuilder { - private static final String UNSUPPORTED_CLOUD_PROVIDER_MESSAGE = "Unsupported cloud provider "; - private static final String AZURE_REFRESH_TOKEN_KEY = "refresh_token"; - - @Inject - private SelfServiceApplicationConfiguration configuration; - @Inject - private SettingsDAO settingsDAO; - - private CloudSettings cloudSettings(UserInfo userInfo) { - switch (cloudProvider()) { - case AWS: - return AwsCloudSettings.builder() - .awsRegion(settingsDAO.getAwsRegion()) - .awsSecurityGroupIds(settingsDAO.getAwsSecurityGroups()) - .awsSubnetId(settingsDAO.getAwsSubnetId()) - .awsVpcId(settingsDAO.getAwsVpcId()) - .confTagResourceId(settingsDAO.getConfTagResourceId()) - .awsNotebookSubnetId(settingsDAO.getAwsNotebookSubnetId()) - .awsNotebookVpcId(settingsDAO.getAwsNotebookVpcId()) - .awsIamUser(userInfo.getName()).build(); - case AZURE: - return AzureCloudSettings.builder() - .azureRegion(settingsDAO.getAzureRegion()) - .azureResourceGroupName(settingsDAO.getAzureResourceGroupName()) - .azureSecurityGroupName(settingsDAO.getAzureSecurityGroupName()) - .azureSubnetName(settingsDAO.getAzureSubnetName()) - .azureVpcName(settingsDAO.getAzureVpcName()) - .azureIamUser(userInfo.getName()).build(); - case GCP: - return GcpCloudSettings.builder().gcpIamUser(userInfo.getName()).build(); - default: - throw new IllegalArgumentException(UNSUPPORTED_CLOUD_PROVIDER_MESSAGE + cloudProvider()); - } - } - - @SuppressWarnings("unchecked") - private <T extends ResourceBaseDTO<?>> T newResourceBaseDTO(UserInfo userInfo, Class<T> resourceClass) { - try { - return (T) resourceClass.newInstance() - .withEdgeUserName(getEdgeUserName(userInfo)) - .withCloudSettings(cloudSettings(userInfo)); - } catch (Exception e) { - throw new DlabException("Cannot create instance of resource class " + resourceClass.getName() + ". " + - e.getLocalizedMessage(), e); - } - } - - private String getEdgeUserName(UserInfo userInfo) { - String edgeUser = UsernameUtils.replaceWhitespaces(userInfo.getSimpleName()); - switch (cloudProvider()) { - case GCP: - return adjustUserName(configuration.getMaxUserNameLength(), edgeUser); - case AWS: - case AZURE: - return edgeUser; - default: - throw new DlabException(UNSUPPORTED_CLOUD_PROVIDER_MESSAGE + cloudProvider()); - } - } - - private String adjustUserName(int maxLength, String userName) { - return userName.length() > maxLength ? - UUID.nameUUIDFromBytes(userName.getBytes()).toString().substring(0, maxLength) : userName; - } - - @SuppressWarnings("unchecked") - private <T extends ResourceSysBaseDTO<?>> T newResourceSysBaseDTO(UserInfo userInfo, Class<T> resourceClass) { - T resource = newResourceBaseDTO(userInfo, resourceClass); - return (T) resource - .withServiceBaseName(settingsDAO.getServiceBaseName()) - .withConfOsFamily(settingsDAO.getConfOsFamily()); - } - - @SuppressWarnings("unchecked") - public UploadFile newEdgeKeyUpload(UserInfo userInfo, String content) { - - switch (cloudProvider()) { - case AWS: - EdgeCreateAws edgeCreateAws = newResourceSysBaseDTO(userInfo, EdgeCreateAws.class); - UploadFileAws uploadFileAws = new UploadFileAws(); - uploadFileAws.setEdge(edgeCreateAws); - uploadFileAws.setContent(content); - - return uploadFileAws; - - case AZURE: - EdgeCreateAzure edgeCreateAzure = newResourceSysBaseDTO(userInfo, EdgeCreateAzure.class) - .withAzureDataLakeEnable(Boolean.toString(settingsDAO.isAzureDataLakeEnabled())); - - UploadFileAzure uploadFileAzure = new UploadFileAzure(); - uploadFileAzure.setEdge(edgeCreateAzure); - uploadFileAzure.setContent(content); - - return uploadFileAzure; - - case GCP: - return new UploadFileGcp(newResourceSysBaseDTO(userInfo, EdgeCreateGcp.class), content); - default: - throw new IllegalArgumentException(UNSUPPORTED_CLOUD_PROVIDER_MESSAGE + cloudProvider()); - } - } - - public ReuploadKeyDTO newKeyReupload(UserInfo userInfo, String id, String content, List<ResourceData> resources) { - return newResourceSysBaseDTO(userInfo, ReuploadKeyDTO.class) - .withId(id) - .withContent(content) - .withResources(resources); - } - - @SuppressWarnings("unchecked") - public <T extends ResourceSysBaseDTO<?>> T newEdgeAction(UserInfo userInfo) { - checkInappropriateCloudProviderOrElseThrowException(); - return (T) newResourceSysBaseDTO(userInfo, ResourceSysBaseDTO.class); - } - - public UserEnvironmentResources newUserEnvironmentStatus(UserInfo userInfo) { - checkInappropriateCloudProviderOrElseThrowException(); - return newResourceSysBaseDTO(userInfo, UserEnvironmentResources.class); - } - - @SuppressWarnings("unchecked") - public <T extends ExploratoryCreateDTO<T>> T newExploratoryCreate(Exploratory exploratory, UserInfo userInfo, - ExploratoryGitCredsDTO exploratoryGitCredsDTO) { - - T exploratoryCreate; - - switch (cloudProvider()) { - case AWS: - exploratoryCreate = (T) newResourceSysBaseDTO(userInfo, ExploratoryCreateAws.class) - .withNotebookInstanceType(exploratory.getShape()); - break; - case AZURE: - exploratoryCreate = (T) newResourceSysBaseDTO(userInfo, ExploratoryCreateAzure.class) - .withNotebookInstanceSize(exploratory.getShape()); - if (settingsDAO.isAzureDataLakeEnabled()) { - ((ExploratoryCreateAzure) exploratoryCreate) - .withAzureClientId(settingsDAO.getAzureDataLakeClientId()) - .withAzureUserRefreshToken(userInfo.getKeys().get(AZURE_REFRESH_TOKEN_KEY)); - } - - ((ExploratoryCreateAzure) exploratoryCreate) - .withAzureDataLakeEnabled(Boolean.toString(settingsDAO.isAzureDataLakeEnabled())); - break; - case GCP: - exploratoryCreate = (T) newResourceSysBaseDTO(userInfo, ExploratoryCreateGcp.class) - .withNotebookInstanceType(exploratory.getShape()); - break; - - default: - throw new IllegalArgumentException(UNSUPPORTED_CLOUD_PROVIDER_MESSAGE + cloudProvider()); - } - - return exploratoryCreate.withExploratoryName(exploratory.getName()) - .withNotebookImage(exploratory.getDockerImage()) - .withApplicationName(getApplicationNameFromImage(exploratory.getDockerImage())) - .withGitCreds(exploratoryGitCredsDTO.getGitCreds()) - .withImageName(exploratory.getImageName()) - .withClusterConfig(exploratory.getClusterConfig()); - } - - @SuppressWarnings("unchecked") - public <T extends ExploratoryGitCredsUpdateDTO> T newExploratoryStart(UserInfo userInfo, - UserInstanceDTO userInstance, - ExploratoryGitCredsDTO - exploratoryGitCredsDTO) { - - switch (cloudProvider()) { - case AWS: - case GCP: - return (T) newResourceSysBaseDTO(userInfo, ExploratoryGitCredsUpdateDTO.class) - .withNotebookInstanceName(userInstance.getExploratoryId()) - .withGitCreds(exploratoryGitCredsDTO.getGitCreds()) - .withNotebookImage(userInstance.getImageName()) - .withExploratoryName(userInstance.getExploratoryName()) - .withReuploadKeyRequired(userInstance.isReuploadKeyRequired()); - case AZURE: - T exploratoryStart = (T) newResourceSysBaseDTO(userInfo, ExploratoryActionStartAzure.class) - .withNotebookInstanceName(userInstance.getExploratoryId()) - .withGitCreds(exploratoryGitCredsDTO.getGitCreds()) - .withNotebookImage(userInstance.getImageName()) - .withExploratoryName(userInstance.getExploratoryName()) - .withReuploadKeyRequired(userInstance.isReuploadKeyRequired()); - - if (settingsDAO.isAzureDataLakeEnabled()) { - ((ExploratoryActionStartAzure) exploratoryStart) - .withAzureClientId(settingsDAO.getAzureDataLakeClientId()) - .withAzureUserRefreshToken(userInfo.getKeys().get(AZURE_REFRESH_TOKEN_KEY)); - } - - ((ExploratoryActionStartAzure) exploratoryStart) - .withAzureDataLakeEnabled(Boolean.toString(settingsDAO.isAzureDataLakeEnabled())); - - return exploratoryStart; - default: - throw new IllegalArgumentException(UNSUPPORTED_CLOUD_PROVIDER_MESSAGE + cloudProvider()); - } - } - - @SuppressWarnings("unchecked") - public <T extends ExploratoryActionDTO<T>> T newExploratoryStop(UserInfo userInfo, UserInstanceDTO userInstance) { - - T exploratoryStop; - - switch (cloudProvider()) { - case AWS: - case GCP: - exploratoryStop = (T) newResourceSysBaseDTO(userInfo, ExploratoryActionDTO.class); - break; - case AZURE: - exploratoryStop = (T) newResourceSysBaseDTO(userInfo, ExploratoryActionStopAzure.class); - break; - default: - throw new IllegalArgumentException(UNSUPPORTED_CLOUD_PROVIDER_MESSAGE + cloudProvider()); - } - - return exploratoryStop - .withNotebookInstanceName(userInstance.getExploratoryId()) - .withNotebookImage(userInstance.getImageName()) - .withExploratoryName(userInstance.getExploratoryName()) - .withNotebookImage(userInstance.getImageName()) - .withReuploadKeyRequired(userInstance.isReuploadKeyRequired()); - } - - public ExploratoryGitCredsUpdateDTO newGitCredentialsUpdate(UserInfo userInfo, UserInstanceDTO instanceDTO, - ExploratoryGitCredsDTO exploratoryGitCredsDTO) { - checkInappropriateCloudProviderOrElseThrowException(); - return newResourceSysBaseDTO(userInfo, ExploratoryGitCredsUpdateDTO.class) - .withNotebookImage(instanceDTO.getImageName()) - .withApplicationName(getApplicationNameFromImage(instanceDTO.getImageName())) - .withNotebookInstanceName(instanceDTO.getExploratoryId()) - .withExploratoryName(instanceDTO.getExploratoryName()) - .withGitCreds(exploratoryGitCredsDTO.getGitCreds()); - } - - public LibraryInstallDTO newLibInstall(UserInfo userInfo, UserInstanceDTO userInstance, - List<LibInstallDTO> libs) { - checkInappropriateCloudProviderOrElseThrowException(); - return newResourceSysBaseDTO(userInfo, LibraryInstallDTO.class) - .withNotebookImage(userInstance.getImageName()) - .withApplicationName(getApplicationNameFromImage(userInstance.getImageName())) - .withNotebookInstanceName(userInstance.getExploratoryId()) - .withExploratoryName(userInstance.getExploratoryName()) - .withLibs(libs); - } - - @SuppressWarnings("unchecked") - public <T extends ExploratoryActionDTO<T>> T newLibExploratoryList(UserInfo userInfo, - UserInstanceDTO userInstance) { - checkInappropriateCloudProviderOrElseThrowException(); - return (T) newResourceSysBaseDTO(userInfo, ExploratoryActionDTO.class) - .withNotebookInstanceName(userInstance.getExploratoryId()) - .withNotebookImage(userInstance.getImageName()) - .withApplicationName(getApplicationNameFromImage(userInstance.getImageName())) - .withExploratoryName(userInstance.getExploratoryName()); - } - - @SuppressWarnings("unchecked") - public <T extends LibraryInstallDTO> T newLibInstall(UserInfo userInfo, UserInstanceDTO userInstance, - UserComputationalResource computationalResource, - List<LibInstallDTO> libs) { - checkInappropriateCloudProviderOrElseThrowException(); - return (T) newResourceSysBaseDTO(userInfo, LibraryInstallDTO.class) - .withComputationalId(computationalResource.getComputationalId()) - .withComputationalName(computationalResource.getComputationalName()) - .withExploratoryName(userInstance.getExploratoryName()) - .withComputationalImage(computationalResource.getImageName()) - .withApplicationName(getApplicationNameFromImage(userInstance.getImageName())) - .withLibs(libs); - } - - @SuppressWarnings("unchecked") - public <T extends LibListComputationalDTO> T newLibComputationalList(UserInfo userInfo, - UserInstanceDTO userInstance, - UserComputationalResource - computationalResource) { - - checkInappropriateCloudProviderOrElseThrowException(); - return (T) newResourceSysBaseDTO(userInfo, LibListComputationalDTO.class) - .withComputationalId(computationalResource.getComputationalId()) - .withComputationalImage(computationalResource.getImageName()) - .withLibCacheKey(ExploratoryLibCache.libraryCacheKey(userInstance)) - .withApplicationName(getApplicationNameFromImage(userInstance.getImageName())); - } - - @SuppressWarnings("unchecked") - public <T extends ComputationalBase<T>> T newComputationalCreate(UserInfo userInfo, - UserInstanceDTO userInstance, - ComputationalCreateFormDTO form) { - T computationalCreate; - - switch (cloudProvider()) { - case AZURE: - throw new UnsupportedOperationException("Creating dataengine service is not supported yet"); - case AWS: - AwsComputationalCreateForm awsForm = (AwsComputationalCreateForm) form; - computationalCreate = (T) newResourceSysBaseDTO(userInfo, ComputationalCreateAws.class) - .withInstanceCount(awsForm.getInstanceCount()) - .withMasterInstanceType(awsForm.getMasterInstanceType()) - .withSlaveInstanceType(awsForm.getSlaveInstanceType()) - .withSlaveInstanceSpot(awsForm.getSlaveInstanceSpot()) - .withSlaveInstanceSpotPctPrice(awsForm.getSlaveInstanceSpotPctPrice()) - .withVersion(awsForm.getVersion()) - .withConfig((awsForm.getConfig())); - break; - case GCP: - GcpComputationalCreateForm gcpForm = (GcpComputationalCreateForm) form; - computationalCreate = (T) newResourceSysBaseDTO(userInfo, ComputationalCreateGcp.class) - .withMasterInstanceCount(gcpForm.getMasterInstanceCount()) - .withSlaveInstanceCount(gcpForm.getSlaveInstanceCount()) - .withPreemptibleCount(gcpForm.getPreemptibleCount()) - .withMasterInstanceType(gcpForm.getMasterInstanceType()) - .withSlaveInstanceType(gcpForm.getSlaveInstanceType()) - .withVersion(gcpForm.getVersion()); - break; - - default: - throw new IllegalArgumentException(UNSUPPORTED_CLOUD_PROVIDER_MESSAGE + cloudProvider()); - } - - return computationalCreate - .withExploratoryName(form.getNotebookName()) - .withComputationalName(form.getName()) - .withNotebookTemplateName(userInstance.getTemplateName()) - .withApplicationName(getApplicationNameFromImage(userInstance.getImageName())) - .withNotebookInstanceName(userInstance.getExploratoryId()); - } - - @SuppressWarnings("unchecked") - public <T extends ComputationalBase<T>> T newComputationalCreate(UserInfo userInfo, - UserInstanceDTO userInstance, - SparkStandaloneClusterCreateForm form) { - - T computationalCreate; - - switch (cloudProvider()) { - case AWS: - computationalCreate = (T) newResourceSysBaseDTO(userInfo, SparkComputationalCreateAws.class) - .withDataEngineInstanceCount(form.getDataEngineInstanceCount()) - .withDataEngineMasterShape(form.getDataEngineInstanceShape()) - .withDataEngineSlaveShape(form.getDataEngineInstanceShape()) - .withConfig(form.getConfig()); - break; - case AZURE: - computationalCreate = (T) newResourceSysBaseDTO(userInfo, SparkComputationalCreateAzure.class) - .withDataEngineInstanceCount(form.getDataEngineInstanceCount()) - .withDataEngineMasterSize(form.getDataEngineInstanceShape()) - .withDataEngineSlaveSize(form.getDataEngineInstanceShape()) - .withConfig(form.getConfig()); - if (settingsDAO.isAzureDataLakeEnabled()) { - ((SparkComputationalCreateAzure) computationalCreate) - .withAzureClientId(settingsDAO.getAzureDataLakeClientId()) - .withAzureUserRefreshToken(userInfo.getKeys().get(AZURE_REFRESH_TOKEN_KEY)); - } - - ((SparkComputationalCreateAzure) computationalCreate) - .withAzureDataLakeEnabled(Boolean.toString(settingsDAO.isAzureDataLakeEnabled())); - - break; - case GCP: - computationalCreate = (T) newResourceSysBaseDTO(userInfo, SparkComputationalCreateGcp.class) - .withDataEngineInstanceCount(form.getDataEngineInstanceCount()) - .withDataEngineMasterSize(form.getDataEngineInstanceShape()) - .withDataEngineSlaveSize(form.getDataEngineInstanceShape()) - .withConfig(form.getConfig()); - break; - default: - throw new IllegalArgumentException(UNSUPPORTED_CLOUD_PROVIDER_MESSAGE + cloudProvider()); - } - - return computationalCreate - .withExploratoryName(form.getNotebookName()) - .withComputationalName(form.getName()) - .withNotebookTemplateName(userInstance.getTemplateName()) - .withApplicationName(getApplicationNameFromImage(userInstance.getImageName())) - .withNotebookInstanceName(userInstance.getExploratoryId()); - } - - @SuppressWarnings("unchecked") - public <T extends ComputationalBase<T>> T newComputationalTerminate(UserInfo userInfo, - String exploratoryName, - String exploratoryId, - String computationalName, - String computationalId, - DataEngineType dataEngineType) { - T computationalTerminate; - - switch (cloudProvider()) { - case AWS: - AwsComputationalTerminateDTO terminateDTO = newResourceSysBaseDTO(userInfo, - AwsComputationalTerminateDTO.class); - if (dataEngineType == DataEngineType.CLOUD_SERVICE) { - terminateDTO.setClusterName(computationalId); - } - computationalTerminate = (T) terminateDTO; - break; - case AZURE: - computationalTerminate = (T) newResourceSysBaseDTO(userInfo, ComputationalTerminateDTO.class); - break; - case GCP: - GcpComputationalTerminateDTO gcpTerminateDTO = newResourceSysBaseDTO(userInfo, - GcpComputationalTerminateDTO.class); - if (dataEngineType == DataEngineType.CLOUD_SERVICE) { - gcpTerminateDTO.setClusterName(computationalId); - } - computationalTerminate = (T) gcpTerminateDTO; - break; - - default: - throw new IllegalArgumentException(UNSUPPORTED_CLOUD_PROVIDER_MESSAGE + cloudProvider()); - } - - return computationalTerminate - .withExploratoryName(exploratoryName) - .withComputationalName(computationalName) - .withNotebookInstanceName(exploratoryId); - } - - @SuppressWarnings("unchecked") - public <T extends ComputationalBase<T>> T newComputationalStop(UserInfo userInfo, - UserInstanceDTO exploratory, - String computationalName) { - return (T) newResourceSysBaseDTO(userInfo, ComputationalStopDTO.class) - .withExploratoryName(exploratory.getExploratoryName()) - .withComputationalName(computationalName) - .withNotebookInstanceName(exploratory.getExploratoryId()) - .withApplicationName(getApplicationNameFromImage(exploratory.getImageName())); - } - - @SuppressWarnings("unchecked") - public <T extends ComputationalBase<T>> T newComputationalStart(UserInfo userInfo, UserInstanceDTO exploratory, - String computationalName) { - return (T) newResourceSysBaseDTO(userInfo, ComputationalStartDTO.class) - .withExploratoryName(exploratory.getExploratoryName()) - .withComputationalName(computationalName) - .withNotebookInstanceName(exploratory.getExploratoryId()) - .withApplicationName(getApplicationNameFromImage(exploratory.getImageName())); - } - - @SuppressWarnings("unchecked") - public <T extends ExploratoryImageDTO> T newExploratoryImageCreate(UserInfo userInfo, UserInstanceDTO userInstance, - String imageName) { - checkInappropriateCloudProviderOrElseThrowException(); - return (T) newResourceSysBaseDTO(userInfo, ExploratoryImageDTO.class) - .withNotebookInstanceName(userInstance.getExploratoryId()) - .withExploratoryName(userInstance.getExploratoryName()) - .withApplicationName(getApplicationNameFromImage(userInstance.getImageName())) - .withNotebookImage(userInstance.getImageName()) - .withImageName(imageName); - } - - - @SuppressWarnings("unchecked") - public <T extends EnvBackupDTO> T newBackupCreate(BackupFormDTO backupFormDTO, String id) { - - return (T) EnvBackupDTO.builder() - .configFiles(backupFormDTO.getConfigFiles()) - .certificates(backupFormDTO.getCertificates()) - .keys(backupFormDTO.getKeys()) - .jars(backupFormDTO.getJars()) - .databaseBackup(backupFormDTO.isDatabaseBackup()) - .logsBackup(backupFormDTO.isLogsBackup()) - .id(id) - .build(); - } - - public ComputationalClusterConfigDTO newClusterConfigUpdate(UserInfo userInfo, UserInstanceDTO userInstanceDTO, - UserComputationalResource compRes, - List<ClusterConfig> config) { - final ComputationalClusterConfigDTO clusterConfigDTO = newResourceSysBaseDTO(userInfo, - ComputationalClusterConfigDTO.class) - .withExploratoryName(userInstanceDTO.getExploratoryName()) - .withNotebookInstanceName(userInstanceDTO.getExploratoryId()) - .withComputationalName(compRes.getComputationalName()) - .withApplicationName(compRes.getImageName()); - clusterConfigDTO.setCopmutationalId(compRes.getComputationalId()); - clusterConfigDTO.setConfig(config); - return clusterConfigDTO; - } - - public ExploratoryReconfigureSparkClusterActionDTO newClusterConfigUpdate(UserInfo userInfo, - UserInstanceDTO userInstance, - List<ClusterConfig> config) { - - return newResourceSysBaseDTO(userInfo, ExploratoryReconfigureSparkClusterActionDTO.class) - .withNotebookInstanceName(userInstance.getExploratoryId()) - .withExploratoryName(userInstance.getExploratoryName()) - .withApplicationName(getApplicationNameFromImage(userInstance.getImageName())) - .withNotebookImage(userInstance.getImageName()) - .withConfig(config); - } - - private CloudProvider cloudProvider() { - return configuration.getCloudProvider(); - } - - /** - * Returns application name basing on docker image - * - * @param imageName docker image name - * @return application name - */ - private String getApplicationNameFromImage(String imageName) { - if (imageName != null) { - int pos = imageName.indexOf('-'); - if (pos > 0) { - return imageName.substring(pos + 1); - } - } - return ""; - } - - private void checkInappropriateCloudProviderOrElseThrowException() { - CloudProvider provider = cloudProvider(); - if (provider != AWS && provider != AZURE && provider != GCP) { - throw new IllegalArgumentException(UNSUPPORTED_CLOUD_PROVIDER_MESSAGE + provider); - } - } + private static final String UNSUPPORTED_CLOUD_PROVIDER_MESSAGE = "Unsupported cloud provider "; + private static final String AZURE_REFRESH_TOKEN_KEY = "refresh_token"; + + @Inject + private SelfServiceApplicationConfiguration configuration; + @Inject + private SettingsDAO settingsDAO; + + private CloudSettings cloudSettings(UserInfo userInfo) { + switch (cloudProvider()) { + case AWS: + return AwsCloudSettings.builder() + .awsRegion(settingsDAO.getAwsRegion()) + .awsSecurityGroupIds(settingsDAO.getAwsSecurityGroups()) + .awsSubnetId(settingsDAO.getAwsSubnetId()) + .awsVpcId(settingsDAO.getAwsVpcId()) + .confTagResourceId(settingsDAO.getConfTagResourceId()) + .awsNotebookSubnetId(settingsDAO.getAwsNotebookSubnetId()) + .awsNotebookVpcId(settingsDAO.getAwsNotebookVpcId()) + .awsIamUser(userInfo.getName()).build(); + case AZURE: + return AzureCloudSettings.builder() + .azureRegion(settingsDAO.getAzureRegion()) + .azureResourceGroupName(settingsDAO.getAzureResourceGroupName()) + .azureSecurityGroupName(settingsDAO.getAzureSecurityGroupName()) + .azureSubnetName(settingsDAO.getAzureSubnetName()) + .azureVpcName(settingsDAO.getAzureVpcName()) + .azureIamUser(userInfo.getName()).build(); + case GCP: + return GcpCloudSettings.builder().gcpIamUser(userInfo.getName()).build(); + default: + throw new IllegalArgumentException(UNSUPPORTED_CLOUD_PROVIDER_MESSAGE + cloudProvider()); + } + } + + @SuppressWarnings("unchecked") + private <T extends ResourceBaseDTO<?>> T newResourceBaseDTO(UserInfo userInfo, Class<T> resourceClass) { + try { + return (T) resourceClass.newInstance() + .withEdgeUserName(getEdgeUserName(userInfo)) + .withCloudSettings(cloudSettings(userInfo)); + } catch (Exception e) { + throw new DlabException("Cannot create instance of resource class " + resourceClass.getName() + ". " + + e.getLocalizedMessage(), e); + } + } + + private String getEdgeUserName(UserInfo userInfo) { + String edgeUser = UsernameUtils.replaceWhitespaces(userInfo.getSimpleName()); + switch (cloudProvider()) { + case GCP: + return adjustUserName(configuration.getMaxUserNameLength(), edgeUser); + case AWS: + case AZURE: + return edgeUser; + default: + throw new DlabException(UNSUPPORTED_CLOUD_PROVIDER_MESSAGE + cloudProvider()); + } + } + + private String adjustUserName(int maxLength, String userName) { + return userName.length() > maxLength ? + UUID.nameUUIDFromBytes(userName.getBytes()).toString().substring(0, maxLength) : userName; + } + + @SuppressWarnings("unchecked") + private <T extends ResourceSysBaseDTO<?>> T newResourceSysBaseDTO(UserInfo userInfo, Class<T> resourceClass) { + T resource = newResourceBaseDTO(userInfo, resourceClass); + return (T) resource + .withServiceBaseName(settingsDAO.getServiceBaseName()) + .withConfOsFamily(settingsDAO.getConfOsFamily()); + } + + @SuppressWarnings("unchecked") + public UploadFile newEdgeKeyUpload(UserInfo userInfo, String content) { + + switch (cloudProvider()) { + case AWS: + EdgeCreateAws edgeCreateAws = newResourceSysBaseDTO(userInfo, EdgeCreateAws.class); + UploadFileAws uploadFileAws = new UploadFileAws(); + uploadFileAws.setEdge(edgeCreateAws); + uploadFileAws.setContent(content); + + return uploadFileAws; + + case AZURE: + EdgeCreateAzure edgeCreateAzure = newResourceSysBaseDTO(userInfo, EdgeCreateAzure.class) + .withAzureDataLakeEnable(Boolean.toString(settingsDAO.isAzureDataLakeEnabled())); + + UploadFileAzure uploadFileAzure = new UploadFileAzure(); + uploadFileAzure.setEdge(edgeCreateAzure); + uploadFileAzure.setContent(content); + + return uploadFileAzure; + + case GCP: + return new UploadFileGcp(newResourceSysBaseDTO(userInfo, EdgeCreateGcp.class), content); + default: + throw new IllegalArgumentException(UNSUPPORTED_CLOUD_PROVIDER_MESSAGE + cloudProvider()); + } + } + + public ReuploadKeyDTO newKeyReupload(UserInfo userInfo, String id, String content, List<ResourceData> resources) { + return newResourceSysBaseDTO(userInfo, ReuploadKeyDTO.class) + .withId(id) + .withContent(content) + .withResources(resources); + } + + @SuppressWarnings("unchecked") + public <T extends ResourceSysBaseDTO<?>> T newEdgeAction(UserInfo userInfo) { + checkInappropriateCloudProviderOrElseThrowException(); + return (T) newResourceSysBaseDTO(userInfo, ResourceSysBaseDTO.class); + } + + public UserEnvironmentResources newUserEnvironmentStatus(UserInfo userInfo) { + checkInappropriateCloudProviderOrElseThrowException(); + return newResourceSysBaseDTO(userInfo, UserEnvironmentResources.class); + } + + @SuppressWarnings("unchecked") + public <T extends ExploratoryCreateDTO<T>> T newExploratoryCreate(Exploratory exploratory, UserInfo userInfo, + ExploratoryGitCredsDTO exploratoryGitCredsDTO) { + + T exploratoryCreate; + + switch (cloudProvider()) { + case AWS: + exploratoryCreate = (T) newResourceSysBaseDTO(userInfo, ExploratoryCreateAws.class) + .withNotebookInstanceType(exploratory.getShape()); + break; + case AZURE: + exploratoryCreate = (T) newResourceSysBaseDTO(userInfo, ExploratoryCreateAzure.class) + .withNotebookInstanceSize(exploratory.getShape()); + if (settingsDAO.isAzureDataLakeEnabled()) { + ((ExploratoryCreateAzure) exploratoryCreate) + .withAzureClientId(settingsDAO.getAzureDataLakeClientId()) + .withAzureUserRefreshToken(userInfo.getKeys().get(AZURE_REFRESH_TOKEN_KEY)); + } + + ((ExploratoryCreateAzure) exploratoryCreate) + .withAzureDataLakeEnabled(Boolean.toString(settingsDAO.isAzureDataLakeEnabled())); + break; + case GCP: + exploratoryCreate = (T) newResourceSysBaseDTO(userInfo, ExploratoryCreateGcp.class) + .withNotebookInstanceType(exploratory.getShape()); + break; + + default: + throw new IllegalArgumentException(UNSUPPORTED_CLOUD_PROVIDER_MESSAGE + cloudProvider()); + } + + return exploratoryCreate.withExploratoryName(exploratory.getName()) + .withNotebookImage(exploratory.getDockerImage()) + .withApplicationName(getApplicationNameFromImage(exploratory.getDockerImage())) + .withGitCreds(exploratoryGitCredsDTO.getGitCreds()) + .withImageName(exploratory.getImageName()) + .withClusterConfig(exploratory.getClusterConfig()); + } + + @SuppressWarnings("unchecked") + public <T extends ExploratoryGitCredsUpdateDTO> T newExploratoryStart(UserInfo userInfo, + UserInstanceDTO userInstance, + ExploratoryGitCredsDTO + exploratoryGitCredsDTO) { + + switch (cloudProvider()) { + case AWS: + case GCP: + return (T) newResourceSysBaseDTO(userInfo, ExploratoryGitCredsUpdateDTO.class) + .withNotebookInstanceName(userInstance.getExploratoryId()) + .withGitCreds(exploratoryGitCredsDTO.getGitCreds()) + .withNotebookImage(userInstance.getImageName()) + .withExploratoryName(userInstance.getExploratoryName()) + .withReuploadKeyRequired(userInstance.isReuploadKeyRequired()); + case AZURE: + T exploratoryStart = (T) newResourceSysBaseDTO(userInfo, ExploratoryActionStartAzure.class) + .withNotebookInstanceName(userInstance.getExploratoryId()) + .withGitCreds(exploratoryGitCredsDTO.getGitCreds()) + .withNotebookImage(userInstance.getImageName()) + .withExploratoryName(userInstance.getExploratoryName()) + .withReuploadKeyRequired(userInstance.isReuploadKeyRequired()); + + if (settingsDAO.isAzureDataLakeEnabled()) { + ((ExploratoryActionStartAzure) exploratoryStart) + .withAzureClientId(settingsDAO.getAzureDataLakeClientId()) + .withAzureUserRefreshToken(userInfo.getKeys().get(AZURE_REFRESH_TOKEN_KEY)); + } + + ((ExploratoryActionStartAzure) exploratoryStart) + .withAzureDataLakeEnabled(Boolean.toString(settingsDAO.isAzureDataLakeEnabled())); + + return exploratoryStart; + default: + throw new IllegalArgumentException(UNSUPPORTED_CLOUD_PROVIDER_MESSAGE + cloudProvider()); + } + } + + @SuppressWarnings("unchecked") + public <T extends ExploratoryActionDTO<T>> T newExploratoryStop(UserInfo userInfo, UserInstanceDTO userInstance) { + + T exploratoryStop; + + switch (cloudProvider()) { + case AWS: + case GCP: + exploratoryStop = (T) newResourceSysBaseDTO(userInfo, ExploratoryActionDTO.class); + break; + case AZURE: + exploratoryStop = (T) newResourceSysBaseDTO(userInfo, ExploratoryActionStopAzure.class); + break; + default: + throw new IllegalArgumentException(UNSUPPORTED_CLOUD_PROVIDER_MESSAGE + cloudProvider()); + } + + return exploratoryStop + .withNotebookInstanceName(userInstance.getExploratoryId()) + .withNotebookImage(userInstance.getImageName()) + .withExploratoryName(userInstance.getExploratoryName()) + .withNotebookImage(userInstance.getImageName()) + .withReuploadKeyRequired(userInstance.isReuploadKeyRequired()); + } + + public ExploratoryGitCredsUpdateDTO newGitCredentialsUpdate(UserInfo userInfo, UserInstanceDTO instanceDTO, + ExploratoryGitCredsDTO exploratoryGitCredsDTO) { + checkInappropriateCloudProviderOrElseThrowException(); + return newResourceSysBaseDTO(userInfo, ExploratoryGitCredsUpdateDTO.class) + .withNotebookImage(instanceDTO.getImageName()) + .withApplicationName(getApplicationNameFromImage(instanceDTO.getImageName())) + .withNotebookInstanceName(instanceDTO.getExploratoryId()) + .withExploratoryName(instanceDTO.getExploratoryName()) + .withGitCreds(exploratoryGitCredsDTO.getGitCreds()); + } + + public LibraryInstallDTO newLibInstall(UserInfo userInfo, UserInstanceDTO userInstance, + List<LibInstallDTO> libs) { + checkInappropriateCloudProviderOrElseThrowException(); + return newResourceSysBaseDTO(userInfo, LibraryInstallDTO.class) + .withNotebookImage(userInstance.getImageName()) + .withApplicationName(getApplicationNameFromImage(userInstance.getImageName())) + .withNotebookInstanceName(userInstance.getExploratoryId()) + .withExploratoryName(userInstance.getExploratoryName()) + .withLibs(libs); + } + + @SuppressWarnings("unchecked") + public <T extends ExploratoryActionDTO<T>> T newLibExploratoryList(UserInfo userInfo, + UserInstanceDTO userInstance) { + checkInappropriateCloudProviderOrElseThrowException(); + return (T) newResourceSysBaseDTO(userInfo, ExploratoryActionDTO.class) + .withNotebookInstanceName(userInstance.getExploratoryId()) + .withNotebookImage(userInstance.getImageName()) + .withApplicationName(getApplicationNameFromImage(userInstance.getImageName())) + .withExploratoryName(userInstance.getExploratoryName()); + } + + @SuppressWarnings("unchecked") + public <T extends LibraryInstallDTO> T newLibInstall(UserInfo userInfo, UserInstanceDTO userInstance, + UserComputationalResource computationalResource, + List<LibInstallDTO> libs) { + checkInappropriateCloudProviderOrElseThrowException(); + return (T) newResourceSysBaseDTO(userInfo, LibraryInstallDTO.class) + .withComputationalId(computationalResource.getComputationalId()) + .withComputationalName(computationalResource.getComputationalName()) + .withExploratoryName(userInstance.getExploratoryName()) + .withComputationalImage(computationalResource.getImageName()) + .withApplicationName(getApplicationNameFromImage(userInstance.getImageName())) + .withLibs(libs); + } + + @SuppressWarnings("unchecked") + public <T extends LibListComputationalDTO> T newLibComputationalList(UserInfo userInfo, + UserInstanceDTO userInstance, + UserComputationalResource + computationalResource) { + + checkInappropriateCloudProviderOrElseThrowException(); + return (T) newResourceSysBaseDTO(userInfo, LibListComputationalDTO.class) + .withComputationalId(computationalResource.getComputationalId()) + .withComputationalImage(computationalResource.getImageName()) + .withLibCacheKey(ExploratoryLibCache.libraryCacheKey(userInstance)) + .withApplicationName(getApplicationNameFromImage(userInstance.getImageName())); + } + + @SuppressWarnings("unchecked") + public <T extends ComputationalBase<T>> T newComputationalCreate(UserInfo userInfo, + UserInstanceDTO userInstance, + ComputationalCreateFormDTO form) { + T computationalCreate; + + switch (cloudProvider()) { + case AZURE: + throw new UnsupportedOperationException("Creating dataengine service is not supported yet"); + case AWS: + AwsComputationalCreateForm awsForm = (AwsComputationalCreateForm) form; + computationalCreate = (T) newResourceSysBaseDTO(userInfo, ComputationalCreateAws.class) + .withInstanceCount(awsForm.getInstanceCount()) + .withMasterInstanceType(awsForm.getMasterInstanceType()) + .withSlaveInstanceType(awsForm.getSlaveInstanceType()) + .withSlaveInstanceSpot(awsForm.getSlaveInstanceSpot()) + .withSlaveInstanceSpotPctPrice(awsForm.getSlaveInstanceSpotPctPrice()) + .withVersion(awsForm.getVersion()) + .withConfig((awsForm.getConfig())); + break; + case GCP: + GcpComputationalCreateForm gcpForm = (GcpComputationalCreateForm) form; + computationalCreate = (T) newResourceSysBaseDTO(userInfo, ComputationalCreateGcp.class) + .withMasterInstanceCount(gcpForm.getMasterInstanceCount()) + .withSlaveInstanceCount(gcpForm.getSlaveInstanceCount()) + .withPreemptibleCount(gcpForm.getPreemptibleCount()) + .withMasterInstanceType(gcpForm.getMasterInstanceType()) + .withSlaveInstanceType(gcpForm.getSlaveInstanceType()) + .withVersion(gcpForm.getVersion()); + break; + + default: + throw new IllegalArgumentException(UNSUPPORTED_CLOUD_PROVIDER_MESSAGE + cloudProvider()); + } + + return computationalCreate + .withExploratoryName(form.getNotebookName()) + .withComputationalName(form.getName()) + .withNotebookTemplateName(userInstance.getTemplateName()) + .withApplicationName(getApplicationNameFromImage(userInstance.getImageName())) + .withNotebookInstanceName(userInstance.getExploratoryId()); + } + + @SuppressWarnings("unchecked") + public <T extends ComputationalBase<T>> T newComputationalCreate(UserInfo userInfo, + UserInstanceDTO userInstance, + SparkStandaloneClusterCreateForm form) { + + T computationalCreate; + + switch (cloudProvider()) { + case AWS: + computationalCreate = (T) newResourceSysBaseDTO(userInfo, SparkComputationalCreateAws.class) + .withDataEngineInstanceCount(form.getDataEngineInstanceCount()) + .withDataEngineMasterShape(form.getDataEngineInstanceShape()) + .withDataEngineSlaveShape(form.getDataEngineInstanceShape()) + .withConfig(form.getConfig()); + break; + case AZURE: + computationalCreate = (T) newResourceSysBaseDTO(userInfo, SparkComputationalCreateAzure.class) + .withDataEngineInstanceCount(form.getDataEngineInstanceCount()) + .withDataEngineMasterSize(form.getDataEngineInstanceShape()) + .withDataEngineSlaveSize(form.getDataEngineInstanceShape()) + .withConfig(form.getConfig()); + if (settingsDAO.isAzureDataLakeEnabled()) { + ((SparkComputationalCreateAzure) computationalCreate) + .withAzureClientId(settingsDAO.getAzureDataLakeClientId()) + .withAzureUserRefreshToken(userInfo.getKeys().get(AZURE_REFRESH_TOKEN_KEY)); + } + + ((SparkComputationalCreateAzure) computationalCreate) + .withAzureDataLakeEnabled(Boolean.toString(settingsDAO.isAzureDataLakeEnabled())); + + break; + case GCP: + computationalCreate = (T) newResourceSysBaseDTO(userInfo, SparkComputationalCreateGcp.class) + .withDataEngineInstanceCount(form.getDataEngineInstanceCount()) + .withDataEngineMasterSize(form.getDataEngineInstanceShape()) + .withDataEngineSlaveSize(form.getDataEngineInstanceShape()) + .withConfig(form.getConfig()); + break; + default: + throw new IllegalArgumentException(UNSUPPORTED_CLOUD_PROVIDER_MESSAGE + cloudProvider()); + } + + return computationalCreate + .withExploratoryName(form.getNotebookName()) + .withComputationalName(form.getName()) + .withNotebookTemplateName(userInstance.getTemplateName()) + .withApplicationName(getApplicationNameFromImage(userInstance.getImageName())) + .withNotebookInstanceName(userInstance.getExploratoryId()); + } + + @SuppressWarnings("unchecked") + public <T extends ComputationalBase<T>> T newComputationalTerminate(UserInfo userInfo, + String exploratoryName, + String exploratoryId, + String computationalName, + String computationalId, + DataEngineType dataEngineType) { + T computationalTerminate; + + switch (cloudProvider()) { + case AWS: + AwsComputationalTerminateDTO terminateDTO = newResourceSysBaseDTO(userInfo, + AwsComputationalTerminateDTO.class); + if (dataEngineType == DataEngineType.CLOUD_SERVICE) { + terminateDTO.setClusterName(computationalId); + } + computationalTerminate = (T) terminateDTO; + break; + case AZURE: + computationalTerminate = (T) newResourceSysBaseDTO(userInfo, ComputationalTerminateDTO.class); + break; + case GCP: + GcpComputationalTerminateDTO gcpTerminateDTO = newResourceSysBaseDTO(userInfo, + GcpComputationalTerminateDTO.class); + if (dataEngineType == DataEngineType.CLOUD_SERVICE) { + gcpTerminateDTO.setClusterName(computationalId); + } + computationalTerminate = (T) gcpTerminateDTO; + break; + + default: + throw new IllegalArgumentException(UNSUPPORTED_CLOUD_PROVIDER_MESSAGE + cloudProvider()); + } + + return computationalTerminate + .withExploratoryName(exploratoryName) + .withComputationalName(computationalName) + .withNotebookInstanceName(exploratoryId); + } + + @SuppressWarnings("unchecked") + public <T extends ComputationalBase<T>> T newComputationalStop(UserInfo userInfo, + UserInstanceDTO exploratory, + String computationalName) { + return (T) newResourceSysBaseDTO(userInfo, ComputationalStopDTO.class) + .withExploratoryName(exploratory.getExploratoryName()) + .withComputationalName(computationalName) + .withNotebookInstanceName(exploratory.getExploratoryId()) + .withApplicationName(getApplicationNameFromImage(exploratory.getImageName())); + } + + @SuppressWarnings("unchecked") + public <T extends ComputationalBase<T>> T newComputationalStart(UserInfo userInfo, UserInstanceDTO exploratory, + String computationalName) { + return (T) newResourceSysBaseDTO(userInfo, ComputationalStartDTO.class) + .withExploratoryName(exploratory.getExploratoryName()) + .withComputationalName(computationalName) + .withNotebookInstanceName(exploratory.getExploratoryId()) + .withApplicationName(getApplicationNameFromImage(exploratory.getImageName())); + } + + @SuppressWarnings("unchecked") + public <T extends ExploratoryImageDTO> T newExploratoryImageCreate(UserInfo userInfo, UserInstanceDTO userInstance, + String imageName) { + checkInappropriateCloudProviderOrElseThrowException(); + return (T) newResourceSysBaseDTO(userInfo, ExploratoryImageDTO.class) + .withNotebookInstanceName(userInstance.getExploratoryId()) + .withExploratoryName(userInstance.getExploratoryName()) + .withApplicationName(getApplicationNameFromImage(userInstance.getImageName())) + .withNotebookImage(userInstance.getImageName()) + .withImageName(imageName); + } + + + @SuppressWarnings("unchecked") + public <T extends EnvBackupDTO> T newBackupCreate(BackupFormDTO backupFormDTO, String id) { + + return (T) EnvBackupDTO.builder() + .configFiles(backupFormDTO.getConfigFiles()) + .certificates(backupFormDTO.getCertificates()) + .keys(backupFormDTO.getKeys()) + .jars(backupFormDTO.getJars()) + .databaseBackup(backupFormDTO.isDatabaseBackup()) + .logsBackup(backupFormDTO.isLogsBackup()) + .id(id) + .build(); + } + + public ComputationalClusterConfigDTO newClusterConfigUpdate(UserInfo userInfo, UserInstanceDTO userInstanceDTO, + UserComputationalResource compRes, + List<ClusterConfig> config) { + final ComputationalClusterConfigDTO clusterConfigDTO = newResourceSysBaseDTO(userInfo, + ComputationalClusterConfigDTO.class) + .withExploratoryName(userInstanceDTO.getExploratoryName()) + .withNotebookInstanceName(userInstanceDTO.getExploratoryId()) + .withComputationalName(compRes.getComputationalName()) + .withApplicationName(compRes.getImageName()); + clusterConfigDTO.setCopmutationalId(compRes.getComputationalId()); + clusterConfigDTO.setConfig(config); + if (cloudProvider() == AZURE && settingsDAO.isAzureDataLakeEnabled()) { + clusterConfigDTO.setAzureUserRefreshToken(userInfo.getKeys().get(AZURE_REFRESH_TOKEN_KEY)); + } + + return clusterConfigDTO; + } + + public ExploratoryReconfigureSparkClusterActionDTO newClusterConfigUpdate(UserInfo userInfo, + UserInstanceDTO userInstance, + List<ClusterConfig> config) { + + final ExploratoryReconfigureSparkClusterActionDTO dto = + newResourceSysBaseDTO(userInfo, ExploratoryReconfigureSparkClusterActionDTO.class) + .withNotebookInstanceName(userInstance.getExploratoryId()) + .withExploratoryName(userInstance.getExploratoryName()) + .withApplicationName(getApplicationNameFromImage(userInstance.getImageName())) + .withNotebookImage(userInstance.getImageName()) + .withConfig(config); + if (cloudProvider() == AZURE && settingsDAO.isAzureDataLakeEnabled()) { + dto.withAzureUserRefreshToken(userInfo.getKeys().get(AZURE_REFRESH_TOKEN_KEY)); + } + + return dto; + + + } + + private CloudProvider cloudProvider() { + return configuration.getCloudProvider(); + } + + /** + * Returns application name basing on docker image + * + * @param imageName docker image name + * @return application name + */ + private String getApplicationNameFromImage(String imageName) { + if (imageName != null) { + int pos = imageName.indexOf('-'); + if (pos > 0) { + return imageName.substring(pos + 1); + } + } + return ""; + } + + private void checkInappropriateCloudProviderOrElseThrowException() { + CloudProvider provider = cloudProvider(); + if (provider != AWS && provider != AZURE && provider != GCP) { + throw new IllegalArgumentException(UNSUPPORTED_CLOUD_PROVIDER_MESSAGE + provider); + } + } } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
