You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dlab.apache.org by of...@apache.org on 2020/02/05 14:17:12 UTC

[incubator-dlab] branch DLAB-1467 updated: Added azure auth file config

This is an automated email from the ASF dual-hosted git repository.

ofuks pushed a commit to branch DLAB-1467
in repository https://gitbox.apache.org/repos/asf/incubator-dlab.git


The following commit(s) were added to refs/heads/DLAB-1467 by this push:
     new 3d65876  Added azure auth file config
3d65876 is described below

commit 3d65876544da38ef007b1a112119d268b46dd741
Author: Oleh Fuks <ol...@gmail.com>
AuthorDate: Wed Feb 5 16:16:47 2020 +0200

    Added azure auth file config
---
 .../epam/dlab/backendapi/CloudConfiguration.java   |  1 +
 .../backendapi/core/commands/RunDockerCommand.java |  5 +++
 .../resources/GitExploratoryResource.java          |  7 ++++
 .../dlab/backendapi/resources/ImageResource.java   | 11 +++++-
 .../dlab/backendapi/resources/LibraryResource.java | 11 +++++-
 .../backendapi/resources/base/EdgeService.java     |  8 ++++
 .../resources/base/ExploratoryService.java         |  8 ++++
 .../resources/base/InfrastructureService.java      | 43 ++++++++++++----------
 .../service/impl/CheckInactivityServiceImpl.java   | 23 ++++++++++--
 .../service/impl/ProjectServiceImpl.java           | 13 ++++++-
 .../service/impl/SparkClusterService.java          | 27 +++++++++++---
 11 files changed, 126 insertions(+), 31 deletions(-)

