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/01/10 12:34:18 UTC

[incubator-dlab] branch multiple-cloud updated: [DLAB-1432] Removed usage of getCloudProvider()in self-service

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

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


The following commit(s) were added to refs/heads/multiple-cloud by this push:
     new 0eafb4d  [DLAB-1432] Removed usage of getCloudProvider()in self-service
0eafb4d is described below

commit 0eafb4d131c31bb0d5f4ad2a589c0d1443ad442b
Author: Oleh Fuks <ol...@gmail.com>
AuthorDate: Fri Jan 10 14:33:57 2020 +0200

    [DLAB-1432] Removed usage of getCloudProvider()in self-service
---
 .../dlab/backendapi/SelfServiceApplication.java    |   3 -
 .../java/com/epam/dlab/backendapi/dao/EnvDAO.java  |   6 +-
 .../dlab/backendapi/domain/EnvStatusListener.java  | 164 -------------
 .../backendapi/domain/ExploratoryLibCache.java     |  17 +-
 .../backendapi/resources/SecurityResource.java     | 147 ------------
 .../resources/callback/ComputationalCallback.java  |   5 -
 .../resources/callback/ExploratoryCallback.java    |   9 +-
 .../backendapi/service/ReuploadKeyService.java     |   2 -
 .../service/impl/ComputationalServiceImpl.java     |  40 ++--
 .../service/impl/ExploratoryServiceImpl.java       |  29 +--
 .../service/impl/GitCredentialServiceImpl.java     |   7 +-
 .../service/impl/ImageExploratoryServiceImpl.java  |   7 +-
 .../service/impl/InactivityServiceImpl.java        |  21 +-
 .../service/impl/LibraryServiceImpl.java           |  22 +-
 .../service/impl/ProjectServiceImpl.java           |  25 +-
 .../service/impl/ReuploadKeyServiceImpl.java       |  25 --
 .../epam/dlab/backendapi/util/RequestBuilder.java  | 256 +++++++++------------
 .../service/impl/ComputationalServiceImplTest.java |  46 ++--
 .../service/impl/ExploratoryServiceImplTest.java   |  27 +--
 .../service/impl/GitCredentialServiceImplTest.java |   9 +-
 .../impl/ImageExploratoryServiceImplTest.java      |  10 +-
 .../service/impl/LibraryServiceImplTest.java       |  26 ++-
 .../service/impl/ReuploadKeyServiceImplTest.java   | 146 ------------
 23 files changed, 260 insertions(+), 789 deletions(-)

diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/SelfServiceApplication.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/SelfServiceApplication.java
index cffd327..0fe8464 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/SelfServiceApplication.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/SelfServiceApplication.java
@@ -21,7 +21,6 @@ package com.epam.dlab.backendapi;
 
 import com.epam.dlab.backendapi.conf.SelfServiceApplicationConfiguration;
 import com.epam.dlab.backendapi.dao.IndexCreator;
-import com.epam.dlab.backendapi.domain.EnvStatusListener;
 import com.epam.dlab.backendapi.domain.ExploratoryLibCache;
 import com.epam.dlab.backendapi.dropwizard.bundles.DlabKeycloakBundle;
 import com.epam.dlab.backendapi.dropwizard.listeners.MongoStartupListener;
@@ -110,7 +109,6 @@ public class SelfServiceApplication extends Application<SelfServiceApplicationCo
 		environment.lifecycle().addServerLifecycleListener(restoreHandlerStartupListener);
 		environment.lifecycle().addServerLifecycleListener(this::disableGzipHandlerForGuacamoleServlet);
 		environment.lifecycle().manage(injector.getInstance(IndexCreator.class));
-		environment.lifecycle().manage(injector.getInstance(EnvStatusListener.class));
 		environment.lifecycle().manage(injector.getInstance(ExploratoryLibCache.class));
 		environment.lifecycle().manage(injector.getInstance(ManagedScheduler.class));
 		environment.healthChecks().register(ServiceConsts.MONGO_NAME, injector.getInstance(MongoHealthCheck.class));
@@ -128,7 +126,6 @@ public class SelfServiceApplication extends Application<SelfServiceApplicationCo
 		jersey.register(new DlabValidationExceptionMapper());
 		jersey.register(new ValidationExceptionMapper());
 		jersey.register(new ResourceQuoteReachedExceptionMapper());
-		jersey.register(injector.getInstance(SecurityResource.class));
 
 		jersey.register(injector.getInstance(InfrastructureTemplateResource.class));
 		jersey.register(injector.getInstance(InfrastructureInfoResource.class));
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/EnvDAO.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/EnvDAO.java
index 32065f2..0e85908 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/EnvDAO.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/dao/EnvDAO.java
@@ -22,11 +22,9 @@ package com.epam.dlab.backendapi.dao;
 import com.epam.dlab.auth.UserInfo;
 import com.epam.dlab.backendapi.SelfServiceApplication;
 import com.epam.dlab.backendapi.conf.SelfServiceApplicationConfiguration;
-import com.epam.dlab.backendapi.domain.EnvStatusListener;
 import com.epam.dlab.backendapi.resources.aws.ComputationalResourceAws;
 import com.epam.dlab.backendapi.resources.dto.HealthStatusEnum;
 import com.epam.dlab.backendapi.resources.dto.HealthStatusPageDTO;
-import com.epam.dlab.cloud.CloudProvider;
 import com.epam.dlab.dto.UserInstanceDTO;
 import com.epam.dlab.dto.UserInstanceStatus;
 import com.epam.dlab.dto.base.DataEngineType;
@@ -459,9 +457,7 @@ public class EnvDAO extends BaseDAO {
 			return false;
 		}
 
-		EnvStatusListener envStatusListener =
-				SelfServiceApplication.getInjector().getInstance(EnvStatusListener.class);
-		UserInfo userInfo = (envStatusListener != null) ? envStatusListener.getSession(user) : null;
+		UserInfo userInfo = null;
 		if (userInfo == null) {
 			// User logged off. Computational will be terminated when user logged in.
 			return true;
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/EnvStatusListener.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/EnvStatusListener.java
deleted file mode 100644
index ab1f9a8..0000000
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/EnvStatusListener.java
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-
-package com.epam.dlab.backendapi.domain;
-
-import com.epam.dlab.auth.UserInfo;
-import com.epam.dlab.backendapi.conf.SelfServiceApplicationConfiguration;
-import com.epam.dlab.backendapi.dao.EnvDAO;
-import com.epam.dlab.backendapi.service.EndpointService;
-import com.epam.dlab.backendapi.util.RequestBuilder;
-import com.epam.dlab.constants.ServiceConsts;
-import com.epam.dlab.dto.UserEnvironmentResources;
-import com.epam.dlab.dto.status.EnvResourceList;
-import com.epam.dlab.rest.client.RESTService;
-import com.epam.dlab.rest.contracts.InfrasctructureAPI;
-import com.google.common.cache.Cache;
-import com.google.common.cache.CacheBuilder;
-import com.google.common.cache.RemovalNotification;
-import com.google.inject.Inject;
-import com.google.inject.Singleton;
-import com.google.inject.name.Named;
-import io.dropwizard.lifecycle.Managed;
-import lombok.extern.slf4j.Slf4j;
-
-import java.util.Map;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.TimeUnit;
-
-/**
- * Send requests to the docker to check environment status.
- */
-@Singleton
-@Slf4j
-public class EnvStatusListener implements Managed {
-
-	private final ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
-
-	private final Cache<String, UserInfo> sessions;
-	private final EnvDAO dao;
-	private final RESTService provisioningService;
-	private final StatusChecker statusChecker = new StatusChecker();
-	private final long checkEnvStatusTimeout;
-	private final RequestBuilder requestBuilder;
-
-	@Inject
-	private RequestId requestId;
-	@Inject
-	private EndpointService endpointService;
-
-	@Inject
-	public EnvStatusListener(SelfServiceApplicationConfiguration configuration, EnvDAO dao,
-							 @Named(ServiceConsts.PROVISIONING_SERVICE_NAME) RESTService provisioningService,
-							 RequestBuilder requestBuilder) {
-
-		this.sessions = CacheBuilder.newBuilder()
-				.expireAfterAccess(configuration.getInactiveUserTimeoutMillSec(), TimeUnit.MILLISECONDS)
-				.removalListener((RemovalNotification<String, Object> notification) ->
-						log.info("User {} session is removed", notification.getKey()))
-				.build();
-
-		this.dao = dao;
-		this.provisioningService = provisioningService;
-		this.checkEnvStatusTimeout = configuration.getCheckEnvStatusTimeout().toMilliseconds();
-		this.requestBuilder = requestBuilder;
-	}
-
-	@Override
-	public void start() {
-		executorService.scheduleAtFixedRate(new StatusChecker(), checkEnvStatusTimeout, checkEnvStatusTimeout,
-				TimeUnit.MILLISECONDS);
-	}
-
-	@Override
-	public void stop() throws Exception {
-		statusChecker.shouldStop = true;
-		if (!executorService.awaitTermination(10, TimeUnit.SECONDS)) {
-			executorService.shutdownNow();
-		}
-	}
-
-	public void registerSession(UserInfo userInfo) {
-		UserInfo ui = getSession(userInfo.getName());
-		log.info("Register session(existing = {}) for {}", ui != null, userInfo.getName());
-		sessions.put(userInfo.getName(), userInfo);
-	}
-
-	public void unregisterSession(UserInfo userInfo) {
-		log.info("Invalidate session for {}", userInfo.getName());
-		sessions.invalidate(userInfo.getName());
-	}
-
-	public UserInfo getSession(String username) {
-		return sessions.getIfPresent(username);
-	}
-
-	/**
-	 * Scheduled @{@link Runnable} that verifies status of users' resources
-	 */
-	private class StatusChecker implements Runnable {
-		private volatile boolean shouldStop = false;
-
-		@Override
-		public void run() {
-
-			log.debug("Start checking environment statuses");
-
-			sessions.cleanUp();
-
-			for (Map.Entry<String, UserInfo> entry : sessions.asMap().entrySet()) {
-				try {
-					if (!shouldStop) {
-						checkStatusThroughProvisioningService(entry.getValue());
-					} else {
-						log.info("Stopping env status listener");
-					}
-				} catch (RuntimeException e) {
-					log.error("Cannot check env status for user {}", entry.getKey(), e);
-				}
-			}
-		}
-
-		/**
-		 * Sends request to docker to check the status of user environment.
-		 *
-		 * @param userInfo username
-		 */
-		private void checkStatusThroughProvisioningService(UserInfo userInfo) {
-
-			final Map<String, EnvResourceList> envResources = dao.findEnvResources(userInfo.getName());
-			UserEnvironmentResources dto = requestBuilder.newUserEnvironmentStatus(userInfo);
-
-			envResources.forEach((endpoint, resourceList) -> {
-				log.trace("EnvStatus listener check status for user {} with resource list {}", userInfo.getName(),
-						resourceList);
-				dto.withResourceList(resourceList);
-				log.trace("Ask docker for the status of resources for user {}: {}", userInfo.getName(), dto);
-				String uuid =
-						provisioningService.post(endpointService.get(endpoint).getUrl() + InfrasctructureAPI.INFRASTRUCTURE_STATUS,
-								userInfo.getAccessToken(),
-								dto, String.class);
-				requestId.put(userInfo.getName(), uuid);
-
-			});
-		}
-	}
-}
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/ExploratoryLibCache.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/ExploratoryLibCache.java
index 13c6cda..0faf66c 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/ExploratoryLibCache.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/ExploratoryLibCache.java
@@ -223,18 +223,19 @@ public class ExploratoryLibCache implements Managed, Runnable {
 			String uuid;
 			if (userInstance.getResources() != null && !userInstance.getResources().isEmpty()) {
 				UserComputationalResource userComputationalResource = userInstance.getResources().get(0);
+				EndpointDTO endpointDTO = endpointService.get(userInstance.getEndpoint());
 				LibListComputationalDTO dto = requestBuilder.newLibComputationalList(userInfo, userInstance,
-						userComputationalResource);
-				uuid = provisioningService.post(endpointService
-								.get(userInstance.getEndpoint()).getUrl() + ComputationalAPI.COMPUTATIONAL_LIB_LIST,
+						userComputationalResource, endpointDTO);
+
+				uuid = provisioningService.post(endpointDTO.getUrl() + ComputationalAPI.COMPUTATIONAL_LIB_LIST,
 						userInfo.getAccessToken(),
 						dto, String.class);
 			} else {
-				ExploratoryActionDTO<?> dto = requestBuilder.newLibExploratoryList(userInfo, userInstance);
-				uuid =
-						provisioningService.post(endpointService.get(userInstance.getEndpoint()).getUrl() + ExploratoryAPI.EXPLORATORY_LIB_LIST,
-								userInfo.getAccessToken(), dto,
-								String.class);
+				EndpointDTO endpointDTO = endpointService.get(userInstance.getEndpoint());
+				ExploratoryActionDTO<?> dto = requestBuilder.newLibExploratoryList(userInfo, userInstance, endpointDTO);
+				uuid = provisioningService.post(endpointDTO.getUrl() + ExploratoryAPI.EXPLORATORY_LIB_LIST,
+						userInfo.getAccessToken(), dto,
+						String.class);
 			}
 
 			requestId.put(userInfo.getName(), uuid);
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/SecurityResource.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/SecurityResource.java
deleted file mode 100644
index 031ffa7..0000000
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/SecurityResource.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package com.epam.dlab.backendapi.resources;
-
-import com.epam.dlab.auth.UserInfo;
-import com.epam.dlab.auth.contract.SecurityAPI;
-import com.epam.dlab.auth.dto.UserCredentialDTO;
-import com.epam.dlab.backendapi.conf.SelfServiceApplicationConfiguration;
-import com.epam.dlab.backendapi.dao.SecurityDAO;
-import com.epam.dlab.backendapi.domain.EnvStatusListener;
-import com.epam.dlab.backendapi.roles.UserRoles;
-import com.epam.dlab.exceptions.DlabException;
-import com.epam.dlab.rest.client.RESTService;
-import com.epam.dlab.rest.dto.ErrorDTO;
-import com.epam.dlab.validation.AwsValidation;
-import com.google.inject.Inject;
-import io.dropwizard.auth.Auth;
-import lombok.extern.slf4j.Slf4j;
-import org.hibernate.validator.constraints.NotBlank;
-
-import javax.validation.Valid;
-import javax.validation.constraints.NotNull;
-import javax.ws.rs.Consumes;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.Response.Status;
-
-/**
- * Provides the REST API for the user authorization.
- */
-@Path("/user")
-@Consumes(MediaType.APPLICATION_JSON)
-@Produces(MediaType.APPLICATION_JSON)
-@Slf4j
-public class SecurityResource implements SecurityAPI {
-
-	private SecurityDAO dao;
-	private RESTService securityService;
-	private EnvStatusListener envStatusListener;
-	private SelfServiceApplicationConfiguration configuration;
-
-	@Inject
-	public SecurityResource(SecurityDAO dao,
-							EnvStatusListener envStatusListener, SelfServiceApplicationConfiguration configuration) {
-		this.dao = dao;
-		this.securityService = null;
-		this.envStatusListener = envStatusListener;
-		this.configuration = configuration;
-	}
-
-	/**
-	 * Login method for the DLab user.
-	 *
-	 * @param credential user credential.
-	 * @return 500 Internal Server Error if post response fails.
-	 */
-	@POST
-	@Produces(MediaType.TEXT_PLAIN)
-	@Path("/login")
-	public Response userLogin(@Valid @NotNull UserCredentialDTO credential) {
-		log.debug("Try login for user {}", credential.getUsername());
-		try {
-			dao.writeLoginAttempt(credential);
-			return securityService.post(LOGIN, credential, Response.class);
-		} catch (Exception e) {
-			log.error("Try login for user {} fail", credential.getUsername(), e);
-			final Status internalServerError = Status.INTERNAL_SERVER_ERROR;
-			return Response.status(internalServerError)
-					.entity(new ErrorDTO(internalServerError.getStatusCode(), e.getMessage()))
-					.type(MediaType.APPLICATION_JSON)
-					.build();
-		}
-	}
-
-
-	/**
-	 * Authorize method for the dlab user.
-	 *
-	 * @param userInfo user info.
-	 * @param username user name.
-	 * @return 500 Internal Server Error if post request fails.
-	 */
-	@POST
-	@Consumes(MediaType.TEXT_PLAIN)
-	@Path("/authorize")
-	public Response authorize(@Auth UserInfo userInfo,
-							  @Valid @NotBlank(groups = AwsValidation.class) String username) {
-		log.debug("Try authorize accessToken {} for user info {}", userInfo.getAccessToken(), userInfo);
-		try {
-			Status status = userInfo.getName().equalsIgnoreCase(username) ?
-					Status.OK :
-					Status.FORBIDDEN;
-			if (status == Status.OK) {
-				envStatusListener.registerSession(userInfo);
-				if (configuration.isRolePolicyEnabled()) {
-					UserRoles.initialize(dao, configuration.getRoleDefaultAccess());
-				}
-			}
-			return Response.status(status).build();
-		} catch (Exception e) {
-			throw new DlabException("Cannot authorize user " + username + ". " + e.getLocalizedMessage(), e);
-		}
-	}
-
-	/**
-	 * Logout method for the DLab user.
-	 *
-	 * @param userInfo user info.
-	 * @return 200 OK or 403 Forbidden.
-	 */
-	@POST
-	@Path("/logout")
-	public Response userLogout(@Auth UserInfo userInfo) {
-		log.debug("Try logout for accessToken {}", userInfo.getAccessToken());
-		try {
-			envStatusListener.unregisterSession(userInfo);
-			return securityService.post(LOGOUT, userInfo.getAccessToken(), Response.class);
-		} catch (Exception e) {
-			log.error("Try logout for accessToken {}", userInfo.getAccessToken(), e);
-			final Status internalServerError = Status.INTERNAL_SERVER_ERROR;
-			return Response.status(internalServerError)
-					.entity(new ErrorDTO(internalServerError.getStatusCode(), e.getMessage()))
-					.type(MediaType.APPLICATION_JSON)
-					.build();
-		}
-	}
-}
\ No newline at end of file
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/callback/ComputationalCallback.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/callback/ComputationalCallback.java
index b2da20c..04ca8fb 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/callback/ComputationalCallback.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/callback/ComputationalCallback.java
@@ -93,11 +93,6 @@ public class ComputationalCallback {
 			log.debug("Waiting for configuration of the computational resource {} for user {}",
 					dto.getComputationalName(), dto.getUser());
 			requestId.put(dto.getUser(), uuid);
-		} else if (UserInstanceStatus.of(dto.getStatus()) == RUNNING && compResource.isReuploadKeyRequired()) {
-			ResourceData resourceData = ResourceData.computationalResource(compResource.getComputationalId(),
-					dto.getExploratoryName(), dto.getComputationalName());
-			UserInfo userInfo = securityService.getUserInfoOffline(dto.getUser());
-			reuploadKeyService.reuploadKeyAction(userInfo, resourceData);
 		}
 		return Response.ok().build();
 	}
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/callback/ExploratoryCallback.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/callback/ExploratoryCallback.java
index 62f6435..8e11c0b 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/callback/ExploratoryCallback.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/callback/ExploratoryCallback.java
@@ -19,7 +19,6 @@
 
 package com.epam.dlab.backendapi.resources.callback;
 
-import com.epam.dlab.auth.UserInfo;
 import com.epam.dlab.backendapi.dao.ComputationalDAO;
 import com.epam.dlab.backendapi.dao.ExploratoryDAO;
 import com.epam.dlab.backendapi.domain.RequestId;
@@ -30,7 +29,6 @@ import com.epam.dlab.dto.UserInstanceDTO;
 import com.epam.dlab.dto.UserInstanceStatus;
 import com.epam.dlab.dto.exploratory.ExploratoryStatusDTO;
 import com.epam.dlab.exceptions.DlabException;
-import com.epam.dlab.model.ResourceData;
 import com.epam.dlab.rest.contracts.ApiCallbacks;
 import com.google.inject.Inject;
 import lombok.extern.slf4j.Slf4j;
@@ -103,12 +101,7 @@ public class ExploratoryCallback {
 			throw new DlabException("Could not update status for exploratory environment " + dto.getExploratoryName() +
 					" for user " + dto.getUser() + " to " + dto.getStatus() + ": " + e.getLocalizedMessage(), e);
 		}
-		if (UserInstanceStatus.of(dto.getStatus()) == RUNNING && instance.isReuploadKeyRequired()) {
-			ResourceData resourceData =
-					ResourceData.exploratoryResource(dto.getExploratoryId(), dto.getExploratoryName());
-			UserInfo userInfo = securityService.getUserInfoOffline(dto.getUser());
-			reuploadKeyService.reuploadKeyAction(userInfo, resourceData);
-		}
+
 		return Response.ok().build();
 	}
 
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/ReuploadKeyService.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/ReuploadKeyService.java
index 45939a0..0c2b199 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/ReuploadKeyService.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/ReuploadKeyService.java
@@ -25,7 +25,5 @@ import com.epam.dlab.model.ResourceData;
 
 public interface ReuploadKeyService {
 
-	void reuploadKeyAction(UserInfo userInfo, ResourceData resourceData);
-
 	void updateResourceData(ReuploadKeyStatusDTO dto);
 }
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ComputationalServiceImpl.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ComputationalServiceImpl.java
index ab26b7c..52decf8 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ComputationalServiceImpl.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ComputationalServiceImpl.java
@@ -25,6 +25,7 @@ import com.epam.dlab.backendapi.annotation.BudgetLimited;
 import com.epam.dlab.backendapi.annotation.Project;
 import com.epam.dlab.backendapi.dao.ComputationalDAO;
 import com.epam.dlab.backendapi.dao.ExploratoryDAO;
+import com.epam.dlab.backendapi.domain.EndpointDTO;
 import com.epam.dlab.backendapi.domain.ProjectDTO;
 import com.epam.dlab.backendapi.domain.RequestId;
 import com.epam.dlab.backendapi.resources.dto.ComputationalCreateFormDTO;
@@ -108,11 +109,11 @@ public class ComputationalServiceImpl implements ComputationalService {
 				form.getCustomTag()));
 		if (computationalDAO.addComputational(userInfo.getName(), form.getNotebookName(), compResource)) {
 			try {
-				ComputationalBase<?> dto = requestBuilder.newComputationalCreate(userInfo, projectDTO, instance, form);
+				EndpointDTO endpointDTO = endpointService.get(instance.getEndpoint());
+				ComputationalBase<?> dto = requestBuilder.newComputationalCreate(userInfo, projectDTO, instance, form, endpointDTO);
 
 				String uuid =
-						provisioningService.post(endpointService.get(instance.getEndpoint()).getUrl() +
-										ComputationalAPI.COMPUTATIONAL_CREATE_SPARK,
+						provisioningService.post(endpointDTO.getUrl() + ComputationalAPI.COMPUTATIONAL_CREATE_SPARK,
 								userInfo.getAccessToken(), dto, String.class);
 				requestId.put(userInfo.getName(), uuid);
 				return true;
@@ -143,12 +144,13 @@ public class ComputationalServiceImpl implements ComputationalService {
 					.getName(), exploratoryName, computationalName);
 
 			final DataEngineType dataEngineType = compResource.getDataEngineType();
-			ComputationalTerminateDTO dto = requestBuilder.newComputationalTerminate(userInfo, userInstanceDTO, compResource);
+			EndpointDTO endpointDTO = endpointService.get(userInstanceDTO.getEndpoint());
+			ComputationalTerminateDTO dto = requestBuilder.newComputationalTerminate(userInfo, userInstanceDTO, compResource, endpointDTO);
 
 			final String provisioningUrl = Optional.ofNullable(DATA_ENGINE_TYPE_TERMINATE_URLS.get(dataEngineType))
 					.orElseThrow(UnsupportedOperationException::new);
 			String uuid =
-					provisioningService.post(endpointService.get(userInstanceDTO.getEndpoint()).getUrl() + provisioningUrl,
+					provisioningService.post(endpointDTO.getUrl() + provisioningUrl,
 							userInfo.getAccessToken(), dto, String.class);
 			requestId.put(userInfo.getName(), uuid);
 		} catch (RuntimeException re) {
@@ -179,10 +181,11 @@ public class ComputationalServiceImpl implements ComputationalService {
 
 		if (isAdded) {
 			try {
+				EndpointDTO endpointDTO = endpointService.get(instance.getEndpoint());
 				String uuid =
-						provisioningService.post(endpointService.get(instance.getEndpoint()).getUrl() +
-										COMPUTATIONAL_CREATE_CLOUD_SPECIFIC, userInfo.getAccessToken(),
-								requestBuilder.newComputationalCreate(userInfo, projectDTO, instance, formDTO),
+						provisioningService.post(endpointDTO.getUrl() + COMPUTATIONAL_CREATE_CLOUD_SPECIFIC,
+								userInfo.getAccessToken(),
+								requestBuilder.newComputationalCreate(userInfo, projectDTO, instance, formDTO, endpointDTO),
 								String.class);
 				requestId.put(userInfo.getName(), uuid);
 				return true;
@@ -209,10 +212,12 @@ public class ComputationalServiceImpl implements ComputationalService {
 		if (computationalWithStatusResourceExist(compName, userInstance, requiredStatus)) {
 			log.debug("{} spark cluster {} for userInstance {}", STOPPING.toString(), compName, expName);
 			updateComputationalStatus(userInfo.getName(), expName, compName, STOPPING);
+			EndpointDTO endpointDTO = endpointService.get(userInstance.getEndpoint());
 			final String uuid =
-					provisioningService.post(endpointService.get(userInstance.getEndpoint()).getUrl() + ComputationalAPI.COMPUTATIONAL_STOP_SPARK,
+					provisioningService.post(endpointDTO.getUrl() + ComputationalAPI.COMPUTATIONAL_STOP_SPARK,
 							userInfo.getAccessToken(),
-							requestBuilder.newComputationalStop(userInfo, userInstance, compName), String.class);
+							requestBuilder.newComputationalStop(userInfo, userInstance, compName, endpointDTO),
+							String.class);
 			requestId.put(userInfo.getName(), uuid);
 		} else {
 			throw new IllegalStateException(String.format(DATAENGINE_NOT_PRESENT_FORMAT,
@@ -230,10 +235,12 @@ public class ComputationalServiceImpl implements ComputationalService {
 		if (computationalWithStatusResourceExist(compName, userInstance, requiredStatus)) {
 			log.debug("{} spark cluster {} for userInstance {}", STARTING.toString(), compName, expName);
 			updateComputationalStatus(userInfo.getName(), expName, compName, STARTING);
+			EndpointDTO endpointDTO = endpointService.get(userInstance.getEndpoint());
 			final String uuid =
-					provisioningService.post(endpointService.get(userInstance.getEndpoint()).getUrl() + ComputationalAPI.COMPUTATIONAL_START_SPARK,
-							userInfo.getAccessToken(), requestBuilder.newComputationalStart(userInfo, userInstance,
-									compName), String.class);
+					provisioningService.post(endpointDTO.getUrl() + ComputationalAPI.COMPUTATIONAL_START_SPARK,
+							userInfo.getAccessToken(),
+							requestBuilder.newComputationalStart(userInfo, userInstance, compName, endpointDTO),
+							String.class);
 			requestId.put(userInfo.getName(), uuid);
 		} else {
 			throw new IllegalStateException(String.format(DATAENGINE_NOT_PRESENT_FORMAT,
@@ -255,11 +262,12 @@ public class ComputationalServiceImpl implements ComputationalService {
 				.findAny()
 				.orElseThrow(() -> new ResourceNotFoundException(String.format(RUNNING_COMP_RES_NOT_FOUND,
 						computationalName, exploratoryName)));
+		EndpointDTO endpointDTO = endpointService.get(userInstanceDTO.getEndpoint());
 		final ComputationalClusterConfigDTO clusterConfigDto = requestBuilder.newClusterConfigUpdate(userInfo,
-				userInstanceDTO, compResource, config);
+				userInstanceDTO, compResource, config, endpointDTO);
 		final String uuid =
-				provisioningService.post(endpointService.get(userInstanceDTO.getEndpoint()).getUrl() + ComputationalAPI.COMPUTATIONAL_RECONFIGURE_SPARK, token,
-						clusterConfigDto, String.class);
+				provisioningService.post(endpointDTO.getUrl() + ComputationalAPI.COMPUTATIONAL_RECONFIGURE_SPARK,
+						token, clusterConfigDto, String.class);
 		computationalDAO.updateComputationalFields(new ComputationalStatusDTO()
 				.withComputationalName(computationalName)
 				.withExploratoryName(exploratoryName)
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ExploratoryServiceImpl.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ExploratoryServiceImpl.java
index fe710f5..9bce79d 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ExploratoryServiceImpl.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ExploratoryServiceImpl.java
@@ -26,6 +26,7 @@ import com.epam.dlab.backendapi.dao.ComputationalDAO;
 import com.epam.dlab.backendapi.dao.ExploratoryDAO;
 import com.epam.dlab.backendapi.dao.GitCredsDAO;
 import com.epam.dlab.backendapi.dao.ImageExploratoryDao;
+import com.epam.dlab.backendapi.domain.EndpointDTO;
 import com.epam.dlab.backendapi.domain.ProjectDTO;
 import com.epam.dlab.backendapi.domain.RequestId;
 import com.epam.dlab.backendapi.service.EndpointService;
@@ -110,11 +111,12 @@ public class ExploratoryServiceImpl implements ExploratoryService {
 			isAdded = true;
 			final ExploratoryGitCredsDTO gitCreds = gitCredsDAO.findGitCreds(userInfo.getName());
 			log.debug("Created exploratory environment {} for user {}", exploratory.getName(), userInfo.getName());
+			EndpointDTO endpointDTO = endpointService.get(userInstanceDTO.getEndpoint());
 			final String uuid =
-					provisioningService.post(endpointService.get(userInstanceDTO.getEndpoint()).getUrl() + EXPLORATORY_CREATE,
+					provisioningService.post(endpointDTO.getUrl() + EXPLORATORY_CREATE,
 							userInfo.getAccessToken(),
-							requestBuilder.newExploratoryCreate(projectDTO, exploratory, userInfo, gitCreds,
-									userInstanceDTO.getTags()),
+							requestBuilder.newExploratoryCreate(projectDTO, endpointDTO, exploratory, userInfo,
+									gitCreds, userInstanceDTO.getTags()),
 							String.class);
 			requestId.put(userInfo.getName(), uuid);
 			return uuid;
@@ -177,11 +179,12 @@ public class ExploratoryServiceImpl implements ExploratoryService {
 		final String token = userInfo.getAccessToken();
 		final UserInstanceDTO userInstanceDTO = exploratoryDAO.fetchRunningExploratoryFields(userName,
 				exploratoryName);
+		EndpointDTO endpointDTO = endpointService.get(userInstanceDTO.getEndpoint());
 		final ExploratoryReconfigureSparkClusterActionDTO updateClusterConfigDTO =
-				requestBuilder.newClusterConfigUpdate(userInfo, userInstanceDTO, config);
-		final String uuid =
-				provisioningService.post(endpointService.get(userInstanceDTO.getEndpoint()).getUrl() + EXPLORATORY_RECONFIGURE_SPARK, token, updateClusterConfigDTO,
-						String.class);
+				requestBuilder.newClusterConfigUpdate(userInfo, userInstanceDTO, config, endpointDTO);
+		final String uuid = provisioningService.post(endpointDTO.getUrl() + EXPLORATORY_RECONFIGURE_SPARK,
+				token, updateClusterConfigDTO,
+				String.class);
 		requestId.put(userName, uuid);
 		exploratoryDAO.updateExploratoryFields(new ExploratoryStatusDTO()
 				.withUser(userName)
@@ -245,10 +248,10 @@ public class ExploratoryServiceImpl implements ExploratoryService {
 			updateExploratoryStatus(exploratoryName, status, userInfo.getName());
 
 			UserInstanceDTO userInstance = exploratoryDAO.fetchExploratoryFields(userInfo.getName(), exploratoryName);
+			EndpointDTO endpointDTO = endpointService.get(userInstance.getEndpoint());
 			final String uuid =
-					provisioningService.post(endpointService.get(userInstance.getEndpoint()).getUrl() + action,
-							userInfo.getAccessToken(),
-							getExploratoryActionDto(userInfo, status, userInstance), String.class);
+					provisioningService.post(endpointDTO.getUrl() + action, userInfo.getAccessToken(),
+							getExploratoryActionDto(userInfo, status, userInstance, endpointDTO), String.class);
 			requestId.put(userInfo.getName(), uuid);
 			return uuid;
 		} catch (Exception t) {
@@ -275,13 +278,13 @@ public class ExploratoryServiceImpl implements ExploratoryService {
 	}
 
 	private ExploratoryActionDTO<?> getExploratoryActionDto(UserInfo userInfo, UserInstanceStatus status,
-															UserInstanceDTO userInstance) {
+															UserInstanceDTO userInstance, EndpointDTO endpointDTO) {
 		ExploratoryActionDTO<?> dto;
 		if (status != UserInstanceStatus.STARTING) {
-			dto = requestBuilder.newExploratoryStop(userInfo, userInstance);
+			dto = requestBuilder.newExploratoryStop(userInfo, userInstance, endpointDTO);
 		} else {
 			dto = requestBuilder.newExploratoryStart(
-					userInfo, userInstance, gitCredsDAO.findGitCreds(userInfo.getName()));
+					userInfo, userInstance, endpointDTO, gitCredsDAO.findGitCreds(userInfo.getName()));
 
 		}
 		return dto;
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/GitCredentialServiceImpl.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/GitCredentialServiceImpl.java
index 4931276..6d94a0b 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/GitCredentialServiceImpl.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/GitCredentialServiceImpl.java
@@ -22,6 +22,7 @@ package com.epam.dlab.backendapi.service.impl;
 import com.epam.dlab.auth.UserInfo;
 import com.epam.dlab.backendapi.dao.ExploratoryDAO;
 import com.epam.dlab.backendapi.dao.GitCredsDAO;
+import com.epam.dlab.backendapi.domain.EndpointDTO;
 import com.epam.dlab.backendapi.domain.RequestId;
 import com.epam.dlab.backendapi.service.EndpointService;
 import com.epam.dlab.backendapi.service.GitCredentialService;
@@ -98,9 +99,9 @@ public class GitCredentialServiceImpl implements GitCredentialService {
 		try {
 			log.debug("Updating GIT creds for user {} on exploratory {}",
 					userInfo.getName(), instance.getExploratoryName());
-			ExploratoryGitCredsUpdateDTO dto = requestBuilder.newGitCredentialsUpdate(userInfo, instance, formDTO);
-			final String uuid = provisioningService
-					.post(endpointService.get(instance.getEndpoint()).getUrl() + EXPLORATORY_GIT_CREDS,
+			EndpointDTO endpointDTO = endpointService.get(instance.getEndpoint());
+			ExploratoryGitCredsUpdateDTO dto = requestBuilder.newGitCredentialsUpdate(userInfo, instance, endpointDTO, formDTO);
+			final String uuid = provisioningService.post(endpointDTO.getUrl() + EXPLORATORY_GIT_CREDS,
 							userInfo.getAccessToken(), dto, String.class);
 			requestId.put(userInfo.getName(), uuid);
 		} catch (Exception t) {
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ImageExploratoryServiceImpl.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ImageExploratoryServiceImpl.java
index 467dcf4..bd00f38 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ImageExploratoryServiceImpl.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ImageExploratoryServiceImpl.java
@@ -23,6 +23,7 @@ import com.epam.dlab.auth.UserInfo;
 import com.epam.dlab.backendapi.dao.ExploratoryDAO;
 import com.epam.dlab.backendapi.dao.ExploratoryLibDAO;
 import com.epam.dlab.backendapi.dao.ImageExploratoryDao;
+import com.epam.dlab.backendapi.domain.EndpointDTO;
 import com.epam.dlab.backendapi.resources.dto.ImageInfoRecord;
 import com.epam.dlab.backendapi.service.EndpointService;
 import com.epam.dlab.backendapi.service.ImageExploratoryService;
@@ -100,8 +101,10 @@ public class ImageExploratoryServiceImpl implements ImageExploratoryService {
 				.withExploratoryName(exploratoryName)
 				.withStatus(UserInstanceStatus.CREATING_IMAGE));
 
-		return provisioningService.post(endpointService.get(userInstance.getEndpoint()).getUrl() + ExploratoryAPI.EXPLORATORY_IMAGE, user.getAccessToken(),
-				requestBuilder.newExploratoryImageCreate(user, userInstance, imageName), String.class);
+		EndpointDTO endpointDTO = endpointService.get(userInstance.getEndpoint());
+		return provisioningService.post(endpointDTO.getUrl() + ExploratoryAPI.EXPLORATORY_IMAGE,
+				user.getAccessToken(),
+				requestBuilder.newExploratoryImageCreate(user, userInstance, imageName, endpointDTO), String.class);
 	}
 
 	@Override
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/InactivityServiceImpl.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/InactivityServiceImpl.java
index 866808d..1d3230f 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/InactivityServiceImpl.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/InactivityServiceImpl.java
@@ -22,9 +22,9 @@ import com.epam.dlab.auth.UserInfo;
 import com.epam.dlab.backendapi.dao.ComputationalDAO;
 import com.epam.dlab.backendapi.dao.EnvDAO;
 import com.epam.dlab.backendapi.dao.ExploratoryDAO;
+import com.epam.dlab.backendapi.domain.EndpointDTO;
 import com.epam.dlab.backendapi.domain.RequestId;
-import com.epam.dlab.backendapi.service.ComputationalService;
-import com.epam.dlab.backendapi.service.ExploratoryService;
+import com.epam.dlab.backendapi.service.EndpointService;
 import com.epam.dlab.backendapi.service.InactivityService;
 import com.epam.dlab.backendapi.service.SecurityService;
 import com.epam.dlab.backendapi.util.RequestBuilder;
@@ -58,11 +58,9 @@ public class InactivityServiceImpl implements InactivityService {
 	@Inject
 	private RequestId requestId;
 	@Inject
-	private ComputationalService computationalService;
-	@Inject
-	private ExploratoryService exploratoryService;
-	@Inject
 	private SecurityService securityService;
+	@Inject
+	private EndpointService endpointService;
 
 	@Override
 	public void updateRunningResourcesLastActivity() {
@@ -93,19 +91,20 @@ public class InactivityServiceImpl implements InactivityService {
 	}
 
 	private void updateComputationalLastActivity(UserInfo userInfo, UserInstanceDTO ui, UserComputationalResource cr) {
-		final ComputationalCheckInactivityDTO dto =
-				requestBuilder.newComputationalCheckInactivity(userInfo, ui, cr);
+		EndpointDTO endpointDTO = endpointService.get(ui.getEndpoint());
+		final ComputationalCheckInactivityDTO dto = requestBuilder.newComputationalCheckInactivity(userInfo, ui, cr, endpointDTO);
 		final String uuid =
-				provisioningService.post(InfrasctructureAPI.COMPUTATIONAL_CHECK_INACTIVITY,
+				provisioningService.post(endpointDTO.getUrl() + InfrasctructureAPI.COMPUTATIONAL_CHECK_INACTIVITY,
 						userInfo.getAccessToken(), dto, String.class);
 		requestId.put(userInfo.getName(), uuid);
 	}
 
 	private void updateExploratoryLastActivity(UserInfo userInfo, UserInstanceDTO ui) {
+		EndpointDTO endpointDTO = endpointService.get(ui.getEndpoint());
 		final ExploratoryCheckInactivityAction dto =
-				requestBuilder.newExploratoryCheckInactivityAction(userInfo, ui);
+				requestBuilder.newExploratoryCheckInactivityAction(userInfo, ui, endpointDTO);
 		final String uuid =
-				provisioningService.post(InfrasctructureAPI.EXPLORATORY_CHECK_INACTIVITY,
+				provisioningService.post(endpointDTO.getUrl() + InfrasctructureAPI.EXPLORATORY_CHECK_INACTIVITY,
 						userInfo.getAccessToken(), dto, String.class);
 		requestId.put(userInfo.getName(), uuid);
 	}
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/LibraryServiceImpl.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/LibraryServiceImpl.java
index afadbf6..3d65a15 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/LibraryServiceImpl.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/LibraryServiceImpl.java
@@ -23,6 +23,7 @@ import com.epam.dlab.auth.UserInfo;
 import com.epam.dlab.backendapi.dao.BaseDAO;
 import com.epam.dlab.backendapi.dao.ExploratoryDAO;
 import com.epam.dlab.backendapi.dao.ExploratoryLibDAO;
+import com.epam.dlab.backendapi.domain.EndpointDTO;
 import com.epam.dlab.backendapi.domain.RequestId;
 import com.epam.dlab.backendapi.resources.dto.LibInfoRecord;
 import com.epam.dlab.backendapi.resources.dto.LibKey;
@@ -127,10 +128,11 @@ public class LibraryServiceImpl implements LibraryService {
 										   List<LibInstallDTO> libs) {
 
 		final UserInstanceDTO userInstance = exploratoryDAO.fetchExploratoryFields(ui.getName(), expName, compName);
+		EndpointDTO endpointDTO = endpointService.get(userInstance.getEndpoint());
 		final String uuid =
-				provisioningService.post(endpointService.get(userInstance.getEndpoint()).getUrl() + ComputationalAPI.COMPUTATIONAL_LIB_INSTALL,
-						ui.getAccessToken(), toComputationalLibraryInstallDto(ui, expName, compName, libs,
-								userInstance),
+				provisioningService.post(endpointDTO.getUrl() + ComputationalAPI.COMPUTATIONAL_LIB_INSTALL,
+						ui.getAccessToken(),
+						toComputationalLibraryInstallDto(ui, expName, compName, libs, userInstance, endpointDTO),
 						String.class);
 		requestId.put(ui.getName(), uuid);
 		return uuid;
@@ -139,26 +141,28 @@ public class LibraryServiceImpl implements LibraryService {
 	@Override
 	public String installExploratoryLibs(UserInfo ui, String expName, List<LibInstallDTO> libs) {
 		final UserInstanceDTO userInstance = exploratoryDAO.fetchRunningExploratoryFields(ui.getName(), expName);
+		EndpointDTO endpointDTO = endpointService.get(userInstance.getEndpoint());
 		final String uuid =
-				provisioningService.post(endpointService.get(userInstance.getEndpoint()).getUrl() + ExploratoryAPI.EXPLORATORY_LIB_INSTALL, ui.getAccessToken(),
-				toExploratoryLibraryInstallDto(ui, expName, libs, userInstance), String.class);
+				provisioningService.post(endpointDTO.getUrl() + ExploratoryAPI.EXPLORATORY_LIB_INSTALL,
+						ui.getAccessToken(), toExploratoryLibraryInstallDto(ui, expName, libs, userInstance, endpointDTO),
+						String.class);
 		requestId.put(ui.getName(), uuid);
 		return uuid;
 	}
 
 	private LibraryInstallDTO toExploratoryLibraryInstallDto(UserInfo userInfo, String exploratoryName,
-															 List<LibInstallDTO> libs, UserInstanceDTO userInstance) {
+															 List<LibInstallDTO> libs, UserInstanceDTO userInstance, EndpointDTO endpointDTO) {
 		final List<LibInstallDTO> libsToInstall = libs.stream()
 				.map(lib -> toLibInstallDto(lib, libraryDAO.getLibrary(userInfo.getName(), exploratoryName,
 						lib.getGroup(), lib.getName())))
 				.peek(l -> libraryDAO.addLibrary(userInfo.getName(), exploratoryName, l, l.isOverride()))
 				.collect(Collectors.toList());
-		return requestBuilder.newLibInstall(userInfo, userInstance, libsToInstall);
+		return requestBuilder.newLibInstall(userInfo, userInstance, endpointDTO, libsToInstall);
 	}
 
 	private LibraryInstallDTO toComputationalLibraryInstallDto(UserInfo userInfo, String expName, String compName,
 															   List<LibInstallDTO> libs,
-															   UserInstanceDTO userInstance) {
+															   UserInstanceDTO userInstance, EndpointDTO endpointDTO) {
 
 		final UserComputationalResource computationalResource = getComputationalResource(compName, userInstance);
 		final List<LibInstallDTO> libsToInstall = libs.stream()
@@ -167,7 +171,7 @@ public class LibraryServiceImpl implements LibraryService {
 				.peek(l -> libraryDAO.addLibrary(userInfo.getName(), expName, compName, l,
 						l.isOverride()))
 				.collect(Collectors.toList());
-		return requestBuilder.newLibInstall(userInfo, userInstance, computationalResource, libsToInstall);
+		return requestBuilder.newLibInstall(userInfo, userInstance, computationalResource, libsToInstall, endpointDTO);
 	}
 
 	private UserComputationalResource getComputationalResource(String computationalName,
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ProjectServiceImpl.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ProjectServiceImpl.java
index bdafb26..5355dee 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ProjectServiceImpl.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ProjectServiceImpl.java
@@ -6,11 +6,7 @@ import com.epam.dlab.backendapi.annotation.Project;
 import com.epam.dlab.backendapi.dao.ExploratoryDAO;
 import com.epam.dlab.backendapi.dao.ProjectDAO;
 import com.epam.dlab.backendapi.dao.UserGroupDao;
-import com.epam.dlab.backendapi.domain.ProjectDTO;
-import com.epam.dlab.backendapi.domain.ProjectEndpointDTO;
-import com.epam.dlab.backendapi.domain.ProjectManagingDTO;
-import com.epam.dlab.backendapi.domain.RequestId;
-import com.epam.dlab.backendapi.domain.UpdateProjectDTO;
+import com.epam.dlab.backendapi.domain.*;
 import com.epam.dlab.backendapi.service.EndpointService;
 import com.epam.dlab.backendapi.service.ExploratoryService;
 import com.epam.dlab.backendapi.service.ProjectService;
@@ -25,11 +21,7 @@ import com.google.inject.Inject;
 import com.google.inject.name.Named;
 import lombok.extern.slf4j.Slf4j;
 
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Objects;
-import java.util.Set;
+import java.util.*;
 import java.util.function.Supplier;
 import java.util.stream.Collectors;
 
@@ -233,18 +225,17 @@ public class ProjectServiceImpl implements ProjectService {
 	}
 
 	private void createEndpoint(UserInfo user, ProjectDTO projectDTO, String endpointName) {
-		String uuid =
-				provisioningService.post(endpointService.get(endpointName).getUrl() + CREATE_PRJ_API,
-						user.getAccessToken(),
-						requestBuilder.newProjectCreate(user, projectDTO, endpointName), String.class);
+		EndpointDTO endpointDTO = endpointService.get(endpointName);
+		String uuid = provisioningService.post(endpointDTO.getUrl() + CREATE_PRJ_API, user.getAccessToken(),
+						requestBuilder.newProjectCreate(user, projectDTO, endpointDTO), String.class);
 		requestId.put(user.getName(), uuid);
 	}
 
 	private void projectActionOnCloud(UserInfo user, String projectName, String provisioningApiUri, String endpoint) {
 		try {
-			String uuid = provisioningService.post(endpointService.get(endpoint).getUrl() + provisioningApiUri,
-					user.getAccessToken(),
-					requestBuilder.newProjectAction(user, projectName, endpoint), String.class);
+			EndpointDTO endpointDTO = endpointService.get(endpoint);
+			String uuid = provisioningService.post(endpointDTO.getUrl() + provisioningApiUri, user.getAccessToken(),
+					requestBuilder.newProjectAction(user, projectName, endpointDTO), String.class);
 			requestId.put(user.getName(), uuid);
 		} catch (Exception e) {
 			log.error("Can not terminate project due to: {}", e.getMessage());
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ReuploadKeyServiceImpl.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ReuploadKeyServiceImpl.java
index 893ddc7..0efe7f6 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ReuploadKeyServiceImpl.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/ReuploadKeyServiceImpl.java
@@ -87,23 +87,6 @@ public class ReuploadKeyServiceImpl implements ReuploadKeyService {
 		}
 	}
 
-	@Override
-	public void reuploadKeyAction(UserInfo userInfo, ResourceData resourceData) {
-		try {
-			updateResourceStatus(userInfo.getName(), resourceData, REUPLOADING_KEY);
-			ReuploadKeyDTO reuploadKeyDTO = requestBuilder.newKeyReupload(userInfo, UUID.randomUUID().toString(),
-					StringUtils.EMPTY, Collections.singletonList(resourceData));
-			String uuid = provisioningService.post(REUPLOAD_KEY, userInfo.getAccessToken(), reuploadKeyDTO,
-					String.class, Collections.singletonMap("is_primary_reuploading", false));
-			requestId.put(userInfo.getName(), uuid);
-		} catch (Exception t) {
-			log.error("Couldn't reupload key to " + resourceData.toString() + " for user {}", userInfo.getName(), t);
-			updateResourceStatus(userInfo.getName(), resourceData, RUNNING);
-			throw new DlabException("Couldn't reupload key to " + resourceData.toString() + " for user " +
-					userInfo.getName() + ":	" + t.getLocalizedMessage(), t);
-		}
-	}
-
 	private void updateResourceStatus(String user, ResourceData resourceData, UserInstanceStatus newStatus) {
 		if (resourceData.getResourceType() == ResourceType.EXPLORATORY) {
 			exploratoryDAO.updateStatusForExploratory(user, resourceData.getExploratoryName(), newStatus);
@@ -122,12 +105,4 @@ public class ReuploadKeyServiceImpl implements ReuploadKeyService {
 					resourceData.getComputationalName(), reuploadKeyRequired);
 		}
 	}
-
-	private void updateStatusForUserInstances(String user, UserInstanceStatus newStatus) {
-		exploratoryDAO.updateStatusForExploratories(newStatus, user, RUNNING);
-		computationalDAO.updateStatusForComputationalResources(newStatus, user,
-				Arrays.asList(RUNNING, REUPLOADING_KEY), Arrays.asList(DataEngineType.SPARK_STANDALONE,
-						DataEngineType.CLOUD_SERVICE), RUNNING);
-	}
-
 }
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 d4f690e..fd9e45c 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
@@ -22,6 +22,7 @@ package com.epam.dlab.backendapi.util;
 import com.epam.dlab.auth.UserInfo;
 import com.epam.dlab.backendapi.conf.SelfServiceApplicationConfiguration;
 import com.epam.dlab.backendapi.dao.SettingsDAO;
+import com.epam.dlab.backendapi.domain.EndpointDTO;
 import com.epam.dlab.backendapi.domain.ExploratoryLibCache;
 import com.epam.dlab.backendapi.domain.ProjectDTO;
 import com.epam.dlab.backendapi.resources.dto.BackupFormDTO;
@@ -30,41 +31,35 @@ import com.epam.dlab.backendapi.resources.dto.SparkStandaloneClusterCreateForm;
 import com.epam.dlab.backendapi.resources.dto.aws.AwsComputationalCreateForm;
 import com.epam.dlab.backendapi.resources.dto.gcp.GcpComputationalCreateForm;
 import com.epam.dlab.cloud.CloudProvider;
-import com.epam.dlab.dto.*;
+import com.epam.dlab.dto.LibListComputationalDTO;
+import com.epam.dlab.dto.ResourceBaseDTO;
+import com.epam.dlab.dto.ResourceSysBaseDTO;
+import com.epam.dlab.dto.UserInstanceDTO;
 import com.epam.dlab.dto.aws.AwsCloudSettings;
 import com.epam.dlab.dto.aws.computational.AwsComputationalTerminateDTO;
 import com.epam.dlab.dto.aws.computational.ClusterConfig;
 import com.epam.dlab.dto.aws.computational.ComputationalCreateAws;
 import com.epam.dlab.dto.aws.computational.SparkComputationalCreateAws;
-import com.epam.dlab.dto.aws.edge.EdgeCreateAws;
 import com.epam.dlab.dto.aws.exploratory.ExploratoryCreateAws;
-import com.epam.dlab.dto.aws.keyload.UploadFileAws;
 import com.epam.dlab.dto.azure.AzureCloudSettings;
 import com.epam.dlab.dto.azure.computational.SparkComputationalCreateAzure;
-import com.epam.dlab.dto.azure.edge.EdgeCreateAzure;
 import com.epam.dlab.dto.azure.exploratory.ExploratoryActionStartAzure;
 import com.epam.dlab.dto.azure.exploratory.ExploratoryActionStopAzure;
 import com.epam.dlab.dto.azure.exploratory.ExploratoryCreateAzure;
-import com.epam.dlab.dto.azure.keyload.UploadFileAzure;
 import com.epam.dlab.dto.backup.EnvBackupDTO;
 import com.epam.dlab.dto.base.CloudSettings;
 import com.epam.dlab.dto.base.DataEngineType;
 import com.epam.dlab.dto.base.computational.ComputationalBase;
-import com.epam.dlab.dto.base.keyload.UploadFile;
 import com.epam.dlab.dto.computational.*;
 import com.epam.dlab.dto.exploratory.*;
 import com.epam.dlab.dto.gcp.GcpCloudSettings;
 import com.epam.dlab.dto.gcp.computational.ComputationalCreateGcp;
 import com.epam.dlab.dto.gcp.computational.GcpComputationalTerminateDTO;
 import com.epam.dlab.dto.gcp.computational.SparkComputationalCreateGcp;
-import com.epam.dlab.dto.gcp.edge.EdgeCreateGcp;
 import com.epam.dlab.dto.gcp.exploratory.ExploratoryCreateGcp;
-import com.epam.dlab.dto.gcp.keyload.UploadFileGcp;
 import com.epam.dlab.dto.project.ProjectActionDTO;
 import com.epam.dlab.dto.project.ProjectCreateDTO;
-import com.epam.dlab.dto.reuploadkey.ReuploadKeyDTO;
 import com.epam.dlab.exceptions.DlabException;
-import com.epam.dlab.model.ResourceData;
 import com.epam.dlab.model.exploratory.Exploratory;
 import com.epam.dlab.util.UsernameUtils;
 import com.google.inject.Inject;
@@ -86,8 +81,8 @@ public class RequestBuilder {
 	@Inject
 	private SettingsDAO settingsDAO;
 
-	private CloudSettings cloudSettings(UserInfo userInfo) {
-		switch (cloudProvider()) {
+	private CloudSettings cloudSettings(UserInfo userInfo, CloudProvider cloudProvider) {
+		switch (cloudProvider) {
 			case AWS:
 				return AwsCloudSettings.builder()
 						.awsIamUser(userInfo.getName())
@@ -99,32 +94,33 @@ public class RequestBuilder {
 				return GcpCloudSettings.builder()
 						.gcpIamUser(userInfo.getName()).build();
 			default:
-				throw new IllegalArgumentException(UNSUPPORTED_CLOUD_PROVIDER_MESSAGE + cloudProvider());
+				throw new IllegalArgumentException(UNSUPPORTED_CLOUD_PROVIDER_MESSAGE + cloudProvider);
 		}
 	}
 
 	@SuppressWarnings("unchecked")
-	private <T extends ResourceBaseDTO<?>> T newResourceBaseDTO(UserInfo userInfo, Class<T> resourceClass) {
+	private <T extends ResourceBaseDTO<?>> T newResourceBaseDTO(UserInfo userInfo, CloudProvider cloudProvider,
+																Class<T> resourceClass) {
 		try {
 			return (T) resourceClass.newInstance()
-					.withEdgeUserName(getEdgeUserName(userInfo))
-					.withCloudSettings(cloudSettings(userInfo));
+					.withEdgeUserName(getEdgeUserName(userInfo, cloudProvider))
+					.withCloudSettings(cloudSettings(userInfo, cloudProvider));
 		} catch (Exception e) {
 			throw new DlabException("Cannot create instance of resource class " + resourceClass.getName() + ". " +
 					e.getLocalizedMessage(), e);
 		}
 	}
 
-	private String getEdgeUserName(UserInfo userInfo) {
+	private String getEdgeUserName(UserInfo userInfo, CloudProvider cloudProvider) {
 		String edgeUser = UsernameUtils.replaceWhitespaces(userInfo.getSimpleName());
-		switch (cloudProvider()) {
+		switch (cloudProvider) {
 			case GCP:
 				return adjustUserName(configuration.getMaxUserNameLength(), edgeUser);
 			case AWS:
 			case AZURE:
 				return edgeUser;
 			default:
-				throw new DlabException(UNSUPPORTED_CLOUD_PROVIDER_MESSAGE + cloudProvider());
+				throw new DlabException(UNSUPPORTED_CLOUD_PROVIDER_MESSAGE + cloudProvider);
 		}
 	}
 
@@ -134,72 +130,26 @@ public class RequestBuilder {
 	}
 
 	@SuppressWarnings("unchecked")
-	private <T extends ResourceSysBaseDTO<?>> T newResourceSysBaseDTO(UserInfo userInfo, Class<T> resourceClass) {
-		return newResourceBaseDTO(userInfo, resourceClass);
+	private <T extends ResourceSysBaseDTO<?>> T newResourceSysBaseDTO(UserInfo userInfo, CloudProvider cloudProvider,
+																	  Class<T> resourceClass) {
+		return newResourceBaseDTO(userInfo, cloudProvider, resourceClass);
 	}
 
 	@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(ProjectDTO projectDTO, Exploratory exploratory,
+	public <T extends ExploratoryCreateDTO<T>> T newExploratoryCreate(ProjectDTO projectDTO, EndpointDTO endpointDTO, Exploratory exploratory,
 																	  UserInfo userInfo,
 																	  ExploratoryGitCredsDTO exploratoryGitCredsDTO,
 																	  Map<String, String> tags) {
 
 		T exploratoryCreate;
-
-		switch (cloudProvider()) {
+		CloudProvider cloudProvider = endpointDTO.getCloudProvider();
+		switch (cloudProvider) {
 			case AWS:
-				exploratoryCreate = (T) newResourceSysBaseDTO(userInfo, ExploratoryCreateAws.class)
+				exploratoryCreate = (T) newResourceSysBaseDTO(userInfo, cloudProvider, ExploratoryCreateAws.class)
 						.withNotebookInstanceType(exploratory.getShape());
 				break;
 			case AZURE:
-				exploratoryCreate = (T) newResourceSysBaseDTO(userInfo, ExploratoryCreateAzure.class)
+				exploratoryCreate = (T) newResourceSysBaseDTO(userInfo, cloudProvider, ExploratoryCreateAzure.class)
 						.withNotebookInstanceSize(exploratory.getShape());
 				if (settingsDAO.isAzureDataLakeEnabled()) {
 					((ExploratoryCreateAzure) exploratoryCreate)
@@ -210,11 +160,11 @@ public class RequestBuilder {
 						.withAzureDataLakeEnabled(Boolean.toString(settingsDAO.isAzureDataLakeEnabled()));
 				break;
 			case GCP:
-				exploratoryCreate = (T) newResourceSysBaseDTO(userInfo, ExploratoryCreateGcp.class)
+				exploratoryCreate = (T) newResourceSysBaseDTO(userInfo, cloudProvider, ExploratoryCreateGcp.class)
 						.withNotebookInstanceType(exploratory.getShape());
 				break;
 			default:
-				throw new IllegalArgumentException(UNSUPPORTED_CLOUD_PROVIDER_MESSAGE + cloudProvider());
+				throw new IllegalArgumentException(UNSUPPORTED_CLOUD_PROVIDER_MESSAGE + cloudProvider);
 		}
 
 		return exploratoryCreate.withExploratoryName(exploratory.getName())
@@ -232,13 +182,14 @@ public class RequestBuilder {
 	@SuppressWarnings("unchecked")
 	public <T extends ExploratoryGitCredsUpdateDTO> T newExploratoryStart(UserInfo userInfo,
 																		  UserInstanceDTO userInstance,
+																		  EndpointDTO endpointDTO,
 																		  ExploratoryGitCredsDTO
 																				  exploratoryGitCredsDTO) {
-
-		switch (cloudProvider()) {
+		CloudProvider cloudProvider = endpointDTO.getCloudProvider();
+		switch (cloudProvider) {
 			case AWS:
 			case GCP:
-				return (T) newResourceSysBaseDTO(userInfo, ExploratoryGitCredsUpdateDTO.class)
+				return (T) newResourceSysBaseDTO(userInfo, cloudProvider, ExploratoryGitCredsUpdateDTO.class)
 						.withNotebookInstanceName(userInstance.getExploratoryId())
 						.withGitCreds(exploratoryGitCredsDTO.getGitCreds())
 						.withNotebookImage(userInstance.getImageName())
@@ -247,7 +198,7 @@ public class RequestBuilder {
 						.withProject(userInstance.getProject())
 						.withEndpoint(userInstance.getEndpoint());
 			case AZURE:
-				T exploratoryStart = (T) newResourceSysBaseDTO(userInfo, ExploratoryActionStartAzure.class)
+				T exploratoryStart = (T) newResourceSysBaseDTO(userInfo, cloudProvider, ExploratoryActionStartAzure.class)
 						.withNotebookInstanceName(userInstance.getExploratoryId())
 						.withGitCreds(exploratoryGitCredsDTO.getGitCreds())
 						.withNotebookImage(userInstance.getImageName())
@@ -266,25 +217,26 @@ public class RequestBuilder {
 
 				return exploratoryStart;
 			default:
-				throw new IllegalArgumentException(UNSUPPORTED_CLOUD_PROVIDER_MESSAGE + cloudProvider());
+				throw new IllegalArgumentException(UNSUPPORTED_CLOUD_PROVIDER_MESSAGE + cloudProvider);
 		}
 	}
 
 	@SuppressWarnings("unchecked")
-	public <T extends ExploratoryActionDTO<T>> T newExploratoryStop(UserInfo userInfo, UserInstanceDTO userInstance) {
+	public <T extends ExploratoryActionDTO<T>> T newExploratoryStop(UserInfo userInfo, UserInstanceDTO userInstance, EndpointDTO endpointDTO) {
 
 		T exploratoryStop;
+		CloudProvider cloudProvider = endpointDTO.getCloudProvider();
 
-		switch (cloudProvider()) {
+		switch (cloudProvider) {
 			case AWS:
 			case GCP:
-				exploratoryStop = (T) newResourceSysBaseDTO(userInfo, ExploratoryActionDTO.class);
+				exploratoryStop = (T) newResourceSysBaseDTO(userInfo, cloudProvider, ExploratoryActionDTO.class);
 				break;
 			case AZURE:
-				exploratoryStop = (T) newResourceSysBaseDTO(userInfo, ExploratoryActionStopAzure.class);
+				exploratoryStop = (T) newResourceSysBaseDTO(userInfo, cloudProvider, ExploratoryActionStopAzure.class);
 				break;
 			default:
-				throw new IllegalArgumentException(UNSUPPORTED_CLOUD_PROVIDER_MESSAGE + cloudProvider());
+				throw new IllegalArgumentException(UNSUPPORTED_CLOUD_PROVIDER_MESSAGE + cloudProvider);
 		}
 
 		return exploratoryStop
@@ -298,9 +250,10 @@ public class RequestBuilder {
 	}
 
 	public ExploratoryGitCredsUpdateDTO newGitCredentialsUpdate(UserInfo userInfo, UserInstanceDTO instanceDTO,
+																EndpointDTO endpointDTO,
 																ExploratoryGitCredsDTO exploratoryGitCredsDTO) {
-		checkInappropriateCloudProviderOrElseThrowException();
-		return newResourceSysBaseDTO(userInfo, ExploratoryGitCredsUpdateDTO.class)
+		checkInappropriateCloudProviderOrElseThrowException(endpointDTO.getCloudProvider());
+		return newResourceSysBaseDTO(userInfo, endpointDTO.getCloudProvider(), ExploratoryGitCredsUpdateDTO.class)
 				.withNotebookImage(instanceDTO.getImageName())
 				.withApplicationName(getApplicationNameFromImage(instanceDTO.getImageName()))
 				.withProject(instanceDTO.getProject())
@@ -311,9 +264,9 @@ public class RequestBuilder {
 	}
 
 	public LibraryInstallDTO newLibInstall(UserInfo userInfo, UserInstanceDTO userInstance,
-										   List<LibInstallDTO> libs) {
-		checkInappropriateCloudProviderOrElseThrowException();
-		return newResourceSysBaseDTO(userInfo, LibraryInstallDTO.class)
+										   EndpointDTO endpointDTO, List<LibInstallDTO> libs) {
+		checkInappropriateCloudProviderOrElseThrowException(endpointDTO.getCloudProvider());
+		return newResourceSysBaseDTO(userInfo, endpointDTO.getCloudProvider(), LibraryInstallDTO.class)
 				.withNotebookImage(userInstance.getImageName())
 				.withApplicationName(getApplicationNameFromImage(userInstance.getImageName()))
 				.withNotebookInstanceName(userInstance.getExploratoryId())
@@ -324,9 +277,10 @@ public class RequestBuilder {
 
 	@SuppressWarnings("unchecked")
 	public <T extends ExploratoryActionDTO<T>> T newLibExploratoryList(UserInfo userInfo,
-																	   UserInstanceDTO userInstance) {
-		checkInappropriateCloudProviderOrElseThrowException();
-		return (T) newResourceSysBaseDTO(userInfo, ExploratoryActionDTO.class)
+																	   UserInstanceDTO userInstance,
+																	   EndpointDTO endpointDTO) {
+		checkInappropriateCloudProviderOrElseThrowException(endpointDTO.getCloudProvider());
+		return (T) newResourceSysBaseDTO(userInfo, endpointDTO.getCloudProvider(), ExploratoryActionDTO.class)
 				.withNotebookInstanceName(userInstance.getExploratoryId())
 				.withProject(userInstance.getProject())
 				.withNotebookImage(userInstance.getImageName())
@@ -337,9 +291,9 @@ public class RequestBuilder {
 	@SuppressWarnings("unchecked")
 	public <T extends LibraryInstallDTO> T newLibInstall(UserInfo userInfo, UserInstanceDTO userInstance,
 														 UserComputationalResource computationalResource,
-														 List<LibInstallDTO> libs) {
-		checkInappropriateCloudProviderOrElseThrowException();
-		return (T) newResourceSysBaseDTO(userInfo, LibraryInstallDTO.class)
+														 List<LibInstallDTO> libs, EndpointDTO endpointDTO) {
+		checkInappropriateCloudProviderOrElseThrowException(endpointDTO.getCloudProvider());
+		return (T) newResourceSysBaseDTO(userInfo, endpointDTO.getCloudProvider(), LibraryInstallDTO.class)
 				.withComputationalId(computationalResource.getComputationalId())
 				.withComputationalName(computationalResource.getComputationalName())
 				.withExploratoryName(userInstance.getExploratoryName())
@@ -353,10 +307,11 @@ public class RequestBuilder {
 	public <T extends LibListComputationalDTO> T newLibComputationalList(UserInfo userInfo,
 																		 UserInstanceDTO userInstance,
 																		 UserComputationalResource
-																				 computationalResource) {
+																				 computationalResource,
+																		 EndpointDTO endpointDTO) {
 
-		checkInappropriateCloudProviderOrElseThrowException();
-		return (T) newResourceSysBaseDTO(userInfo, LibListComputationalDTO.class)
+		checkInappropriateCloudProviderOrElseThrowException(endpointDTO.getCloudProvider());
+		return (T) newResourceSysBaseDTO(userInfo, endpointDTO.getCloudProvider(), LibListComputationalDTO.class)
 				.withComputationalId(computationalResource.getComputationalId())
 				.withProject(userInstance.getProject())
 				.withComputationalImage(computationalResource.getImageName())
@@ -367,15 +322,16 @@ public class RequestBuilder {
 	@SuppressWarnings("unchecked")
 	public <T extends ComputationalBase<T>> T newComputationalCreate(UserInfo userInfo, ProjectDTO projectDTO,
 																	 UserInstanceDTO userInstance,
-																	 ComputationalCreateFormDTO form) {
+																	 ComputationalCreateFormDTO form,
+																	 EndpointDTO endpointDTO) {
 		T computationalCreate;
-
-		switch (cloudProvider()) {
+		CloudProvider cloudProvider = endpointDTO.getCloudProvider();
+		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)
+				computationalCreate = (T) newResourceSysBaseDTO(userInfo, cloudProvider, ComputationalCreateAws.class)
 						.withInstanceCount(awsForm.getInstanceCount())
 						.withMasterInstanceType(awsForm.getMasterInstanceType())
 						.withSlaveInstanceType(awsForm.getSlaveInstanceType())
@@ -387,7 +343,7 @@ public class RequestBuilder {
 				break;
 			case GCP:
 				GcpComputationalCreateForm gcpForm = (GcpComputationalCreateForm) form;
-				computationalCreate = (T) newResourceSysBaseDTO(userInfo, ComputationalCreateGcp.class)
+				computationalCreate = (T) newResourceSysBaseDTO(userInfo, cloudProvider, ComputationalCreateGcp.class)
 						.withMasterInstanceCount(gcpForm.getMasterInstanceCount())
 						.withSlaveInstanceCount(gcpForm.getSlaveInstanceCount())
 						.withPreemptibleCount(gcpForm.getPreemptibleCount())
@@ -398,7 +354,7 @@ public class RequestBuilder {
 				break;
 
 			default:
-				throw new IllegalArgumentException(UNSUPPORTED_CLOUD_PROVIDER_MESSAGE + cloudProvider());
+				throw new IllegalArgumentException(UNSUPPORTED_CLOUD_PROVIDER_MESSAGE + cloudProvider);
 		}
 
 		return computationalCreate
@@ -415,13 +371,14 @@ public class RequestBuilder {
 	@SuppressWarnings("unchecked")
 	public <T extends ComputationalBase<T>> T newComputationalCreate(UserInfo userInfo, ProjectDTO projectDTO,
 																	 UserInstanceDTO userInstance,
-																	 SparkStandaloneClusterCreateForm form) {
+																	 SparkStandaloneClusterCreateForm form,
+																	 EndpointDTO endpointDTO) {
 
 		T computationalCreate;
-
-		switch (cloudProvider()) {
+		CloudProvider cloudProvider = endpointDTO.getCloudProvider();
+		switch (cloudProvider) {
 			case AWS:
-				computationalCreate = (T) newResourceSysBaseDTO(userInfo, SparkComputationalCreateAws.class)
+				computationalCreate = (T) newResourceSysBaseDTO(userInfo, cloudProvider, SparkComputationalCreateAws.class)
 						.withDataEngineInstanceCount(form.getDataEngineInstanceCount())
 						.withDataEngineMasterShape(form.getDataEngineInstanceShape())
 						.withDataEngineSlaveShape(form.getDataEngineInstanceShape())
@@ -429,7 +386,7 @@ public class RequestBuilder {
 						.withSharedImageEnabled(String.valueOf(projectDTO.isSharedImageEnabled()));
 				break;
 			case AZURE:
-				computationalCreate = (T) newResourceSysBaseDTO(userInfo, SparkComputationalCreateAzure.class)
+				computationalCreate = (T) newResourceSysBaseDTO(userInfo, cloudProvider, SparkComputationalCreateAzure.class)
 						.withDataEngineInstanceCount(form.getDataEngineInstanceCount())
 						.withDataEngineMasterSize(form.getDataEngineInstanceShape())
 						.withDataEngineSlaveSize(form.getDataEngineInstanceShape())
@@ -445,7 +402,7 @@ public class RequestBuilder {
 
 				break;
 			case GCP:
-				computationalCreate = (T) newResourceSysBaseDTO(userInfo, SparkComputationalCreateGcp.class)
+				computationalCreate = (T) newResourceSysBaseDTO(userInfo, cloudProvider, SparkComputationalCreateGcp.class)
 						.withDataEngineInstanceCount(form.getDataEngineInstanceCount())
 						.withDataEngineMasterSize(form.getDataEngineInstanceShape())
 						.withDataEngineSlaveSize(form.getDataEngineInstanceShape())
@@ -453,7 +410,7 @@ public class RequestBuilder {
 						.withSharedImageEnabled(String.valueOf(projectDTO.isSharedImageEnabled()));
 				break;
 			default:
-				throw new IllegalArgumentException(UNSUPPORTED_CLOUD_PROVIDER_MESSAGE + cloudProvider());
+				throw new IllegalArgumentException(UNSUPPORTED_CLOUD_PROVIDER_MESSAGE + cloudProvider);
 		}
 
 		return computationalCreate
@@ -470,12 +427,13 @@ public class RequestBuilder {
 	@SuppressWarnings("unchecked")
 	public <T extends ComputationalBase<T>> T newComputationalTerminate(UserInfo userInfo,
 																		UserInstanceDTO userInstanceDTO,
-																		UserComputationalResource computationalResource) {
+																		UserComputationalResource computationalResource,
+																		EndpointDTO endpointDTO) {
 		T computationalTerminate;
-
-		switch (cloudProvider()) {
+		CloudProvider cloudProvider = endpointDTO.getCloudProvider();
+		switch (cloudProvider) {
 			case AWS:
-				AwsComputationalTerminateDTO terminateDTO = newResourceSysBaseDTO(userInfo,
+				AwsComputationalTerminateDTO terminateDTO = newResourceSysBaseDTO(userInfo, cloudProvider,
 						AwsComputationalTerminateDTO.class);
 				if (computationalResource.getDataEngineType() == DataEngineType.CLOUD_SERVICE) {
 					terminateDTO.setClusterName(computationalResource.getComputationalId());
@@ -483,10 +441,10 @@ public class RequestBuilder {
 				computationalTerminate = (T) terminateDTO;
 				break;
 			case AZURE:
-				computationalTerminate = (T) newResourceSysBaseDTO(userInfo, ComputationalTerminateDTO.class);
+				computationalTerminate = (T) newResourceSysBaseDTO(userInfo, cloudProvider, ComputationalTerminateDTO.class);
 				break;
 			case GCP:
-				GcpComputationalTerminateDTO gcpTerminateDTO = newResourceSysBaseDTO(userInfo,
+				GcpComputationalTerminateDTO gcpTerminateDTO = newResourceSysBaseDTO(userInfo, cloudProvider,
 						GcpComputationalTerminateDTO.class);
 				if (computationalResource.getDataEngineType() == DataEngineType.CLOUD_SERVICE) {
 					gcpTerminateDTO.setClusterName(computationalResource.getComputationalId());
@@ -495,7 +453,7 @@ public class RequestBuilder {
 				break;
 
 			default:
-				throw new IllegalArgumentException(UNSUPPORTED_CLOUD_PROVIDER_MESSAGE + cloudProvider());
+				throw new IllegalArgumentException(UNSUPPORTED_CLOUD_PROVIDER_MESSAGE + cloudProvider);
 		}
 
 		return computationalTerminate
@@ -507,10 +465,9 @@ public class RequestBuilder {
 	}
 
 	@SuppressWarnings("unchecked")
-	public <T extends ComputationalBase<T>> T newComputationalStop(UserInfo userInfo,
-																   UserInstanceDTO exploratory,
-																   String computationalName) {
-		return (T) newResourceSysBaseDTO(userInfo, ComputationalStopDTO.class)
+	public <T extends ComputationalBase<T>> T newComputationalStop(UserInfo userInfo, UserInstanceDTO exploratory,
+																   String computationalName, EndpointDTO endpointDTO) {
+		return (T) newResourceSysBaseDTO(userInfo, endpointDTO.getCloudProvider(), ComputationalStopDTO.class)
 				.withExploratoryName(exploratory.getExploratoryName())
 				.withComputationalName(computationalName)
 				.withNotebookInstanceName(exploratory.getExploratoryId())
@@ -520,8 +477,8 @@ public class RequestBuilder {
 
 	@SuppressWarnings("unchecked")
 	public <T extends ComputationalBase<T>> T newComputationalStart(UserInfo userInfo, UserInstanceDTO exploratory,
-																	String computationalName) {
-		return (T) newResourceSysBaseDTO(userInfo, ComputationalStartDTO.class)
+																	String computationalName, EndpointDTO endpointDTO) {
+		return (T) newResourceSysBaseDTO(userInfo, endpointDTO.getCloudProvider(), ComputationalStartDTO.class)
 				.withExploratoryName(exploratory.getExploratoryName())
 				.withComputationalName(computationalName)
 				.withNotebookInstanceName(exploratory.getExploratoryId())
@@ -531,9 +488,9 @@ public class RequestBuilder {
 
 	@SuppressWarnings("unchecked")
 	public <T extends ExploratoryImageDTO> T newExploratoryImageCreate(UserInfo userInfo, UserInstanceDTO userInstance,
-																	   String imageName) {
-		checkInappropriateCloudProviderOrElseThrowException();
-		return (T) newResourceSysBaseDTO(userInfo, ExploratoryImageDTO.class)
+																	   String imageName, EndpointDTO endpointDTO) {
+		checkInappropriateCloudProviderOrElseThrowException(endpointDTO.getCloudProvider());
+		return (T) newResourceSysBaseDTO(userInfo, endpointDTO.getCloudProvider(), ExploratoryImageDTO.class)
 				.withProject(userInstance.getProject())
 				.withNotebookInstanceName(userInstance.getExploratoryId())
 				.withExploratoryName(userInstance.getExploratoryName())
@@ -547,8 +504,8 @@ public class RequestBuilder {
 	@SuppressWarnings("unchecked")
 	public <T extends ComputationalBase<T>> T newComputationalCheckInactivity(UserInfo userInfo,
 																			  UserInstanceDTO exploratory,
-																			  UserComputationalResource cr) {
-		return (T) newResourceSysBaseDTO(userInfo, ComputationalCheckInactivityDTO.class)
+																			  UserComputationalResource cr, EndpointDTO endpointDTO) {
+		return (T) newResourceSysBaseDTO(userInfo, endpointDTO.getCloudProvider(), ComputationalCheckInactivityDTO.class)
 				.withExploratoryName(exploratory.getExploratoryName())
 				.withComputationalName(cr.getComputationalName())
 				.withNotebookInstanceName(exploratory.getExploratoryId())
@@ -576,8 +533,9 @@ public class RequestBuilder {
 
 	public ComputationalClusterConfigDTO newClusterConfigUpdate(UserInfo userInfo, UserInstanceDTO userInstanceDTO,
 																UserComputationalResource compRes,
-																List<ClusterConfig> config) {
-		final ComputationalClusterConfigDTO clusterConfigDTO = newResourceSysBaseDTO(userInfo,
+																List<ClusterConfig> config, EndpointDTO endpointDTO) {
+		CloudProvider cloudProvider = endpointDTO.getCloudProvider();
+		final ComputationalClusterConfigDTO clusterConfigDTO = newResourceSysBaseDTO(userInfo, cloudProvider,
 				ComputationalClusterConfigDTO.class)
 				.withExploratoryName(userInstanceDTO.getExploratoryName())
 				.withNotebookInstanceName(userInstanceDTO.getExploratoryId())
@@ -587,7 +545,7 @@ public class RequestBuilder {
 				.withEndpoint(userInstanceDTO.getEndpoint());
 		clusterConfigDTO.setCopmutationalId(compRes.getComputationalId());
 		clusterConfigDTO.setConfig(config);
-		if (cloudProvider() == AZURE && settingsDAO.isAzureDataLakeEnabled()) {
+		if (cloudProvider == AZURE && settingsDAO.isAzureDataLakeEnabled()) {
 			clusterConfigDTO.setAzureUserRefreshToken(userInfo.getKeys().get(AZURE_REFRESH_TOKEN_KEY));
 		}
 
@@ -596,10 +554,12 @@ public class RequestBuilder {
 
 	public ExploratoryReconfigureSparkClusterActionDTO newClusterConfigUpdate(UserInfo userInfo,
 																			  UserInstanceDTO userInstance,
-																			  List<ClusterConfig> config) {
+																			  List<ClusterConfig> config,
+																			  EndpointDTO endpointDTO) {
 
+		CloudProvider cloudProvider = endpointDTO.getCloudProvider();
 		final ExploratoryReconfigureSparkClusterActionDTO dto =
-				newResourceSysBaseDTO(userInfo, ExploratoryReconfigureSparkClusterActionDTO.class)
+				newResourceSysBaseDTO(userInfo, cloudProvider, ExploratoryReconfigureSparkClusterActionDTO.class)
 						.withNotebookInstanceName(userInstance.getExploratoryId())
 						.withExploratoryName(userInstance.getExploratoryName())
 						.withApplicationName(getApplicationNameFromImage(userInstance.getImageName()))
@@ -607,7 +567,7 @@ public class RequestBuilder {
 						.withConfig(config)
 						.withProject(userInstance.getProject())
 						.withEndpoint(userInstance.getEndpoint());
-		if (cloudProvider() == AZURE && settingsDAO.isAzureDataLakeEnabled()) {
+		if (cloudProvider == AZURE && settingsDAO.isAzureDataLakeEnabled()) {
 			dto.withAzureUserRefreshToken(userInfo.getKeys().get(AZURE_REFRESH_TOKEN_KEY));
 		}
 
@@ -615,8 +575,9 @@ public class RequestBuilder {
 	}
 
 	public ExploratoryCheckInactivityAction newExploratoryCheckInactivityAction(UserInfo userInfo,
-																				UserInstanceDTO userInstance) {
-		final ExploratoryCheckInactivityAction dto = newResourceSysBaseDTO(userInfo,
+																				UserInstanceDTO userInstance,
+																				EndpointDTO endpointDTO) {
+		final ExploratoryCheckInactivityAction dto = newResourceSysBaseDTO(userInfo, endpointDTO.getCloudProvider(),
 				ExploratoryCheckInactivityAction.class);
 		dto.withNotebookInstanceName(userInstance.getExploratoryId())
 				.withNotebookImage(userInstance.getImageName())
@@ -626,23 +587,19 @@ public class RequestBuilder {
 		return dto;
 	}
 
-	public ProjectCreateDTO newProjectCreate(UserInfo userInfo, ProjectDTO projectDTO, String endpoint) {
+	public ProjectCreateDTO newProjectCreate(UserInfo userInfo, ProjectDTO projectDTO, EndpointDTO endpointDTO) {
 		return ProjectCreateDTO.builder()
 				.key(projectDTO.getKey().replace("\n", ""))
 				.name(projectDTO.getName())
 				.tag(projectDTO.getTag())
-				.endpoint(endpoint)
+				.endpoint(endpointDTO.getName())
 				.build()
-				.withCloudSettings(cloudSettings(userInfo));
-	}
-
-	public ProjectActionDTO newProjectAction(UserInfo userInfo, String project, String endpoint) {
-		return new ProjectActionDTO(project, endpoint)
-				.withCloudSettings(cloudSettings(userInfo));
+				.withCloudSettings(cloudSettings(userInfo, endpointDTO.getCloudProvider()));
 	}
 
-	private CloudProvider cloudProvider() {
-		return configuration.getCloudProvider();
+	public ProjectActionDTO newProjectAction(UserInfo userInfo, String project, EndpointDTO endpointDTO) {
+		return new ProjectActionDTO(project, endpointDTO.getName())
+				.withCloudSettings(cloudSettings(userInfo, endpointDTO.getCloudProvider()));
 	}
 
 	/**
@@ -661,8 +618,7 @@ public class RequestBuilder {
 		return "";
 	}
 
-	private void checkInappropriateCloudProviderOrElseThrowException() {
-		CloudProvider provider = cloudProvider();
+	private void checkInappropriateCloudProviderOrElseThrowException(CloudProvider provider) {
 		if (provider != AWS && provider != AZURE && provider != GCP) {
 			throw new IllegalArgumentException(UNSUPPORTED_CLOUD_PROVIDER_MESSAGE + provider);
 		}
diff --git a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/ComputationalServiceImplTest.java b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/ComputationalServiceImplTest.java
index 1ad40da..8331235 100644
--- a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/ComputationalServiceImplTest.java
+++ b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/ComputationalServiceImplTest.java
@@ -141,7 +141,8 @@ public class ComputationalServiceImplTest {
 
 		ComputationalBase compBaseMocked = mock(ComputationalBase.class);
 		when(requestBuilder.newComputationalCreate(any(UserInfo.class), any(ProjectDTO.class),
-				any(UserInstanceDTO.class), any(SparkStandaloneClusterCreateForm.class))).thenReturn(compBaseMocked);
+				any(UserInstanceDTO.class), any(SparkStandaloneClusterCreateForm.class), any(EndpointDTO.class)))
+				.thenReturn(compBaseMocked);
 		when(provisioningService.post(anyString(), anyString(), any(ComputationalBase.class), any())).thenReturn(UUID);
 		when(requestId.put(anyString(), anyString())).thenReturn(UUID);
 
@@ -156,7 +157,7 @@ public class ComputationalServiceImplTest {
 
 		verify(exploratoryDAO).fetchExploratoryFields(USER, EXPLORATORY_NAME);
 		verify(requestBuilder).newComputationalCreate(
-				refEq(userInfo), refEq(projectDTO), refEq(userInstance), refEq(sparkClusterCreateForm));
+				refEq(userInfo), refEq(projectDTO), refEq(userInstance), refEq(sparkClusterCreateForm), refEq(endpointDTO()));
 
 		verify(provisioningService)
 				.post(endpointDTO().getUrl() + ComputationalAPI.COMPUTATIONAL_CREATE_SPARK, TOKEN, compBaseMocked,
@@ -208,6 +209,7 @@ public class ComputationalServiceImplTest {
 	@Test
 	public void createSparkClusterWhenMethodNewComputationalCreateThrowsException() {
 		ProjectDTO projectDTO = getProjectDTO();
+		when(endpointService.get(anyString())).thenReturn(endpointDTO());
 		when(projectService.get(anyString())).thenReturn(projectDTO);
 		when(computationalDAO.addComputational(anyString(), anyString(),
 				any(SparkStandaloneClusterResource.class))).thenReturn(true);
@@ -215,7 +217,7 @@ public class ComputationalServiceImplTest {
 
 		doThrow(new DlabException("Cannot create instance of resource class "))
 				.when(requestBuilder).newComputationalCreate(any(UserInfo.class), any(ProjectDTO.class),
-				any(UserInstanceDTO.class), any(SparkStandaloneClusterCreateForm.class));
+				any(UserInstanceDTO.class), any(SparkStandaloneClusterCreateForm.class), any(EndpointDTO.class));
 
 		when(computationalDAO.updateComputationalStatus(any(ComputationalStatusDTO.class)))
 				.thenReturn(mock(UpdateResult.class));
@@ -230,7 +232,7 @@ public class ComputationalServiceImplTest {
 		verify(computationalDAO).addComputational(USER, EXPLORATORY_NAME, sparkClusterResource);
 		verify(computationalDAO).updateComputationalStatus(refEq(computationalStatusDTOWithStatusFailed, "self"));
 		verify(exploratoryDAO).fetchExploratoryFields(USER, EXPLORATORY_NAME);
-		verify(requestBuilder).newComputationalCreate(userInfo, projectDTO, userInstance, sparkClusterCreateForm);
+		verify(requestBuilder).newComputationalCreate(userInfo, projectDTO, userInstance, sparkClusterCreateForm, endpointDTO());
 		verifyNoMoreInteractions(projectService, configuration, computationalDAO, exploratoryDAO, requestBuilder);
 	}
 
@@ -253,7 +255,7 @@ public class ComputationalServiceImplTest {
 		ctDto.setComputationalName(COMP_NAME);
 		ctDto.setExploratoryName(EXPLORATORY_NAME);
 		when(requestBuilder.newComputationalTerminate(any(UserInfo.class), any(UserInstanceDTO.class),
-				any(UserComputationalResource.class))).thenReturn(ctDto);
+				any(UserComputationalResource.class), any(EndpointDTO.class))).thenReturn(ctDto);
 
 		when(provisioningService.post(anyString(), anyString(), any(ComputationalTerminateDTO.class), any()))
 				.thenReturn(UUID);
@@ -264,7 +266,7 @@ public class ComputationalServiceImplTest {
 		verify(computationalDAO).updateComputationalStatus(refEq(computationalStatusDTOWithStatusTerminating, "self"));
 		verify(computationalDAO).fetchComputationalFields(USER, EXPLORATORY_NAME, COMP_NAME);
 
-		verify(requestBuilder).newComputationalTerminate(userInfo, userInstance,ucResource);
+		verify(requestBuilder).newComputationalTerminate(userInfo, userInstance, ucResource, endpointDTO());
 
 		verify(provisioningService).post(endpointDTO().getUrl() + ComputationalAPI.COMPUTATIONAL_TERMINATE_CLOUD_SPECIFIC, TOKEN, ctDto,
 				String.class);
@@ -321,9 +323,9 @@ public class ComputationalServiceImplTest {
 
 	@Test
 	public void terminateComputationalEnvironmentWhenMethodNewComputationalTerminateThrowsException() {
+		when(endpointService.get(anyString())).thenReturn(endpointDTO());
 		when(computationalDAO.updateComputationalStatus(any(ComputationalStatusDTO.class)))
 				.thenReturn(mock(UpdateResult.class));
-		String explId = "explId";
 		when(exploratoryDAO.fetchExploratoryFields(anyString(), anyString())).thenReturn(userInstance);
 
 		String compId = "compId";
@@ -335,7 +337,7 @@ public class ComputationalServiceImplTest {
 
 		doThrow(new DlabException("Cannot create instance of resource class "))
 				.when(requestBuilder).newComputationalTerminate(any(UserInfo.class), any(UserInstanceDTO.class),
-				any(UserComputationalResource.class));
+				any(UserComputationalResource.class), any(EndpointDTO.class));
 
 		when(computationalDAO.updateComputationalStatus(any(ComputationalStatusDTO.class)))
 				.thenReturn(mock(UpdateResult.class));
@@ -351,7 +353,7 @@ public class ComputationalServiceImplTest {
 
 		verify(exploratoryDAO).fetchExploratoryFields(USER, EXPLORATORY_NAME);
 
-		verify(requestBuilder).newComputationalTerminate(userInfo, userInstance, ucResource);
+		verify(requestBuilder).newComputationalTerminate(userInfo, userInstance, ucResource, endpointDTO());
 		verify(computationalDAO).updateComputationalStatus(refEq(computationalStatusDTOWithStatusFailed, "self"));
 		verifyNoMoreInteractions(computationalDAO, exploratoryDAO, requestBuilder);
 	}
@@ -367,7 +369,8 @@ public class ComputationalServiceImplTest {
 
 		ComputationalBase compBaseMocked = mock(ComputationalBase.class);
 		when(requestBuilder.newComputationalCreate(any(UserInfo.class), any(ProjectDTO.class),
-				any(UserInstanceDTO.class), any(ComputationalCreateFormDTO.class))).thenReturn(compBaseMocked);
+				any(UserInstanceDTO.class), any(ComputationalCreateFormDTO.class), any(EndpointDTO.class)))
+				.thenReturn(compBaseMocked);
 
 		when(provisioningService.post(anyString(), anyString(), any(ComputationalBase.class), any())).thenReturn(UUID);
 		when(requestId.put(anyString(), anyString())).thenReturn(UUID);
@@ -383,7 +386,7 @@ public class ComputationalServiceImplTest {
 		verify(exploratoryDAO).fetchExploratoryFields(USER, EXPLORATORY_NAME);
 
 		verify(requestBuilder).newComputationalCreate(
-				refEq(userInfo), refEq(projectDTO), refEq(userInstance), any(ComputationalCreateFormDTO.class));
+				refEq(userInfo), refEq(projectDTO), refEq(userInstance), any(ComputationalCreateFormDTO.class), refEq(endpointDTO()));
 
 		verify(provisioningService)
 				.post(endpointDTO().getUrl() + ComputationalAPI.COMPUTATIONAL_CREATE_CLOUD_SPECIFIC, TOKEN,
@@ -444,7 +447,7 @@ public class ComputationalServiceImplTest {
 
 		doThrow(new DlabException("Cannot create instance of resource class "))
 				.when(requestBuilder).newComputationalCreate(any(UserInfo.class), any(ProjectDTO.class),
-				any(UserInstanceDTO.class), any(ComputationalCreateFormDTO.class));
+				any(UserInstanceDTO.class), any(ComputationalCreateFormDTO.class), any(EndpointDTO.class));
 
 		when(computationalDAO.updateComputationalStatus(any(ComputationalStatusDTO.class)))
 				.thenReturn(mock(UpdateResult.class));
@@ -461,7 +464,7 @@ public class ComputationalServiceImplTest {
 		verify(computationalDAO).addComputational(eq(USER), eq(EXPLORATORY_NAME), refEq(ucResource));
 		verify(exploratoryDAO).fetchExploratoryFields(USER, EXPLORATORY_NAME);
 		verify(requestBuilder).newComputationalCreate(
-				refEq(userInfo), refEq(projectDTO), refEq(userInstance), refEq(computationalCreateFormDTO));
+				refEq(userInfo), refEq(projectDTO), refEq(userInstance), refEq(computationalCreateFormDTO), refEq(endpointDTO()));
 		verify(computationalDAO).updateComputationalStatus(refEq(computationalStatusDTOWithStatusFailed, "self"));
 
 		verifyNoMoreInteractions(projectService, computationalDAO, exploratoryDAO, requestBuilder);
@@ -477,8 +480,8 @@ public class ComputationalServiceImplTest {
 				.thenReturn(mock(UpdateResult.class));
 
 		ComputationalStopDTO computationalStopDTO = new ComputationalStopDTO();
-		when(requestBuilder.newComputationalStop(any(UserInfo.class), any(UserInstanceDTO.class), anyString()))
-				.thenReturn(computationalStopDTO);
+		when(requestBuilder.newComputationalStop(any(UserInfo.class), any(UserInstanceDTO.class), anyString(),
+				any(EndpointDTO.class))).thenReturn(computationalStopDTO);
 		when(provisioningService.post(anyString(), anyString(), any(ComputationalBase.class), any()))
 				.thenReturn("someUuid");
 		when(requestId.put(anyString(), anyString())).thenReturn("someUuid");
@@ -487,7 +490,7 @@ public class ComputationalServiceImplTest {
 
 		verify(computationalDAO).updateComputationalStatus(refEq(computationalStatusDTOWithStatusStopping, "self"));
 		verify(exploratoryDAO).fetchExploratoryFields(USER, EXPLORATORY_NAME, true);
-		verify(requestBuilder).newComputationalStop(refEq(userInfo), refEq(exploratory), eq(COMP_NAME));
+		verify(requestBuilder).newComputationalStop(refEq(userInfo), refEq(exploratory), eq(COMP_NAME), refEq(endpointDTO()));
 		verify(provisioningService)
 				.post(eq(endpointDTO().getUrl() + "computational/stop/spark"), eq(TOKEN), refEq(computationalStopDTO),
 						eq(String.class));
@@ -517,8 +520,8 @@ public class ComputationalServiceImplTest {
 				.thenReturn(mock(UpdateResult.class));
 
 		ComputationalStartDTO computationalStartDTO = new ComputationalStartDTO();
-		when(requestBuilder.newComputationalStart(any(UserInfo.class), any(UserInstanceDTO.class), anyString()))
-				.thenReturn(computationalStartDTO);
+		when(requestBuilder.newComputationalStart(any(UserInfo.class), any(UserInstanceDTO.class), anyString(),
+				any(EndpointDTO.class))).thenReturn(computationalStartDTO);
 		when(provisioningService.post(anyString(), anyString(), any(ComputationalBase.class), any()))
 				.thenReturn("someUuid");
 		when(requestId.put(anyString(), anyString())).thenReturn("someUuid");
@@ -527,7 +530,7 @@ public class ComputationalServiceImplTest {
 
 		verify(computationalDAO).updateComputationalStatus(refEq(computationalStatusDTOWithStatusStarting, "self"));
 		verify(exploratoryDAO).fetchExploratoryFields(USER, EXPLORATORY_NAME, true);
-		verify(requestBuilder).newComputationalStart(refEq(userInfo), refEq(exploratory), eq(COMP_NAME));
+		verify(requestBuilder).newComputationalStart(refEq(userInfo), refEq(exploratory), eq(COMP_NAME), refEq(endpointDTO()));
 		verify(provisioningService)
 				.post(eq(endpointDTO().getUrl() + "computational/start/spark"), eq(TOKEN),
 						refEq(computationalStartDTO),
@@ -601,7 +604,8 @@ public class ComputationalServiceImplTest {
 		userInstanceDto.setResources(Collections.singletonList(getUserComputationalResource(RUNNING, COMP_NAME)));
 		when(exploratoryDAO.fetchExploratoryFields(anyString(), anyString(), anyBoolean())).thenReturn(userInstanceDto);
 		when(requestBuilder.newClusterConfigUpdate(any(UserInfo.class), any(UserInstanceDTO.class),
-				any(UserComputationalResource.class), anyListOf(ClusterConfig.class))).thenReturn(clusterConfigDTO);
+				any(UserComputationalResource.class), anyListOf(ClusterConfig.class), any(EndpointDTO.class)))
+				.thenReturn(clusterConfigDTO);
 		when(provisioningService.post(anyString(), anyString(), any(ComputationalClusterConfigDTO.class), any()))
 				.thenReturn("someUuid");
 		computationalService.updateSparkClusterConfig(getUserInfo(), EXPLORATORY_NAME, COMP_NAME,
@@ -610,7 +614,7 @@ public class ComputationalServiceImplTest {
 		verify(exploratoryDAO).fetchExploratoryFields(USER, EXPLORATORY_NAME, true);
 		verify(requestBuilder).newClusterConfigUpdate(refEq(getUserInfo()), refEq(userInstanceDto),
 				refEq(getUserComputationalResource(RUNNING, COMP_NAME)),
-				eq(Collections.singletonList(new ClusterConfig())));
+				eq(Collections.singletonList(new ClusterConfig())), eq(endpointDTO()));
 		verify(requestId).put(USER, "someUuid");
 		verify(computationalDAO).updateComputationalFields(refEq(new ComputationalStatusDTO()
 				.withConfig(config)
diff --git a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/ExploratoryServiceImplTest.java b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/ExploratoryServiceImplTest.java
index 10c7555..5d0bdb2 100644
--- a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/ExploratoryServiceImplTest.java
+++ b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/ExploratoryServiceImplTest.java
@@ -118,7 +118,7 @@ public class ExploratoryServiceImplTest {
 
 		ExploratoryActionDTO egcuDto = new ExploratoryGitCredsUpdateDTO();
 		egcuDto.withExploratoryName(EXPLORATORY_NAME);
-		when(requestBuilder.newExploratoryStart(any(UserInfo.class), any(UserInstanceDTO.class),
+		when(requestBuilder.newExploratoryStart(any(UserInfo.class), any(UserInstanceDTO.class), any(EndpointDTO.class),
 				any(ExploratoryGitCredsDTO.class))).thenReturn(egcuDto);
 
 		String exploratoryStart = "exploratory/start";
@@ -168,7 +168,8 @@ public class ExploratoryServiceImplTest {
 
 		ExploratoryActionDTO eaDto = new ExploratoryActionDTO();
 		eaDto.withExploratoryName(EXPLORATORY_NAME);
-		when(requestBuilder.newExploratoryStop(any(UserInfo.class), any(UserInstanceDTO.class))).thenReturn(eaDto);
+		when(requestBuilder.newExploratoryStop(any(UserInfo.class), any(UserInstanceDTO.class), any(EndpointDTO.class)))
+				.thenReturn(eaDto);
 
 		String exploratoryStop = "exploratory/stop";
 		when(provisioningService.post(anyString(), anyString(), any(ExploratoryActionDTO.class), any())).thenReturn
@@ -220,7 +221,8 @@ public class ExploratoryServiceImplTest {
 
 		ExploratoryActionDTO eaDto = new ExploratoryActionDTO();
 		eaDto.withExploratoryName(EXPLORATORY_NAME);
-		when(requestBuilder.newExploratoryStop(any(UserInfo.class), any(UserInstanceDTO.class))).thenReturn(eaDto);
+		when(requestBuilder.newExploratoryStop(any(UserInfo.class), any(UserInstanceDTO.class), any(EndpointDTO.class)))
+				.thenReturn(eaDto);
 
 		String exploratoryTerminate = "exploratory/terminate";
 		when(provisioningService.post(anyString(), anyString(), any(ExploratoryActionDTO.class), any())).thenReturn
@@ -238,7 +240,7 @@ public class ExploratoryServiceImplTest {
 		verify(computationalDAO).updateComputationalStatusesForExploratory(USER, EXPLORATORY_NAME, UserInstanceStatus
 						.TERMINATING, UserInstanceStatus.TERMINATING, UserInstanceStatus.TERMINATED,
 				UserInstanceStatus.FAILED);
-		verify(requestBuilder).newExploratoryStop(userInfo, userInstance);
+		verify(requestBuilder).newExploratoryStop(userInfo, userInstance, endpointDTO());
 		verify(provisioningService).post(endpointDTO().getUrl() + exploratoryTerminate, TOKEN, eaDto, String.class);
 		verify(requestId).put(USER, UUID);
 		verifyNoMoreInteractions(exploratoryDAO, computationalDAO, requestBuilder, provisioningService, requestId);
@@ -275,8 +277,8 @@ public class ExploratoryServiceImplTest {
 
 		ExploratoryCreateDTO ecDto = new ExploratoryCreateDTO();
 		Exploratory exploratory = Exploratory.builder().name(EXPLORATORY_NAME).build();
-		when(requestBuilder.newExploratoryCreate(any(ProjectDTO.class), any(Exploratory.class),
-				any(UserInfo.class), any(ExploratoryGitCredsDTO.class), anyMapOf(String.class, String.class))).thenReturn(ecDto);
+		when(requestBuilder.newExploratoryCreate(any(ProjectDTO.class), any(EndpointDTO.class),
+				any(Exploratory.class), any(UserInfo.class), any(ExploratoryGitCredsDTO.class), anyMapOf(String.class, String.class))).thenReturn(ecDto);
 		String exploratoryCreate = "exploratory/create";
 		when(provisioningService.post(anyString(), anyString(), any(ExploratoryCreateDTO.class), any()))
 				.thenReturn(UUID);
@@ -291,7 +293,7 @@ public class ExploratoryServiceImplTest {
 		verify(projectService).get("project");
 		verify(exploratoryDAO).insertExploratory(userInstance);
 		verify(gitCredsDAO).findGitCreds(USER);
-		verify(requestBuilder).newExploratoryCreate(projectDTO, exploratory, userInfo, egcDto, Collections.emptyMap());
+		verify(requestBuilder).newExploratoryCreate(projectDTO, endpointDTO(), exploratory, userInfo, egcDto, Collections.emptyMap());
 		verify(provisioningService).post(endpointDTO().getUrl() + exploratoryCreate, TOKEN, ecDto, String.class);
 		verify(requestId).put(USER, UUID);
 		verifyNoMoreInteractions(projectService, exploratoryDAO, gitCredsDAO, requestBuilder, provisioningService, requestId);
@@ -338,8 +340,8 @@ public class ExploratoryServiceImplTest {
 		Exploratory exploratory = Exploratory.builder().name(EXPLORATORY_NAME).build();
 
 		doThrow(new DlabException("Cannot create instance of resource class ")).when(requestBuilder)
-				.newExploratoryCreate(any(ProjectDTO.class), any(Exploratory.class), any(UserInfo.class),
-						any(ExploratoryGitCredsDTO.class), anyMapOf(String.class, String.class));
+				.newExploratoryCreate(any(ProjectDTO.class), any(EndpointDTO.class), any(Exploratory.class),
+						any(UserInfo.class), any(ExploratoryGitCredsDTO.class), anyMapOf(String.class, String.class));
 
 		when(exploratoryDAO.updateExploratoryStatus(any(StatusEnvBaseDTO.class))).thenReturn(mock(UpdateResult.class));
 		try {
@@ -356,7 +358,7 @@ public class ExploratoryServiceImplTest {
 		verify(projectService).get("project");
 		verify(exploratoryDAO).insertExploratory(userInstance);
 		verify(gitCredsDAO).findGitCreds(USER);
-		verify(requestBuilder).newExploratoryCreate(projectDTO, exploratory, userInfo, egcDto, Collections.emptyMap());
+		verify(requestBuilder).newExploratoryCreate(projectDTO, endpointDTO(), exploratory, userInfo, egcDto, Collections.emptyMap());
 		verify(exploratoryDAO).updateExploratoryStatus(refEq(statusEnvBaseDTO, "self"));
 		verifyNoMoreInteractions(projectService, exploratoryDAO, gitCredsDAO, requestBuilder);
 	}
@@ -494,11 +496,10 @@ public class ExploratoryServiceImplTest {
 
 	@Test
 	public void testUpdateExploratoryClusterConfig() {
-
 		when(endpointService.get(anyString())).thenReturn(endpointDTO());
 		when(exploratoryDAO.fetchRunningExploratoryFields(anyString(), anyString())).thenReturn(getUserInstanceDto());
 		when(requestBuilder.newClusterConfigUpdate(any(UserInfo.class), any(UserInstanceDTO.class),
-				anyListOf(ClusterConfig.class))).thenReturn(new ExploratoryReconfigureSparkClusterActionDTO());
+				anyListOf(ClusterConfig.class), any(EndpointDTO.class))).thenReturn(new ExploratoryReconfigureSparkClusterActionDTO());
 		when(provisioningService.post(anyString(), anyString(), any(ExploratoryReconfigureSparkClusterActionDTO.class)
 				, any())).thenReturn(UUID);
 
@@ -506,7 +507,7 @@ public class ExploratoryServiceImplTest {
 
 		verify(exploratoryDAO).fetchRunningExploratoryFields(USER, EXPLORATORY_NAME);
 		verify(requestBuilder).newClusterConfigUpdate(refEq(getUserInfo()), refEq(getUserInstanceDto()),
-				refEq(singletonList(new ClusterConfig())));
+				refEq(singletonList(new ClusterConfig())), refEq(endpointDTO()));
 		verify(requestId).put(USER, UUID);
 		verify(provisioningService).post(eq(endpointDTO().getUrl() + "exploratory/reconfigure_spark"), eq(TOKEN),
 				refEq(new ExploratoryReconfigureSparkClusterActionDTO(), "self"), eq(String.class));
diff --git a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/GitCredentialServiceImplTest.java b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/GitCredentialServiceImplTest.java
index 69f9fca..8b8acaa 100644
--- a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/GitCredentialServiceImplTest.java
+++ b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/GitCredentialServiceImplTest.java
@@ -77,7 +77,7 @@ public class GitCredentialServiceImplTest {
 		when(exploratoryDAO.fetchRunningExploratoryFields(anyString())).thenReturn(Collections.singletonList(uiDto));
 
 		ExploratoryGitCredsUpdateDTO egcuDto = new ExploratoryGitCredsUpdateDTO().withExploratoryName(exploratoryName);
-		when(requestBuilder.newGitCredentialsUpdate(any(UserInfo.class), any(UserInstanceDTO.class),
+		when(requestBuilder.newGitCredentialsUpdate(any(UserInfo.class), any(UserInstanceDTO.class), any(EndpointDTO.class),
 				any(ExploratoryGitCredsDTO.class))).thenReturn(egcuDto);
 
 		String uuid = "someUuid";
@@ -90,7 +90,7 @@ public class GitCredentialServiceImplTest {
 
 		verify(gitCredsDAO).updateGitCreds(USER, egcDto);
 		verify(exploratoryDAO).fetchRunningExploratoryFields(USER);
-		verify(requestBuilder).newGitCredentialsUpdate(userInfo, uiDto, egcDto);
+		verify(requestBuilder).newGitCredentialsUpdate(userInfo, uiDto, endpointDTO(), egcDto);
 		verify(provisioningService).post(endpointDTO().getUrl() + "exploratory/git_creds", token, egcuDto,
 				String.class);
 		verify(requestId).put(USER, uuid);
@@ -117,6 +117,7 @@ public class GitCredentialServiceImplTest {
 
 	@Test
 	public void updateGitCredentialsWithFailedNotebooks() {
+		when(endpointService.get(anyString())).thenReturn(endpointDTO());
 		String token = "token";
 		UserInfo userInfo = new UserInfo(USER, token);
 		doNothing().when(gitCredsDAO).updateGitCreds(anyString(), any(ExploratoryGitCredsDTO.class));
@@ -127,7 +128,7 @@ public class GitCredentialServiceImplTest {
 
 		doThrow(new DlabException("Cannot create instance of resource class "))
 				.when(requestBuilder).newGitCredentialsUpdate(any(UserInfo.class), any(UserInstanceDTO.class),
-				any(ExploratoryGitCredsDTO.class));
+				any(EndpointDTO.class), any(ExploratoryGitCredsDTO.class));
 
 		ExploratoryGitCredsDTO egcDto = new ExploratoryGitCredsDTO();
 		try {
@@ -139,7 +140,7 @@ public class GitCredentialServiceImplTest {
 
 		verify(gitCredsDAO).updateGitCreds(USER, egcDto);
 		verify(exploratoryDAO).fetchRunningExploratoryFields(USER);
-		verify(requestBuilder).newGitCredentialsUpdate(userInfo, uiDto, egcDto);
+		verify(requestBuilder).newGitCredentialsUpdate(userInfo, uiDto, endpointDTO(), egcDto);
 		verifyNoMoreInteractions(gitCredsDAO, exploratoryDAO, requestBuilder);
 	}
 
diff --git a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/ImageExploratoryServiceImplTest.java b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/ImageExploratoryServiceImplTest.java
index dd5e27d..7509971 100644
--- a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/ImageExploratoryServiceImplTest.java
+++ b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/ImageExploratoryServiceImplTest.java
@@ -107,8 +107,8 @@ public class ImageExploratoryServiceImplTest {
 				.thenReturn(mock(UpdateResult.class));
 		ExploratoryImageDTO eiDto = new ExploratoryImageDTO();
 		when(endpointService.get(anyString())).thenReturn(endpointDTO());
-		when(requestBuilder.newExploratoryImageCreate(any(UserInfo.class), any(UserInstanceDTO.class), anyString()))
-				.thenReturn(eiDto);
+		when(requestBuilder.newExploratoryImageCreate(any(UserInfo.class), any(UserInstanceDTO.class), anyString(),
+				any(EndpointDTO.class))).thenReturn(eiDto);
 
 		String expectedUuid = "someUuid";
 		when(provisioningService.post(anyString(), anyString(), any(ExploratoryImageDTO.class), any()))
@@ -125,7 +125,7 @@ public class ImageExploratoryServiceImplTest {
 		verify(imageExploratoryDao).exist(imageName, PROJECT);
 		verify(imageExploratoryDao).save(any(Image.class));
 		verify(libDAO).getLibraries(USER, EXPLORATORY_NAME);
-		verify(requestBuilder).newExploratoryImageCreate(userInfo, userInstance, imageName);
+		verify(requestBuilder).newExploratoryImageCreate(userInfo, userInstance, imageName, endpointDTO());
 		verify(endpointService).get(anyString());
 		verify(provisioningService).post(endpointDTO().getUrl() + "exploratory/image", TOKEN, eiDto, String.class);
 		verifyNoMoreInteractions(exploratoryDAO, imageExploratoryDao, libDAO, requestBuilder, endpointService, provisioningService);
@@ -169,7 +169,7 @@ public class ImageExploratoryServiceImplTest {
 		when(exploratoryDAO.updateExploratoryStatus(any(ExploratoryStatusDTO.class)))
 				.thenReturn(mock(UpdateResult.class));
 		doThrow(new DlabException("Cannot create instance of resource class")).when(requestBuilder)
-				.newExploratoryImageCreate(any(UserInfo.class), any(UserInstanceDTO.class), anyString());
+				.newExploratoryImageCreate(any(UserInfo.class), any(UserInstanceDTO.class), anyString(), any(EndpointDTO.class));
 		when(endpointService.get(anyString())).thenReturn(endpointDTO());
 
 		String imageName = "someImageName", imageDescription = "someDescription";
@@ -184,7 +184,7 @@ public class ImageExploratoryServiceImplTest {
 		verify(imageExploratoryDao).exist(imageName, PROJECT);
 		verify(imageExploratoryDao).save(any(Image.class));
 		verify(libDAO).getLibraries(USER, EXPLORATORY_NAME);
-		verify(requestBuilder).newExploratoryImageCreate(userInfo, userInstance, imageName);
+		verify(requestBuilder).newExploratoryImageCreate(userInfo, userInstance, imageName, endpointDTO());
 		verify(endpointService).get(anyString());
 		verifyNoMoreInteractions(exploratoryDAO, imageExploratoryDao, libDAO, requestBuilder, endpointService);
 	}
diff --git a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/LibraryServiceImplTest.java b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/LibraryServiceImplTest.java
index a9e0b41..bc3ecbf 100644
--- a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/LibraryServiceImplTest.java
+++ b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/LibraryServiceImplTest.java
@@ -151,7 +151,7 @@ public class LibraryServiceImplTest {
 		when(exploratoryDAO.fetchExploratoryFields(anyString(), anyString(), anyString())).thenReturn(getUserInstanceDto());
 		when(provisioningService.post(anyString(), anyString(), any(LibraryInstallDTO.class), any())).thenReturn(UUID);
 		when(requestBuilder.newLibInstall(any(UserInfo.class), any(UserInstanceDTO.class),
-				any(UserComputationalResource.class), anyListOf(LibInstallDTO.class))).thenReturn(libraryInstallDTO);
+				any(UserComputationalResource.class), anyListOf(LibInstallDTO.class), any(EndpointDTO.class))).thenReturn(libraryInstallDTO);
 
 
 		final String uuid = libraryService.installComputationalLibs(user, EXPLORATORY_NAME, COMPUTATIONAL_NAME,
@@ -161,7 +161,7 @@ public class LibraryServiceImplTest {
 
 		verify(libraryDAO).getLibrary(USER, EXPLORATORY_NAME, COMPUTATIONAL_NAME, LIB_GROUP, LIB_NAME);
 		verify(requestBuilder).newLibInstall(refEq(user), refEq(getUserInstanceDto()),
-				refEq(getUserComputationalResourceWithName(COMPUTATIONAL_NAME)), eq(libsToInstall));
+				refEq(getUserComputationalResourceWithName(COMPUTATIONAL_NAME)), eq(libsToInstall), refEq(endpointDTO()));
 		verify(provisioningService).post(eq(endpointDTO().getUrl() + "library/computational/lib_install"), eq(user.getAccessToken()),
 				refEq(libraryInstallDTO), eq(String.class));
 		verify(libraryDAO).addLibrary(eq(USER), eq(EXPLORATORY_NAME), eq(COMPUTATIONAL_NAME),
@@ -182,7 +182,8 @@ public class LibraryServiceImplTest {
 		when(exploratoryDAO.fetchExploratoryFields(anyString(), anyString(), anyString())).thenReturn(getUserInstanceDto());
 		when(provisioningService.post(anyString(), anyString(), any(LibraryInstallDTO.class), any())).thenReturn(UUID);
 		when(requestBuilder.newLibInstall(any(UserInfo.class), any(UserInstanceDTO.class),
-				any(UserComputationalResource.class), anyListOf(LibInstallDTO.class))).thenReturn(libraryInstallDTO);
+				any(UserComputationalResource.class), anyListOf(LibInstallDTO.class), any(EndpointDTO.class)))
+				.thenReturn(libraryInstallDTO);
 
 
 		expectedException.expect(DlabException.class);
@@ -203,7 +204,8 @@ public class LibraryServiceImplTest {
 		when(exploratoryDAO.fetchExploratoryFields(anyString(), anyString(), anyString())).thenReturn(getUserInstanceDto());
 		when(provisioningService.post(anyString(), anyString(), any(LibraryInstallDTO.class), any())).thenReturn(UUID);
 		when(requestBuilder.newLibInstall(any(UserInfo.class), any(UserInstanceDTO.class),
-				any(UserComputationalResource.class), anyListOf(LibInstallDTO.class))).thenReturn(libraryInstallDTO);
+				any(UserComputationalResource.class), anyListOf(LibInstallDTO.class), any(EndpointDTO.class)))
+				.thenReturn(libraryInstallDTO);
 		when(libraryDAO.getLibrary(anyString(), anyString(), anyString(), anyString(), anyString())).thenReturn(getLibrary(LibStatus.INSTALLED));
 
 		final String uuid = libraryService.installComputationalLibs(user, EXPLORATORY_NAME, COMPUTATIONAL_NAME,
@@ -217,7 +219,7 @@ public class LibraryServiceImplTest {
 		verify(libraryDAO).addLibrary(eq(USER), eq(EXPLORATORY_NAME), eq(COMPUTATIONAL_NAME),
 				refEq(libsToInstall.get(0)), eq(true));
 		verify(requestBuilder).newLibInstall(refEq(user), refEq(getUserInstanceDto()),
-				refEq(getUserComputationalResourceWithName(COMPUTATIONAL_NAME)), eq(libsToInstall));
+				refEq(getUserComputationalResourceWithName(COMPUTATIONAL_NAME)), eq(libsToInstall), refEq(endpointDTO()));
 		verify(provisioningService).post(eq(endpointDTO().getUrl() + "library/computational/lib_install"),
 				eq(user.getAccessToken()),
 				refEq(libraryInstallDTO), eq(String.class));
@@ -238,7 +240,8 @@ public class LibraryServiceImplTest {
 		when(exploratoryDAO.fetchExploratoryFields(anyString(), anyString(), anyString())).thenReturn(getUserInstanceDto());
 		when(provisioningService.post(anyString(), anyString(), any(LibraryInstallDTO.class), any())).thenReturn(UUID);
 		when(requestBuilder.newLibInstall(any(UserInfo.class), any(UserInstanceDTO.class),
-				any(UserComputationalResource.class), anyListOf(LibInstallDTO.class))).thenReturn(libraryInstallDTO);
+				any(UserComputationalResource.class), anyListOf(LibInstallDTO.class), any(EndpointDTO.class)))
+				.thenReturn(libraryInstallDTO);
 		when(libraryDAO.getLibrary(anyString(), anyString(), anyString(), anyString(), anyString())).thenReturn(getLibrary(LibStatus.INSTALLING));
 
 		try {
@@ -250,7 +253,6 @@ public class LibraryServiceImplTest {
 		verify(exploratoryDAO).fetchExploratoryFields(USER, EXPLORATORY_NAME, COMPUTATIONAL_NAME);
 		verify(libraryDAO).getLibrary(USER, EXPLORATORY_NAME, COMPUTATIONAL_NAME, LIB_GROUP, LIB_NAME);
 		verifyNoMoreInteractions(libraryDAO, requestBuilder, provisioningService, requestId, exploratoryDAO);
-
 	}
 
 	@Test
@@ -263,7 +265,7 @@ public class LibraryServiceImplTest {
 		when(endpointService.get(anyString())).thenReturn(endpointDTO());
 		when(exploratoryDAO.fetchRunningExploratoryFields(anyString(), anyString())).thenReturn(getUserInstanceDto());
 		when(provisioningService.post(anyString(), anyString(), any(LibraryInstallDTO.class), any())).thenReturn(UUID);
-		when(requestBuilder.newLibInstall(any(UserInfo.class), any(UserInstanceDTO.class),
+		when(requestBuilder.newLibInstall(any(UserInfo.class), any(UserInstanceDTO.class), any(EndpointDTO.class),
 				anyListOf(LibInstallDTO.class))).thenReturn(libraryInstallDTO);
 
 
@@ -272,7 +274,7 @@ public class LibraryServiceImplTest {
 		assertEquals(UUID, uuid);
 
 		verify(libraryDAO).getLibrary(USER, EXPLORATORY_NAME, LIB_GROUP, LIB_NAME);
-		verify(requestBuilder).newLibInstall(refEq(user), refEq(getUserInstanceDto()), eq(libsToInstall));
+		verify(requestBuilder).newLibInstall(refEq(user), refEq(getUserInstanceDto()), eq(endpointDTO()), eq(libsToInstall));
 		verify(provisioningService).post(eq(endpointDTO().getUrl() + "library/exploratory/lib_install"), eq(user.getAccessToken()),
 				refEq(libraryInstallDTO), eq(String.class));
 		verify(libraryDAO).addLibrary(eq(USER), eq(EXPLORATORY_NAME), refEq(libsToInstall.get(0)), eq(false));
@@ -291,7 +293,7 @@ public class LibraryServiceImplTest {
 		when(endpointService.get(anyString())).thenReturn(endpointDTO());
 		when(exploratoryDAO.fetchRunningExploratoryFields(anyString(), anyString())).thenReturn(getUserInstanceDto());
 		when(provisioningService.post(anyString(), anyString(), any(LibraryInstallDTO.class), any())).thenReturn(UUID);
-		when(requestBuilder.newLibInstall(any(UserInfo.class), any(UserInstanceDTO.class),
+		when(requestBuilder.newLibInstall(any(UserInfo.class), any(UserInstanceDTO.class), any(EndpointDTO.class),
 				anyListOf(LibInstallDTO.class))).thenReturn(libraryInstallDTO);
 		when(libraryDAO.getLibrary(anyString(), anyString(), anyString(), anyString())).thenReturn(getLibrary(LibStatus.INSTALLED));
 
@@ -302,7 +304,7 @@ public class LibraryServiceImplTest {
 		libsToInstall.get(0).setOverride(true);
 		verify(libraryDAO).getLibrary(USER, EXPLORATORY_NAME, LIB_GROUP, LIB_NAME);
 		verify(libraryDAO).addLibrary(eq(USER), eq(EXPLORATORY_NAME), refEq(libsToInstall.get(0)), eq(true));
-		verify(requestBuilder).newLibInstall(refEq(user), refEq(getUserInstanceDto()), eq(libsToInstall));
+		verify(requestBuilder).newLibInstall(refEq(user), refEq(getUserInstanceDto()), eq(endpointDTO()), eq(libsToInstall));
 		verify(exploratoryDAO).fetchRunningExploratoryFields(USER, EXPLORATORY_NAME);
 		verify(provisioningService).post(eq(endpointDTO().getUrl() + "library/exploratory/lib_install"), eq(user.getAccessToken()),
 				refEq(libraryInstallDTO), eq(String.class));
@@ -320,7 +322,7 @@ public class LibraryServiceImplTest {
 		when(endpointService.get(anyString())).thenReturn(endpointDTO());
 		when(exploratoryDAO.fetchRunningExploratoryFields(anyString(), anyString())).thenReturn(getUserInstanceDto());
 		when(provisioningService.post(anyString(), anyString(), any(LibraryInstallDTO.class), any())).thenReturn(UUID);
-		when(requestBuilder.newLibInstall(any(UserInfo.class), any(UserInstanceDTO.class),
+		when(requestBuilder.newLibInstall(any(UserInfo.class), any(UserInstanceDTO.class), any(EndpointDTO.class),
 				anyListOf(LibInstallDTO.class))).thenReturn(libraryInstallDTO);
 		when(libraryDAO.getLibrary(anyString(), anyString(), anyString(), anyString())).thenReturn(getLibrary(LibStatus.INSTALLING));
 
diff --git a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/ReuploadKeyServiceImplTest.java b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/ReuploadKeyServiceImplTest.java
index 7c5d048..9b5e887 100644
--- a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/ReuploadKeyServiceImplTest.java
+++ b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/ReuploadKeyServiceImplTest.java
@@ -172,152 +172,6 @@ public class ReuploadKeyServiceImplTest {
 		verifyZeroInteractions(exploratoryDAO);
 	}
 
-	@Test
-	@SuppressWarnings("unchecked")
-	public void reuploadKeyActionForEdge() {
-		ReuploadKeyDTO reuploadFile = mock(ReuploadKeyDTO.class);
-		when(requestBuilder.newKeyReupload(any(UserInfo.class), anyString(), anyString(), any(List.class)))
-				.thenReturn(reuploadFile);
-		String expectedUuid = "someUuid";
-		when(provisioningService.post(anyString(), anyString(), any(ReuploadKeyDTO.class), any(), any(Map.class)))
-				.thenReturn(expectedUuid);
-		when(requestId.put(anyString(), anyString())).thenReturn(expectedUuid);
-
-		ResourceData resource = new ResourceData(ResourceType.EDGE, "someId", null, null);
-		reuploadKeyService.reuploadKeyAction(userInfo, resource);
-
-		verify(requestBuilder).newKeyReupload(refEq(userInfo), anyString(), eq(""), any(List.class));
-		verify(provisioningService).post("/key/reupload", TOKEN, reuploadFile, String.class,
-				Collections.singletonMap("is_primary_reuploading", false));
-		verify(requestId).put(USER, expectedUuid);
-		verifyNoMoreInteractions(requestBuilder, provisioningService, requestId);
-		verifyZeroInteractions(exploratoryDAO, computationalDAO);
-	}
-
-	@Test
-	@SuppressWarnings("unchecked")
-	public void reuploadKeyActionForEdgeWithException() {
-		doThrow(new DlabException("Couldn't reupload key to edge"))
-				.when(requestBuilder).newKeyReupload(any(UserInfo.class), anyString(), anyString(), any(List.class));
-
-		ResourceData resource = new ResourceData(ResourceType.EDGE, "someId", null, null);
-		try {
-			reuploadKeyService.reuploadKeyAction(userInfo, resource);
-		} catch (DlabException e) {
-			assertEquals("Couldn't reupload key to edge_node for user test:\tCouldn't reupload key to edge",
-					e.getMessage());
-		}
-
-		verify(requestBuilder).newKeyReupload(refEq(userInfo), anyString(), eq(""), any(List.class));
-		verifyNoMoreInteractions(requestBuilder);
-		verifyZeroInteractions(exploratoryDAO, computationalDAO, provisioningService, requestId);
-	}
-
-	@Test
-	@SuppressWarnings("unchecked")
-	public void reuploadKeyActionForExploratory() {
-		when(exploratoryDAO.updateStatusForExploratory(anyString(), anyString(),
-				any(UserInstanceStatus.class))).thenReturn(mock(UpdateResult.class));
-		ReuploadKeyDTO reuploadFile = mock(ReuploadKeyDTO.class);
-		when(requestBuilder.newKeyReupload(any(UserInfo.class), anyString(), anyString(), any(List.class)))
-				.thenReturn(reuploadFile);
-		String expectedUuid = "someUuid";
-		when(provisioningService.post(anyString(), anyString(), any(ReuploadKeyDTO.class), any(), any(Map.class)))
-				.thenReturn(expectedUuid);
-		when(requestId.put(anyString(), anyString())).thenReturn(expectedUuid);
-
-		ResourceData resource = new ResourceData(ResourceType.EXPLORATORY, "someId", EXPLORATORY_NAME, null);
-		reuploadKeyService.reuploadKeyAction(userInfo, resource);
-
-		verify(exploratoryDAO).updateStatusForExploratory(USER, EXPLORATORY_NAME, REUPLOADING_KEY);
-		verify(requestBuilder).newKeyReupload(refEq(userInfo), anyString(), eq(""), any(List.class));
-		verify(provisioningService).post("/key/reupload", TOKEN, reuploadFile, String.class,
-				Collections.singletonMap("is_primary_reuploading", false));
-		verify(requestId).put(USER, expectedUuid);
-		verifyNoMoreInteractions(exploratoryDAO, requestBuilder, provisioningService, requestId);
-		verifyZeroInteractions(computationalDAO);
-	}
-
-	@Test
-	@SuppressWarnings("unchecked")
-	public void reuploadKeyActionForExploratoryWithException() {
-		when(exploratoryDAO.updateStatusForExploratory(anyString(), anyString(),
-				eq(REUPLOADING_KEY))).thenReturn(mock(UpdateResult.class));
-		doThrow(new DlabException("Couldn't reupload key to exploratory"))
-				.when(requestBuilder).newKeyReupload(any(UserInfo.class), anyString(), anyString(), any(List.class));
-		when(exploratoryDAO.updateStatusForExploratory(anyString(), anyString(),
-				eq(RUNNING))).thenReturn(mock(UpdateResult.class));
-
-		ResourceData resource = new ResourceData(ResourceType.EXPLORATORY, "someId", EXPLORATORY_NAME, null);
-		try {
-			reuploadKeyService.reuploadKeyAction(userInfo, resource);
-		} catch (DlabException e) {
-			assertEquals("Couldn't reupload key to exploratory explName for user test:\tCouldn't reupload key to " +
-					"exploratory", e.getMessage());
-		}
-
-		verify(exploratoryDAO).updateStatusForExploratory(USER, EXPLORATORY_NAME, REUPLOADING_KEY);
-		verify(requestBuilder).newKeyReupload(refEq(userInfo), anyString(), eq(""), any(List.class));
-		verify(exploratoryDAO).updateStatusForExploratory(USER, EXPLORATORY_NAME, RUNNING);
-		verifyNoMoreInteractions(exploratoryDAO, requestBuilder);
-		verifyZeroInteractions(computationalDAO, provisioningService, requestId);
-	}
-
-	@Test
-	@SuppressWarnings("unchecked")
-	public void reuploadKeyActionForCluster() {
-		doNothing().when(computationalDAO).updateStatusForComputationalResource(anyString(), anyString(), anyString(),
-				any(UserInstanceStatus.class));
-		ReuploadKeyDTO reuploadFile = mock(ReuploadKeyDTO.class);
-		when(requestBuilder.newKeyReupload(any(UserInfo.class), anyString(), anyString(), any(List.class)))
-				.thenReturn(reuploadFile);
-		String expectedUuid = "someUuid";
-		when(provisioningService.post(anyString(), anyString(), any(ReuploadKeyDTO.class), any(), any(Map.class)))
-				.thenReturn(expectedUuid);
-		when(requestId.put(anyString(), anyString())).thenReturn(expectedUuid);
-
-		ResourceData resource = new ResourceData(ResourceType.COMPUTATIONAL, "someId", EXPLORATORY_NAME,
-				"compName");
-		reuploadKeyService.reuploadKeyAction(userInfo, resource);
-
-		verify(computationalDAO).updateStatusForComputationalResource(USER, EXPLORATORY_NAME,
-				"compName", REUPLOADING_KEY);
-		verify(requestBuilder).newKeyReupload(refEq(userInfo), anyString(), eq(""), any(List.class));
-		verify(provisioningService).post("/key/reupload", TOKEN, reuploadFile, String.class,
-				Collections.singletonMap("is_primary_reuploading", false));
-		verify(requestId).put(USER, expectedUuid);
-		verifyNoMoreInteractions(computationalDAO, requestBuilder, provisioningService, requestId);
-		verifyZeroInteractions(exploratoryDAO);
-	}
-
-	@Test
-	@SuppressWarnings("unchecked")
-	public void reuploadKeyActionForClusterWithException() {
-		doNothing().when(computationalDAO).updateStatusForComputationalResource(anyString(), anyString(), anyString(),
-				eq(REUPLOADING_KEY));
-		doThrow(new DlabException("Couldn't reupload key to cluster"))
-				.when(requestBuilder).newKeyReupload(any(UserInfo.class), anyString(), anyString(), any(List.class));
-		doNothing().when(computationalDAO).updateStatusForComputationalResource(anyString(), anyString(), anyString(),
-				eq(RUNNING));
-
-		ResourceData resource = new ResourceData(ResourceType.COMPUTATIONAL, "someId", EXPLORATORY_NAME,
-				"compName");
-		try {
-			reuploadKeyService.reuploadKeyAction(userInfo, resource);
-		} catch (DlabException e) {
-			assertEquals("Couldn't reupload key to computational_resource compName affiliated with exploratory " +
-					"explName for user test:\tCouldn't reupload key to cluster", e.getMessage());
-		}
-
-		verify(computationalDAO).updateStatusForComputationalResource(USER, EXPLORATORY_NAME,
-				"compName", REUPLOADING_KEY);
-		verify(requestBuilder).newKeyReupload(refEq(userInfo), anyString(), eq(""), any(List.class));
-		verify(computationalDAO).updateStatusForComputationalResource(USER, EXPLORATORY_NAME,
-				"compName", RUNNING);
-		verifyNoMoreInteractions(computationalDAO, requestBuilder);
-		verifyZeroInteractions(exploratoryDAO, provisioningService, requestId);
-	}
-
 	private UserInfo getUserInfo() {
 		return new UserInfo(USER, TOKEN);
 	}


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