diff --git a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/CloudConfiguration.java b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/CloudConfiguration.java
index 94ed162..9d61210 100644
--- a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/CloudConfiguration.java
+++ b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/CloudConfiguration.java
@@ -42,6 +42,7 @@ public class CloudConfiguration {
 	private final String ssnStorageAccountTagName;
 	private final String sharedStorageAccountTagName;
 	private final String datalakeTagName;
+	private final String azureAuthFile;
 	private final String azureClientId;
 	private final String peeringId;
 	private final String gcpProjectId;
diff --git a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/core/commands/RunDockerCommand.java b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/core/commands/RunDockerCommand.java
index 9cab93a..4c466dc 100644
--- a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/core/commands/RunDockerCommand.java
+++ b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/core/commands/RunDockerCommand.java
@@ -33,6 +33,7 @@ public class RunDockerCommand implements CmdCommand {
     private static final String ROOT_KEYS_PATH = "/root/keys";
     private static final String RESPONSE_PATH = "/response";
     private static final String LOG_PATH = "/logs";
+    private static final String AZURE_AUTH_FILE = "/root/azure_auth.json";
 
     public RunDockerCommand withVolume(String hostSrcPath, String bindPath) {
         options.add(String.format("-v %s:%s", hostSrcPath, bindPath));
@@ -47,6 +48,10 @@ public class RunDockerCommand implements CmdCommand {
         return withVolume(hostSrcPath, RESPONSE_PATH);
     }
 
+    public RunDockerCommand withVolumeFoAzureAuthFile(String hostSrcPath) {
+        return withVolume(hostSrcPath, AZURE_AUTH_FILE);
+    }
+
     public RunDockerCommand withVolumeForLog(String hostSrcPath, String logDirectory) {
         return withVolume(Paths.get(hostSrcPath, logDirectory).toString(),
                 Paths.get(LOG_PATH, logDirectory).toString());
diff --git a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/GitExploratoryResource.java b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/GitExploratoryResource.java
index 80a3d5b..e6f6476 100644
--- a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/GitExploratoryResource.java
+++ b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/GitExploratoryResource.java
@@ -27,6 +27,7 @@ import com.epam.dlab.backendapi.core.commands.DockerCommands;
 import com.epam.dlab.backendapi.core.commands.RunDockerCommand;
 import com.epam.dlab.backendapi.core.response.handlers.ExploratoryGitCredsCallbackHandler;
 import com.epam.dlab.backendapi.service.impl.DockerService;
+import com.epam.dlab.cloud.CloudProvider;
 import com.epam.dlab.dto.exploratory.ExploratoryBaseDTO;
 import com.epam.dlab.dto.exploratory.ExploratoryGitCredsUpdateDTO;
 import com.fasterxml.jackson.core.JsonProcessingException;
@@ -38,6 +39,7 @@ import javax.ws.rs.POST;
 import javax.ws.rs.Path;
 import javax.ws.rs.Produces;
 import javax.ws.rs.core.MediaType;
+import java.util.Objects;
 
 @Path("/exploratory")
 @Consumes(MediaType.APPLICATION_JSON)
@@ -69,6 +71,11 @@ public class GitExploratoryResource extends DockerService implements DockerComma
 				.withConfKeyName(configuration.getAdminKey())
 				.withImage(dto.getNotebookImage())
 				.withAction(action);
+		if (configuration.getCloudProvider() == CloudProvider.AZURE &&
+				Objects.nonNull(configuration.getCloudConfiguration().getAzureAuthFile()) &&
+				!configuration.getCloudConfiguration().getAzureAuthFile().isEmpty()) {
+			runDockerCommand.withVolumeFoAzureAuthFile(configuration.getCloudConfiguration().getAzureAuthFile());
+		}
 
 		commandExecutor.executeAsync(username, uuid, commandBuilder.buildCommand(runDockerCommand, dto));
 		return uuid;
diff --git a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/ImageResource.java b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/ImageResource.java
index b57f5b2..2d6d9e3 100644
--- a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/ImageResource.java
+++ b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/ImageResource.java
@@ -26,6 +26,7 @@ import com.epam.dlab.backendapi.core.commands.DockerCommands;
 import com.epam.dlab.backendapi.core.commands.RunDockerCommand;
 import com.epam.dlab.backendapi.core.response.handlers.ImageCreateCallbackHandler;
 import com.epam.dlab.backendapi.service.impl.DockerService;
+import com.epam.dlab.cloud.CloudProvider;
 import com.epam.dlab.dto.exploratory.ExploratoryImageDTO;
 import com.epam.dlab.rest.contracts.ExploratoryAPI;
 import com.fasterxml.jackson.core.JsonProcessingException;
@@ -38,6 +39,7 @@ import javax.ws.rs.Path;
 import javax.ws.rs.Produces;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
+import java.util.Objects;
 
 @Path(ExploratoryAPI.EXPLORATORY_IMAGE)
 @Consumes(MediaType.APPLICATION_JSON)
@@ -64,7 +66,7 @@ public class ImageResource extends DockerService implements DockerCommands {
 	}
 
 	private RunDockerCommand getDockerCommand(DockerAction action, String uuid, ExploratoryImageDTO image) {
-		return new RunDockerCommand()
+		RunDockerCommand runDockerCommand = new RunDockerCommand()
 				.withInteractive()
 				.withVolumeForRootKeys(configuration.getKeyDirectory())
 				.withVolumeForResponse(configuration.getImagesDirectory())
@@ -75,5 +77,12 @@ public class ImageResource extends DockerService implements DockerCommands {
 				.withResource(getResourceType())
 				.withImage(image.getNotebookImage())
 				.withName(nameContainer(image.getEdgeUserName(), action.toString(), image.getImageName()));
+		if (configuration.getCloudProvider() == CloudProvider.AZURE &&
+				Objects.nonNull(configuration.getCloudConfiguration().getAzureAuthFile()) &&
+				!configuration.getCloudConfiguration().getAzureAuthFile().isEmpty()) {
+			runDockerCommand.withVolumeFoAzureAuthFile(configuration.getCloudConfiguration().getAzureAuthFile());
+		}
+
+		return runDockerCommand;
 	}
 }
diff --git a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/LibraryResource.java b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/LibraryResource.java
index 0e07d69..a6ae018 100644
--- a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/LibraryResource.java
+++ b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/LibraryResource.java
@@ -28,6 +28,7 @@ import com.epam.dlab.backendapi.core.commands.RunDockerCommand;
 import com.epam.dlab.backendapi.core.response.handlers.LibInstallCallbackHandler;
 import com.epam.dlab.backendapi.core.response.handlers.LibListCallbackHandler;
 import com.epam.dlab.backendapi.service.impl.DockerService;
+import com.epam.dlab.cloud.CloudProvider;
 import com.epam.dlab.dto.LibListComputationalDTO;
 import com.epam.dlab.dto.base.DataEngineType;
 import com.epam.dlab.dto.exploratory.ExploratoryActionDTO;
@@ -44,6 +45,7 @@ import javax.ws.rs.POST;
 import javax.ws.rs.Path;
 import javax.ws.rs.Produces;
 import javax.ws.rs.core.MediaType;
+import java.util.Objects;
 
 @Path("/library")
 @Consumes(MediaType.APPLICATION_JSON)
@@ -139,13 +141,20 @@ public class LibraryResource extends DockerService implements DockerCommands {
 	}
 
 	private RunDockerCommand getDockerCommand(DockerAction action, String uuid) {
-		return new RunDockerCommand()
+		RunDockerCommand runDockerCommand = new RunDockerCommand()
 				.withInteractive()
 				.withVolumeForRootKeys(configuration.getKeyDirectory())
 				.withVolumeForResponse(configuration.getImagesDirectory())
 				.withRequestId(uuid)
 				.withConfKeyName(configuration.getAdminKey())
 				.withAction(action);
+		if (configuration.getCloudProvider() == CloudProvider.AZURE &&
+				Objects.nonNull(configuration.getCloudConfiguration().getAzureAuthFile()) &&
+				!configuration.getCloudConfiguration().getAzureAuthFile().isEmpty()) {
+			runDockerCommand.withVolumeFoAzureAuthFile(configuration.getCloudConfiguration().getAzureAuthFile());
+		}
+
+		return runDockerCommand;
 	}
 
 	private FileHandlerCallback getFileHandlerCallbackExploratory(DockerAction action, String uuid,
diff --git a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/base/EdgeService.java b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/base/EdgeService.java
index a5ed3dc..92cb6e8 100644
--- a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/base/EdgeService.java
+++ b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/base/EdgeService.java
@@ -24,6 +24,7 @@ import com.epam.dlab.backendapi.core.Directories;
 import com.epam.dlab.backendapi.core.FileHandlerCallback;
 import com.epam.dlab.backendapi.core.commands.*;
 import com.epam.dlab.backendapi.core.response.folderlistener.FolderListenerExecutor;
+import com.epam.dlab.cloud.CloudProvider;
 import com.epam.dlab.dto.ResourceSysBaseDTO;
 import com.epam.dlab.rest.client.RESTService;
 import com.epam.dlab.rest.contracts.KeyAPI;
@@ -33,6 +34,8 @@ import com.google.inject.Inject;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.util.Objects;
+
 public abstract class EdgeService implements DockerCommands {
 
 	private final Logger logger = LoggerFactory.getLogger(getClass());
@@ -73,6 +76,11 @@ public abstract class EdgeService implements DockerCommands {
 				.withConfKeyName(configuration.getAdminKey())
 				.withImage(configuration.getEdgeImage())
 				.withAction(action);
+		if (configuration.getCloudProvider() == CloudProvider.AZURE &&
+				Objects.nonNull(configuration.getCloudConfiguration().getAzureAuthFile()) &&
+				!configuration.getCloudConfiguration().getAzureAuthFile().isEmpty()) {
+			runDockerCommand.withVolumeFoAzureAuthFile(configuration.getCloudConfiguration().getAzureAuthFile());
+		}
 
 		commandExecutor.executeAsync(username, uuid, commandBuilder.buildCommand(runDockerCommand, dto));
 		return uuid;
diff --git a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/base/ExploratoryService.java b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/base/ExploratoryService.java
index c25f484..e4d9ecf 100644
--- a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/base/ExploratoryService.java
+++ b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/base/ExploratoryService.java
@@ -26,10 +26,13 @@ import com.epam.dlab.backendapi.core.commands.DockerCommands;
 import com.epam.dlab.backendapi.core.commands.RunDockerCommand;
 import com.epam.dlab.backendapi.core.response.handlers.ExploratoryCallbackHandler;
 import com.epam.dlab.backendapi.service.impl.DockerService;
+import com.epam.dlab.cloud.CloudProvider;
 import com.epam.dlab.dto.exploratory.ExploratoryBaseDTO;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import lombok.extern.slf4j.Slf4j;
 
+import java.util.Objects;
+
 @Slf4j
 public class ExploratoryService extends DockerService implements DockerCommands {
 
@@ -51,6 +54,11 @@ public class ExploratoryService extends DockerService implements DockerCommands
 				.withConfKeyName(configuration.getAdminKey())
 				.withImage(dto.getNotebookImage())
 				.withAction(action);
+		if (configuration.getCloudProvider() == CloudProvider.AZURE &&
+				Objects.nonNull(configuration.getCloudConfiguration().getAzureAuthFile()) &&
+				!configuration.getCloudConfiguration().getAzureAuthFile().isEmpty()) {
+			runDockerCommand.withVolumeFoAzureAuthFile(configuration.getCloudConfiguration().getAzureAuthFile());
+		}
 
 		commandExecutor.executeAsync(username, uuid, commandBuilder.buildCommand(runDockerCommand, dto));
 		return uuid;
diff --git a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/base/InfrastructureService.java b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/base/InfrastructureService.java
index 9406afd..699096a 100644
--- a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/base/InfrastructureService.java
+++ b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/base/InfrastructureService.java
@@ -23,9 +23,14 @@ package com.epam.dlab.backendapi.resources.base;
 import com.epam.dlab.backendapi.ProvisioningServiceApplicationConfiguration;
 import com.epam.dlab.backendapi.core.Directories;
 import com.epam.dlab.backendapi.core.FileHandlerCallback;
-import com.epam.dlab.backendapi.core.commands.*;
+import com.epam.dlab.backendapi.core.commands.CommandBuilder;
+import com.epam.dlab.backendapi.core.commands.DockerAction;
+import com.epam.dlab.backendapi.core.commands.DockerCommands;
+import com.epam.dlab.backendapi.core.commands.ICommandExecutor;
+import com.epam.dlab.backendapi.core.commands.RunDockerCommand;
 import com.epam.dlab.backendapi.core.response.folderlistener.FolderListenerExecutor;
 import com.epam.dlab.backendapi.core.response.handlers.ResourcesStatusCallbackHandler;
+import com.epam.dlab.cloud.CloudProvider;
 import com.epam.dlab.dto.UserEnvironmentResources;
 import com.epam.dlab.dto.status.EnvResource;
 import com.epam.dlab.exceptions.DlabException;
@@ -37,6 +42,7 @@ import org.apache.commons.lang3.StringUtils;
 
 import java.util.Arrays;
 import java.util.List;
+import java.util.Objects;
 import java.util.Optional;
 
 import static com.epam.dlab.backendapi.core.commands.DockerAction.STATUS;
@@ -69,24 +75,23 @@ public abstract class InfrastructureService implements DockerCommands {
 
 			if (!(dto.getResourceList().getHostList().isEmpty() && dto.getResourceList().getClusterList().isEmpty())) {
 				log.trace("Request the status of resources for user {} after filtering: {}", username, dto);
-				commandExecutor.executeAsync(
-						username,
-						uuid,
-						commandBuilder.buildCommand(
-								new RunDockerCommand()
-										.withInteractive()
-										.withName(nameContainer(dto.getEdgeUserName(), STATUS, "resources"))
-										.withVolumeForRootKeys(configuration.getKeyDirectory())
-										.withVolumeForResponse(configuration.getImagesDirectory())
-										.withVolumeForLog(configuration.getDockerLogDirectory(), Directories
-												.EDGE_LOG_DIRECTORY)
-										.withResource(getResourceType())
-										.withRequestId(uuid)
-										.withConfKeyName(configuration.getAdminKey())
-										.withActionStatus(configuration.getEdgeImage()),
-								dto
-						)
-				);
+				RunDockerCommand runDockerCommand = new RunDockerCommand()
+						.withInteractive()
+						.withName(nameContainer(dto.getEdgeUserName(), STATUS, "resources"))
+						.withVolumeForRootKeys(configuration.getKeyDirectory())
+						.withVolumeForResponse(configuration.getImagesDirectory())
+						.withVolumeForLog(configuration.getDockerLogDirectory(), Directories.EDGE_LOG_DIRECTORY)
+						.withResource(getResourceType())
+						.withRequestId(uuid)
+						.withConfKeyName(configuration.getAdminKey())
+						.withActionStatus(configuration.getEdgeImage());
+				if (configuration.getCloudProvider() == CloudProvider.AZURE &&
+						Objects.nonNull(configuration.getCloudConfiguration().getAzureAuthFile()) &&
+						!configuration.getCloudConfiguration().getAzureAuthFile().isEmpty()) {
+					runDockerCommand.withVolumeFoAzureAuthFile(configuration.getCloudConfiguration().getAzureAuthFile());
+				}
+
+				commandExecutor.executeAsync(username, uuid, commandBuilder.buildCommand(runDockerCommand, dto));
 			} else {
 				log.debug("Skipping calling status command. Resource lists are empty");
 			}
diff --git a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/CheckInactivityServiceImpl.java b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/CheckInactivityServiceImpl.java
index 7f7eafe..3713589 100644
--- a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/CheckInactivityServiceImpl.java
+++ b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/CheckInactivityServiceImpl.java
@@ -24,6 +24,7 @@ import com.epam.dlab.backendapi.core.commands.DockerCommands;
 import com.epam.dlab.backendapi.core.commands.RunDockerCommand;
 import com.epam.dlab.backendapi.core.response.handlers.CheckInactivityCallbackHandler;
 import com.epam.dlab.backendapi.service.CheckInactivityService;
+import com.epam.dlab.cloud.CloudProvider;
 import com.epam.dlab.dto.ResourceBaseDTO;
 import com.epam.dlab.dto.base.DataEngineType;
 import com.epam.dlab.dto.computational.ComputationalCheckInactivityDTO;
@@ -32,6 +33,8 @@ import com.epam.dlab.rest.contracts.ApiCallbacks;
 import com.google.inject.Singleton;
 import lombok.extern.slf4j.Slf4j;
 
+import java.util.Objects;
+
 @Slf4j
 @Singleton
 public class CheckInactivityServiceImpl extends DockerService implements CheckInactivityService, DockerCommands {
@@ -41,7 +44,7 @@ public class CheckInactivityServiceImpl extends DockerService implements CheckIn
 	public String checkComputationalInactivity(String userName, ComputationalCheckInactivityDTO dto) {
 		String uuid = DockerCommands.generateUUID();
 		startComputationalCallbackListener(userName, dto, uuid);
-		final RunDockerCommand dockerCommand = new RunDockerCommand()
+		final RunDockerCommand runDockerCommand = new RunDockerCommand()
 				.withInteractive()
 				.withRemove()
 				.withName(nameContainer(uuid, DockerAction.CHECK_INACTIVITY.toString()))
@@ -55,7 +58,13 @@ public class CheckInactivityServiceImpl extends DockerService implements CheckIn
 				.withConfKeyName(configuration.getAdminKey())
 				.withImage(dto.getNotebookImage())
 				.withAction(DockerAction.CHECK_INACTIVITY);
-		runDockerCmd(userName, uuid, dockerCommand, dto);
+		if (configuration.getCloudProvider() == CloudProvider.AZURE &&
+				Objects.nonNull(configuration.getCloudConfiguration().getAzureAuthFile()) &&
+				!configuration.getCloudConfiguration().getAzureAuthFile().isEmpty()) {
+			runDockerCommand.withVolumeFoAzureAuthFile(configuration.getCloudConfiguration().getAzureAuthFile());
+		}
+
+		runDockerCmd(userName, uuid, runDockerCommand, dto);
 		return uuid;
 	}
 
@@ -63,7 +72,7 @@ public class CheckInactivityServiceImpl extends DockerService implements CheckIn
 	public String checkExploratoryInactivity(String userName, ExploratoryCheckInactivityAction dto) {
 		String uuid = DockerCommands.generateUUID();
 		startExploratoryCallbackListener(userName, dto, uuid);
-		final RunDockerCommand dockerCommand = new RunDockerCommand()
+		final RunDockerCommand runDockerCommand = new RunDockerCommand()
 				.withInteractive()
 				.withRemove()
 				.withName(nameContainer(uuid, DockerAction.CHECK_INACTIVITY.toString()))
@@ -75,7 +84,13 @@ public class CheckInactivityServiceImpl extends DockerService implements CheckIn
 				.withConfKeyName(configuration.getAdminKey())
 				.withImage(dto.getNotebookImage())
 				.withAction(DockerAction.CHECK_INACTIVITY);
-		runDockerCmd(userName, uuid, dockerCommand, dto);
+		if (configuration.getCloudProvider() == CloudProvider.AZURE &&
+				Objects.nonNull(configuration.getCloudConfiguration().getAzureAuthFile()) &&
+				!configuration.getCloudConfiguration().getAzureAuthFile().isEmpty()) {
+			runDockerCommand.withVolumeFoAzureAuthFile(configuration.getCloudConfiguration().getAzureAuthFile());
+		}
+
+		runDockerCmd(userName, uuid, runDockerCommand, dto);
 		return uuid;
 	}
 
diff --git a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/ProjectServiceImpl.java b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/ProjectServiceImpl.java
index 47c4dee..1daf93f 100644
--- a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/ProjectServiceImpl.java
+++ b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/ProjectServiceImpl.java
@@ -2,7 +2,11 @@ package com.epam.dlab.backendapi.service.impl;
 
 import com.epam.dlab.auth.UserInfo;
 import com.epam.dlab.backendapi.ProvisioningServiceApplicationConfiguration;
-import com.epam.dlab.backendapi.core.commands.*;
+import com.epam.dlab.backendapi.core.commands.CommandBuilder;
+import com.epam.dlab.backendapi.core.commands.DockerAction;
+import com.epam.dlab.backendapi.core.commands.DockerCommands;
+import com.epam.dlab.backendapi.core.commands.ICommandExecutor;
+import com.epam.dlab.backendapi.core.commands.RunDockerCommand;
 import com.epam.dlab.backendapi.core.response.folderlistener.FolderListenerExecutor;
 import com.epam.dlab.backendapi.core.response.handlers.ProjectCallbackHandler;
 import com.epam.dlab.backendapi.service.ProjectService;
@@ -18,6 +22,8 @@ import com.fasterxml.jackson.core.JsonProcessingException;
 import com.google.inject.Inject;
 import lombok.extern.slf4j.Slf4j;
 
+import java.util.Objects;
+
 @Slf4j
 public class ProjectServiceImpl implements ProjectService {
 	private static final String PROJECT_IMAGE = "docker.dlab-project";
@@ -77,6 +83,11 @@ public class ProjectServiceImpl implements ProjectService {
 				.withConfKeyName(configuration.getAdminKey())
 				.withImage(image)
 				.withAction(action);
+		if (configuration.getCloudProvider() == CloudProvider.AZURE &&
+				Objects.nonNull(configuration.getCloudConfiguration().getAzureAuthFile()) &&
+				!configuration.getCloudConfiguration().getAzureAuthFile().isEmpty()) {
+			runDockerCommand.withVolumeFoAzureAuthFile(configuration.getCloudConfiguration().getAzureAuthFile());
+		}
 
 		try {
 			commandExecutor.executeAsync(userInfo.getName(), uuid, commandBuilder.buildCommand(runDockerCommand, dto));
diff --git a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/SparkClusterService.java b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/SparkClusterService.java
index a773b70..ce73096 100644
--- a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/SparkClusterService.java
+++ b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/SparkClusterService.java
@@ -27,6 +27,7 @@ import com.epam.dlab.backendapi.core.commands.DockerCommands;
 import com.epam.dlab.backendapi.core.commands.RunDockerCommand;
 import com.epam.dlab.backendapi.core.response.handlers.ComputationalCallbackHandler;
 import com.epam.dlab.backendapi.core.response.handlers.ComputationalConfigure;
+import com.epam.dlab.cloud.CloudProvider;
 import com.epam.dlab.dto.base.DataEngineType;
 import com.epam.dlab.dto.base.computational.ComputationalBase;
 import com.epam.dlab.dto.computational.ComputationalClusterConfigDTO;
@@ -38,7 +39,13 @@ import com.fasterxml.jackson.core.JsonProcessingException;
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
 
-import static com.epam.dlab.backendapi.core.commands.DockerAction.*;
+import java.util.Objects;
+
+import static com.epam.dlab.backendapi.core.commands.DockerAction.CREATE;
+import static com.epam.dlab.backendapi.core.commands.DockerAction.RECONFIGURE_SPARK;
+import static com.epam.dlab.backendapi.core.commands.DockerAction.START;
+import static com.epam.dlab.backendapi.core.commands.DockerAction.STOP;
+import static com.epam.dlab.backendapi.core.commands.DockerAction.TERMINATE;
 
 @Singleton
 public class SparkClusterService extends DockerService implements DockerCommands {
@@ -76,7 +83,7 @@ public class SparkClusterService extends DockerService implements DockerCommands
 	private void runReconfigureSparkDockerCommand(UserInfo ui, ComputationalClusterConfigDTO clusterConfigDTO,
 												  String uuid) {
 		try {
-			final RunDockerCommand dockerCommand = new RunDockerCommand()
+			final RunDockerCommand runDockerCommand = new RunDockerCommand()
 					.withInteractive()
 					.withName(nameContainer(clusterConfigDTO.getEdgeUserName(), RECONFIGURE_SPARK,
 							clusterConfigDTO.getExploratoryName(),
@@ -89,8 +96,13 @@ public class SparkClusterService extends DockerService implements DockerCommands
 					.withConfKeyName(configuration.getAdminKey())
 					.withImage(DataEngineType.getDockerImageName(SPARK_ENGINE))
 					.withAction(RECONFIGURE_SPARK);
+			if (configuration.getCloudProvider() == CloudProvider.AZURE &&
+					Objects.nonNull(configuration.getCloudConfiguration().getAzureAuthFile()) &&
+					!configuration.getCloudConfiguration().getAzureAuthFile().isEmpty()) {
+				runDockerCommand.withVolumeFoAzureAuthFile(configuration.getCloudConfiguration().getAzureAuthFile());
+			}
 
-			commandExecutor.executeAsync(ui.getName(), uuid, commandBuilder.buildCommand(dockerCommand,
+			commandExecutor.executeAsync(ui.getName(), uuid, commandBuilder.buildCommand(runDockerCommand,
 					clusterConfigDTO));
 		} catch (JsonProcessingException e) {
 			throw new DlabException("Could not" + RECONFIGURE_SPARK.toString() + "computational resources cluster", e);
@@ -103,7 +115,7 @@ public class SparkClusterService extends DockerService implements DockerCommands
 				configuration.getResourceStatusPollTimeout(),
 				getFileHandlerCallback(action, uuid, dto));
 		try {
-			final RunDockerCommand dockerCommand = new RunDockerCommand()
+			final RunDockerCommand runDockerCommand = new RunDockerCommand()
 					.withInteractive()
 					.withName(nameContainer(dto.getEdgeUserName(), action, dto.getExploratoryName(),
 							dto.getComputationalName()))
@@ -115,8 +127,13 @@ public class SparkClusterService extends DockerService implements DockerCommands
 					.withConfKeyName(configuration.getAdminKey())
 					.withImage(DataEngineType.getDockerImageName(SPARK_ENGINE))
 					.withAction(action);
+			if (configuration.getCloudProvider() == CloudProvider.AZURE &&
+					Objects.nonNull(configuration.getCloudConfiguration().getAzureAuthFile()) &&
+					!configuration.getCloudConfiguration().getAzureAuthFile().isEmpty()) {
+				runDockerCommand.withVolumeFoAzureAuthFile(configuration.getCloudConfiguration().getAzureAuthFile());
+			}
 
-			commandExecutor.executeAsync(ui.getName(), uuid, commandBuilder.buildCommand(dockerCommand, dto));
+			commandExecutor.executeAsync(ui.getName(), uuid, commandBuilder.buildCommand(runDockerCommand, dto));
 		} catch (JsonProcessingException e) {
 			throw new DlabException("Could not" + action.toString() + "computational resources cluster", e);
 		}


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@dlab.apache.org
For additional commands, e-mail: commits-help@dlab.apache.org