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/15 14:29:38 UTC
[incubator-dlab] branch multiple-cloud updated: Updated
provisioning callbacks
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 e6524c5 Updated provisioning callbacks
e6524c5 is described below
commit e6524c5249dd36749a96c5d5f62bf8cfc78522f2
Author: Oleh Fuks <ol...@gmail.com>
AuthorDate: Wed Jan 15 16:29:02 2020 +0200
Updated provisioning callbacks
---
.../src/ssn/templates/ssn.yml | 3 -
.../dto/base/computational/ComputationalBase.java | 8 +-
services/provisioning-service/pom.xml | 5 +
.../backendapi/ProvisioningServiceApplication.java | 2 +-
.../handlers/ComputationalCallbackHandler.java | 8 +-
.../response/handlers/ComputationalConfigure.java | 11 +-
.../ComputationalConfigureCallbackHandler.java | 7 +-
.../handlers/ExploratoryCallbackHandler.java | 10 +-
.../ExploratoryGitCredsCallbackHandler.java | 7 +-
.../handlers/ImageCreateCallbackHandler.java | 6 +-
.../handlers/LibInstallCallbackHandler.java | 8 +-
.../response/handlers/LibListCallbackHandler.java | 7 +-
.../java/com/epam/dlab/backendapi/dao/BaseDAO.java | 111 +++++++++++++++++++++
.../EndpointDAO.java} | 31 ++----
.../dlab/backendapi/dao/impl/EndpointDAOImpl.java | 54 ++++++++++
.../dlab/backendapi/modules/ProductionModule.java | 8 ++
.../backendapi/modules/ProvisioningDevModule.java | 12 ++-
...lthCheckResource.java => EndpointResource.java} | 30 ++++--
.../resources/GitExploratoryResource.java | 15 ++-
.../dlab/backendapi/resources/ImageResource.java | 9 +-
.../dlab/backendapi/resources/LibraryResource.java | 32 +++---
.../resources/aws/ComputationalResourceAws.java | 16 ++-
.../resources/base/ExploratoryService.java | 14 ++-
.../resources/gcp/ComputationalResourceGcp.java | 15 ++-
.../EndpointService.java} | 30 +-----
.../service/impl/EndpointServiceImpl.java | 62 ++++++++++++
.../service/impl/ProjectServiceImpl.java | 7 +-
.../service/impl/SparkClusterService.java | 15 ++-
.../core/commands/CommandExecutorMockTest.java | 4 +-
.../dao/FileSystemCallbackHandlerDaoTest.java | 9 +-
.../dropwizard/listeners/MongoStartupListener.java | 7 +-
.../dlab/backendapi/modules/ModuleFactory.java | 24 ++---
.../backendapi/resources/EndpointResource.java | 2 +-
.../endpoint/CheckEndpointStatusScheduler.java | 2 +-
.../dlab/backendapi/service/EndpointService.java | 3 +-
.../service/impl/EndpointServiceImpl.java | 29 +++++-
.../epam/dlab/backendapi/util/RequestBuilder.java | 12 ++-
37 files changed, 483 insertions(+), 152 deletions(-)
diff --git a/infrastructure-provisioning/src/ssn/templates/ssn.yml b/infrastructure-provisioning/src/ssn/templates/ssn.yml
index bed2bf6..70b89e2 100644
--- a/infrastructure-provisioning/src/ssn/templates/ssn.yml
+++ b/infrastructure-provisioning/src/ssn/templates/ssn.yml
@@ -42,9 +42,6 @@ mongo:
database: dlabdb
selfService:
- protocol: https
- host: localhost
- port: 8443
jerseyClient:
timeout: 3s
connectionTimeout: 3s
diff --git a/services/dlab-model/src/main/java/com/epam/dlab/dto/base/computational/ComputationalBase.java b/services/dlab-model/src/main/java/com/epam/dlab/dto/base/computational/ComputationalBase.java
index e3aa000..a55445c 100644
--- a/services/dlab-model/src/main/java/com/epam/dlab/dto/base/computational/ComputationalBase.java
+++ b/services/dlab-model/src/main/java/com/epam/dlab/dto/base/computational/ComputationalBase.java
@@ -41,7 +41,7 @@ public abstract class ComputationalBase<T extends ComputationalBase<?>> extends
@JsonProperty("project_name")
private String project;
@JsonProperty("endpoint_name")
- private String ednpoint;
+ private String endpoint;
@JsonProperty("tags")
private Map<String, String> tags;
@@ -96,7 +96,7 @@ public abstract class ComputationalBase<T extends ComputationalBase<?>> extends
}
public T withEndpoint(String endpoint) {
- this.ednpoint = endpoint;
+ this.endpoint = endpoint;
return self;
}
@@ -104,6 +104,10 @@ public abstract class ComputationalBase<T extends ComputationalBase<?>> extends
return project;
}
+ public String getEndpoint() {
+ return endpoint;
+ }
+
@Override
public ToStringHelper toStringHelper(Object self) {
return super.toStringHelper(self)
diff --git a/services/provisioning-service/pom.xml b/services/provisioning-service/pom.xml
index 1a6548e..5c625a4 100644
--- a/services/provisioning-service/pom.xml
+++ b/services/provisioning-service/pom.xml
@@ -63,6 +63,11 @@
<artifactId>conveyor</artifactId>
<version>${com.aegisql.conveyor.version}</version>
</dependency>
+ <dependency>
+ <groupId>org.mongodb</groupId>
+ <artifactId>mongo-java-driver</artifactId>
+ <version>${org.mongodb.version}</version>
+ </dependency>
<dependency>
<groupId>org.mockito</groupId>
diff --git a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/ProvisioningServiceApplication.java b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/ProvisioningServiceApplication.java
index 6f1047b..1a136f1 100644
--- a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/ProvisioningServiceApplication.java
+++ b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/ProvisioningServiceApplication.java
@@ -144,6 +144,6 @@ public class ProvisioningServiceApplication extends Application<ProvisioningServ
jersey.register(injector.getInstance(KeyResource.class));
jersey.register(injector.getInstance(CallbackHandlerResource.class));
jersey.register(injector.getInstance(ProjectResource.class));
- jersey.register(injector.getInstance(ProvisioningHealthCheckResource.class));
+ jersey.register(injector.getInstance(EndpointResource.class));
}
}
diff --git a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/core/response/handlers/ComputationalCallbackHandler.java b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/core/response/handlers/ComputationalCallbackHandler.java
index 8ccf260..c77476c 100644
--- a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/core/response/handlers/ComputationalCallbackHandler.java
+++ b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/core/response/handlers/ComputationalCallbackHandler.java
@@ -25,7 +25,6 @@ import com.epam.dlab.dto.UserInstanceStatus;
import com.epam.dlab.dto.base.computational.ComputationalBase;
import com.epam.dlab.dto.computational.ComputationalStatusDTO;
import com.epam.dlab.rest.client.RESTService;
-import com.epam.dlab.rest.contracts.ApiCallbacks;
import com.fasterxml.jackson.annotation.JacksonInject;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
@@ -51,17 +50,20 @@ public class ComputationalCallbackHandler extends ResourceCallbackHandler<Comput
@JsonProperty
private final ComputationalBase<?> dto;
private ComputationalConfigure computationalConfigure;
+ private String callbackUri;
@JsonCreator
public ComputationalCallbackHandler(@JacksonInject ComputationalConfigure computationalConfigure,
@JacksonInject RESTService selfService,
@JsonProperty("action") DockerAction action,
@JsonProperty("uuid") String uuid,
- @JsonProperty("dto") ComputationalBase<?> dto) {
+ @JsonProperty("dto") ComputationalBase<?> dto,
+ String callbackUri) {
super(selfService, dto.getCloudSettings().getIamUser(), uuid, action);
this.computationalConfigure = computationalConfigure;
this.dto = dto;
+ this.callbackUri = callbackUri;
}
protected ComputationalBase<?> getDto() {
@@ -70,7 +72,7 @@ public class ComputationalCallbackHandler extends ResourceCallbackHandler<Comput
@Override
protected String getCallbackURI() {
- return ApiCallbacks.COMPUTATIONAL + ApiCallbacks.STATUS_URI;
+ return callbackUri;
}
@Override
diff --git a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/core/response/handlers/ComputationalConfigure.java b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/core/response/handlers/ComputationalConfigure.java
index adba483..16826b1 100644
--- a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/core/response/handlers/ComputationalConfigure.java
+++ b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/core/response/handlers/ComputationalConfigure.java
@@ -24,12 +24,14 @@ import com.epam.dlab.backendapi.core.Directories;
import com.epam.dlab.backendapi.core.FileHandlerCallback;
import com.epam.dlab.backendapi.core.commands.*;
import com.epam.dlab.backendapi.core.response.folderlistener.FolderListenerExecutor;
+import com.epam.dlab.backendapi.service.EndpointService;
import com.epam.dlab.dto.aws.computational.SparkComputationalCreateAws;
import com.epam.dlab.dto.base.DataEngineType;
import com.epam.dlab.dto.base.computational.ComputationalBase;
import com.epam.dlab.dto.gcp.computational.SparkComputationalCreateGcp;
import com.epam.dlab.exceptions.DlabException;
import com.epam.dlab.rest.client.RESTService;
+import com.epam.dlab.rest.contracts.ApiCallbacks;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import lombok.extern.slf4j.Slf4j;
@@ -49,6 +51,8 @@ public class ComputationalConfigure implements DockerCommands {
private CommandBuilder commandBuilder;
@Inject
private RESTService selfService;
+ @Inject
+ private EndpointService endpointService;
public String configure(String uuid, ComputationalBase<?> dto) {
switch (configuration.getCloudProvider()) {
@@ -79,7 +83,8 @@ public class ComputationalConfigure implements DockerCommands {
folderListenerExecutor.start(
configuration.getImagesDirectory(),
configuration.getResourceStatusPollTimeout(),
- getFileHandlerCallback(CONFIGURE, uuid, dto));
+ getFileHandlerCallback(CONFIGURE, uuid, dto, endpointService.getEndpointUrl(dto.getEndpoint()) +
+ ApiCallbacks.COMPUTATIONAL + ApiCallbacks.STATUS_URI));
try {
commandExecutor.executeAsync(
dto.getEdgeUserName(),
@@ -106,8 +111,8 @@ public class ComputationalConfigure implements DockerCommands {
}
private FileHandlerCallback getFileHandlerCallback(DockerAction action, String originalUuid, ComputationalBase<?>
- dto) {
- return new ComputationalConfigureCallbackHandler(selfService, action, originalUuid, dto);
+ dto, String callbackUri) {
+ return new ComputationalConfigureCallbackHandler(selfService, action, originalUuid, dto, callbackUri);
}
private String nameContainer(String user, DockerAction action, String exploratoryName, String name) {
diff --git a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/core/response/handlers/ComputationalConfigureCallbackHandler.java b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/core/response/handlers/ComputationalConfigureCallbackHandler.java
index c53c86e..aa4174e 100644
--- a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/core/response/handlers/ComputationalConfigureCallbackHandler.java
+++ b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/core/response/handlers/ComputationalConfigureCallbackHandler.java
@@ -36,19 +36,22 @@ public class ComputationalConfigureCallbackHandler extends ResourceCallbackHandl
@JsonProperty
private final ComputationalBase<?> dto;
+ private String callbackUri;
@JsonCreator
public ComputationalConfigureCallbackHandler(@JacksonInject RESTService selfService,
@JsonProperty("action") DockerAction action,
@JsonProperty("uuid") String uuid,
- @JsonProperty("dto") ComputationalBase<?> dto) {
+ @JsonProperty("dto") ComputationalBase<?> dto,
+ String callbackUri) {
super(selfService, dto.getCloudSettings().getIamUser(), uuid, action);
this.dto = dto;
+ this.callbackUri = callbackUri;
}
@Override
protected String getCallbackURI() {
- return ApiCallbacks.COMPUTATIONAL + ApiCallbacks.STATUS_URI;
+ return callbackUri;
}
@Override
diff --git a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/core/response/handlers/ExploratoryCallbackHandler.java b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/core/response/handlers/ExploratoryCallbackHandler.java
index 62746e8..0569690 100644
--- a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/core/response/handlers/ExploratoryCallbackHandler.java
+++ b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/core/response/handlers/ExploratoryCallbackHandler.java
@@ -35,9 +35,6 @@ import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.util.List;
-import static com.epam.dlab.rest.contracts.ApiCallbacks.EXPLORATORY;
-import static com.epam.dlab.rest.contracts.ApiCallbacks.STATUS_URI;
-
public class ExploratoryCallbackHandler extends ResourceCallbackHandler<ExploratoryStatusDTO> {
private static final Logger LOGGER = LoggerFactory.getLogger(ExploratoryCallbackHandler.class);
@@ -50,19 +47,22 @@ public class ExploratoryCallbackHandler extends ResourceCallbackHandler<Explorat
@JsonProperty
private final String exploratoryName;
+ private String callbackUri;
@JsonCreator
public ExploratoryCallbackHandler(@JacksonInject RESTService selfService,
@JsonProperty("action") DockerAction action,
@JsonProperty("uuid") String uuid, @JsonProperty("user") String user,
- @JsonProperty("exploratoryName") String exploratoryName) {
+ @JsonProperty("exploratoryName") String exploratoryName,
+ String callbackUri) {
super(selfService, user, uuid, action);
this.exploratoryName = exploratoryName;
+ this.callbackUri = callbackUri;
}
@Override
protected String getCallbackURI() {
- return EXPLORATORY + STATUS_URI;
+ return callbackUri;
}
@Override
diff --git a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/core/response/handlers/ExploratoryGitCredsCallbackHandler.java b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/core/response/handlers/ExploratoryGitCredsCallbackHandler.java
index b6857e5..9bfe366 100644
--- a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/core/response/handlers/ExploratoryGitCredsCallbackHandler.java
+++ b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/core/response/handlers/ExploratoryGitCredsCallbackHandler.java
@@ -35,20 +35,23 @@ public class ExploratoryGitCredsCallbackHandler extends ResourceCallbackHandler<
@JsonProperty
private final String exploratoryName;
+ private String callbackUri;
@JsonCreator
public ExploratoryGitCredsCallbackHandler(@JacksonInject RESTService selfService,
@JsonProperty("action") DockerAction action,
@JsonProperty("uuid") String uuid,
@JsonProperty("user") String user,
- @JsonProperty("exploratoryName") String exploratoryName) {
+ @JsonProperty("exploratoryName") String exploratoryName,
+ String callbackUri) {
super(selfService, user, uuid, action);
this.exploratoryName = exploratoryName;
+ this.callbackUri = callbackUri;
}
@Override
protected String getCallbackURI() {
- return ApiCallbacks.GIT_CREDS;
+ return callbackUri;
}
@Override
diff --git a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/core/response/handlers/ImageCreateCallbackHandler.java b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/core/response/handlers/ImageCreateCallbackHandler.java
index dbbc535..108aa26 100644
--- a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/core/response/handlers/ImageCreateCallbackHandler.java
+++ b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/core/response/handlers/ImageCreateCallbackHandler.java
@@ -44,14 +44,16 @@ public class ImageCreateCallbackHandler extends ResourceCallbackHandler<ImageCre
private final String project;
@JsonProperty
private final String endpoint;
+ private String callbackUri;
public ImageCreateCallbackHandler(RESTService selfService, String uuid, DockerAction action,
- ExploratoryImageDTO image) {
+ ExploratoryImageDTO image, String callbackUri) {
super(selfService, image.getCloudSettings().getIamUser(), uuid, action);
this.imageName = image.getImageName();
this.exploratoryName = image.getExploratoryName();
this.project = image.getProject();
this.endpoint = image.getEndpoint();
+ this.callbackUri = callbackUri;
}
@JsonCreator
@@ -72,7 +74,7 @@ public class ImageCreateCallbackHandler extends ResourceCallbackHandler<ImageCre
@Override
protected String getCallbackURI() {
- return ApiCallbacks.IMAGE_STATUS_URI;
+ return callbackUri;
}
@Override
diff --git a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/core/response/handlers/LibInstallCallbackHandler.java b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/core/response/handlers/LibInstallCallbackHandler.java
index a31fea3..947232b 100644
--- a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/core/response/handlers/LibInstallCallbackHandler.java
+++ b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/core/response/handlers/LibInstallCallbackHandler.java
@@ -26,7 +26,6 @@ import com.epam.dlab.dto.exploratory.LibInstallStatusDTO;
import com.epam.dlab.dto.exploratory.LibraryInstallDTO;
import com.epam.dlab.exceptions.DlabException;
import com.epam.dlab.rest.client.RESTService;
-import com.epam.dlab.rest.contracts.ApiCallbacks;
import com.fasterxml.jackson.annotation.JacksonInject;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
@@ -60,6 +59,7 @@ public class LibInstallCallbackHandler extends ResourceCallbackHandler<LibInstal
*/
@JsonProperty
private final LibraryInstallDTO dto;
+ private String callbackUri;
/**
* Instantiate handler for process of docker response for libraries installation.
@@ -74,14 +74,16 @@ public class LibInstallCallbackHandler extends ResourceCallbackHandler<LibInstal
@JacksonInject RESTService selfService,
@JsonProperty("action") DockerAction action,
@JsonProperty("uuid") String uuid, @JsonProperty("user") String user,
- @JsonProperty("dto") LibraryInstallDTO dto) {
+ @JsonProperty("dto") LibraryInstallDTO dto,
+ String callbackUri) {
super(selfService, user, uuid, action);
this.dto = dto;
+ this.callbackUri = callbackUri;
}
@Override
protected String getCallbackURI() {
- return ApiCallbacks.LIB_STATUS_URI;
+ return callbackUri;
}
@Override
diff --git a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/core/response/handlers/LibListCallbackHandler.java b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/core/response/handlers/LibListCallbackHandler.java
index ca0268c..b68d385 100644
--- a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/core/response/handlers/LibListCallbackHandler.java
+++ b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/core/response/handlers/LibListCallbackHandler.java
@@ -50,6 +50,7 @@ public class LibListCallbackHandler extends ResourceCallbackHandler<LibListStatu
*/
@JsonProperty
private final String imageName;
+ private String callbackUri;
/**
* Instantiate handler for process of docker response for list of libraries.
@@ -64,14 +65,16 @@ public class LibListCallbackHandler extends ResourceCallbackHandler<LibListStatu
public LibListCallbackHandler(
@JacksonInject RESTService selfService, @JsonProperty("action") DockerAction action,
@JsonProperty("uuid") String uuid, @JsonProperty("user") String user,
- @JsonProperty("imageName") String imageName) {
+ @JsonProperty("imageName") String imageName,
+ String callbackUri) {
super(selfService, user, uuid, action);
this.imageName = imageName;
+ this.callbackUri = callbackUri;
}
@Override
protected String getCallbackURI() {
- return ApiCallbacks.UPDATE_LIBS_URI;
+ return callbackUri;
}
@Override
diff --git a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/dao/BaseDAO.java b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/dao/BaseDAO.java
new file mode 100644
index 0000000..af23922
--- /dev/null
+++ b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/dao/BaseDAO.java
@@ -0,0 +1,111 @@
+/*
+ * 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.dao;
+
+import com.epam.dlab.exceptions.DlabException;
+import com.epam.dlab.mongo.MongoService;
+import com.epam.dlab.util.mongo.modules.IsoDateModule;
+import com.epam.dlab.util.mongo.modules.JavaPrimitiveModule;
+import com.epam.dlab.util.mongo.modules.MongoModule;
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.inject.Inject;
+import com.mongodb.MongoException;
+import com.mongodb.client.FindIterable;
+import com.mongodb.client.MongoCursor;
+import com.mongodb.client.MongoIterable;
+import lombok.extern.slf4j.Slf4j;
+import org.bson.Document;
+import org.bson.conversions.Bson;
+
+import java.io.IOException;
+import java.util.Date;
+import java.util.Optional;
+import java.util.UUID;
+
+@Slf4j
+public class BaseDAO {
+ public static final String ID = "_id";
+ public static final String TIMESTAMP = "timestamp";
+
+ private static final ObjectMapper MAPPER = new ObjectMapper()
+ .configure(JsonParser.Feature.AUTO_CLOSE_SOURCE, true)
+ .registerModule(new IsoDateModule())
+ .registerModule(new JavaPrimitiveModule())
+ .registerModule(new MongoModule());
+
+ @Inject
+ protected MongoService mongoService;
+
+ protected Optional<Document> findOne(String collection, Bson condition) {
+ FindIterable<Document> found = find(collection, condition);
+ return limitOne(found);
+ }
+
+ protected void insertOne(String collection, Object object) {
+ insertOne(collection, object, generateUUID());
+ }
+
+ protected FindIterable<Document> find(String collection) {
+ return mongoService.getCollection(collection).find();
+ }
+
+ private FindIterable<Document> find(String collection, Bson condition) {
+ return mongoService.getCollection(collection).find(condition);
+ }
+
+ private Optional<Document> limitOne(MongoIterable<Document> documents) {
+ Document first = documents.first();
+ try (MongoCursor<Document> iterator = documents.iterator()) {
+ if (iterator.hasNext()) {
+ iterator.next();
+ if (iterator.hasNext()) {
+ log.error("Too many items found while one is expected");
+ throw new DlabException("Too many items found while one is expected");
+ }
+ }
+ }
+ return Optional.ofNullable(first);
+ }
+
+ private void insertOne(String collection, Object object, String uuid) {
+ try {
+ mongoService.getCollection(collection)
+ .insertOne(convertToBson(object)
+ .append(ID, uuid)
+ .append(TIMESTAMP, new Date()));
+ } catch (MongoException e) {
+ log.error("Insert to Mongo DB fails: {}", e.getLocalizedMessage(), e);
+ throw new DlabException("Insert to Mongo DB fails: " + e.getLocalizedMessage(), e);
+ }
+ }
+
+ private Document convertToBson(Object object) {
+ try {
+ return Document.parse(MAPPER.writeValueAsString(object));
+ } catch (IOException e) {
+ throw new DlabException("error converting to bson", e);
+ }
+ }
+
+ private String generateUUID() {
+ return UUID.randomUUID().toString();
+ }
+}
diff --git a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/ProvisioningHealthCheckResource.java b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/dao/EndpointDAO.java
similarity index 51%
copy from services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/ProvisioningHealthCheckResource.java
copy to services/provisioning-service/src/main/java/com/epam/dlab/backendapi/dao/EndpointDAO.java
index e50d7ae..3ef5d68 100644
--- a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/ProvisioningHealthCheckResource.java
+++ b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/dao/EndpointDAO.java
@@ -17,30 +17,17 @@
* under the License.
*/
-package com.epam.dlab.backendapi.resources;
+package com.epam.dlab.backendapi.dao;
+import org.bson.Document;
-import com.epam.dlab.auth.UserInfo;
-import com.epam.dlab.backendapi.ProvisioningServiceApplicationConfiguration;
-import com.google.inject.Inject;
-import io.dropwizard.auth.Auth;
+import java.util.List;
+import java.util.Optional;
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
+public interface EndpointDAO {
+ Optional<Document> findOne(String name);
-@Path("/healthcheck")
-@Produces(MediaType.APPLICATION_JSON)
-public class ProvisioningHealthCheckResource {
- private static final String HEALTH_CHECK = "ProvisioningHealthCheck";
+ List<Document> findAll();
- @Inject
- private ProvisioningServiceApplicationConfiguration configuration;
-
- @GET
- public Response status(@Auth UserInfo ui) {
- return Response.ok(configuration.getCloudProvider()).build();
- }
-}
\ No newline at end of file
+ void create(String name, String url);
+}
diff --git a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/dao/impl/EndpointDAOImpl.java b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/dao/impl/EndpointDAOImpl.java
new file mode 100644
index 0000000..39aa9b0
--- /dev/null
+++ b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/dao/impl/EndpointDAOImpl.java
@@ -0,0 +1,54 @@
+/*
+ * 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.dao.impl;
+
+import com.epam.dlab.backendapi.dao.BaseDAO;
+import com.epam.dlab.backendapi.dao.EndpointDAO;
+import org.bson.Document;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+
+import static com.mongodb.client.model.Filters.eq;
+
+public class EndpointDAOImpl extends BaseDAO implements EndpointDAO {
+ private static final String SELFSERVICE_COLLECTION = "selfservice";
+ private static final String NAME = "name";
+ private static final String URL = "url";
+
+
+ @Override
+ public Optional<Document> findOne(String name) {
+ return findOne(SELFSERVICE_COLLECTION, eq(NAME, name));
+ }
+
+ @Override
+ public List<Document> findAll() {
+ return find(SELFSERVICE_COLLECTION).into(new ArrayList<>());
+ }
+
+ @Override
+ public void create(String name, String url) {
+ Document document = new Document(URL, url);
+ document.append(NAME, name);
+ insertOne(SELFSERVICE_COLLECTION, document);
+ }
+}
diff --git a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/modules/ProductionModule.java b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/modules/ProductionModule.java
index 40744fa..2b574f7 100644
--- a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/modules/ProductionModule.java
+++ b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/modules/ProductionModule.java
@@ -27,13 +27,18 @@ import com.epam.dlab.backendapi.core.commands.CommandExecutor;
import com.epam.dlab.backendapi.core.commands.ICommandExecutor;
import com.epam.dlab.backendapi.core.response.handlers.dao.CallbackHandlerDao;
import com.epam.dlab.backendapi.core.response.handlers.dao.FileSystemCallbackHandlerDao;
+import com.epam.dlab.backendapi.dao.EndpointDAO;
+import com.epam.dlab.backendapi.dao.impl.EndpointDAOImpl;
import com.epam.dlab.backendapi.service.CheckInactivityService;
+import com.epam.dlab.backendapi.service.EndpointService;
import com.epam.dlab.backendapi.service.ProjectService;
import com.epam.dlab.backendapi.service.RestoreCallbackHandlerService;
import com.epam.dlab.backendapi.service.impl.CheckInactivityServiceImpl;
+import com.epam.dlab.backendapi.service.impl.EndpointServiceImpl;
import com.epam.dlab.backendapi.service.impl.ProjectServiceImpl;
import com.epam.dlab.backendapi.service.impl.RestoreCallbackHandlerServiceImpl;
import com.epam.dlab.constants.ServiceConsts;
+import com.epam.dlab.mongo.MongoService;
import com.epam.dlab.rest.client.RESTService;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.ObjectMapper;
@@ -58,6 +63,7 @@ public class ProductionModule extends ModuleBase<ProvisioningServiceApplicationC
@Override
protected void configure() {
bind(ProvisioningServiceApplicationConfiguration.class).toInstance(configuration);
+ bind(MongoService.class).toInstance(configuration.getMongoFactory().build(environment));
bind(RESTService.class).annotatedWith(Names.named(ServiceConsts.SECURITY_SERVICE_NAME))
.toInstance(configuration.getSecurityFactory()
@@ -73,5 +79,7 @@ public class ProductionModule extends ModuleBase<ProvisioningServiceApplicationC
bind(RestoreCallbackHandlerService.class).to(RestoreCallbackHandlerServiceImpl.class);
bind(CheckInactivityService.class).to(CheckInactivityServiceImpl.class);
bind(ProjectService.class).to(ProjectServiceImpl.class);
+ bind(EndpointDAO.class).to(EndpointDAOImpl.class);
+ bind(EndpointService.class).to(EndpointServiceImpl.class);
}
}
diff --git a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/modules/ProvisioningDevModule.java b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/modules/ProvisioningDevModule.java
index 73d333f..e0957dd 100644
--- a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/modules/ProvisioningDevModule.java
+++ b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/modules/ProvisioningDevModule.java
@@ -30,14 +30,16 @@ import com.epam.dlab.backendapi.core.commands.CommandExecutorMock;
import com.epam.dlab.backendapi.core.commands.ICommandExecutor;
import com.epam.dlab.backendapi.core.response.handlers.dao.CallbackHandlerDao;
import com.epam.dlab.backendapi.core.response.handlers.dao.FileSystemCallbackHandlerDao;
-import com.epam.dlab.backendapi.service.ProjectService;
-import com.epam.dlab.backendapi.service.RestoreCallbackHandlerService;
-import com.epam.dlab.backendapi.service.CheckInactivityService;
+import com.epam.dlab.backendapi.dao.EndpointDAO;
+import com.epam.dlab.backendapi.dao.impl.EndpointDAOImpl;
+import com.epam.dlab.backendapi.service.*;
import com.epam.dlab.backendapi.service.RestoreCallbackHandlerService;
import com.epam.dlab.backendapi.service.impl.CheckInactivityServiceImpl;
+import com.epam.dlab.backendapi.service.impl.EndpointServiceImpl;
import com.epam.dlab.backendapi.service.impl.ProjectServiceImpl;
import com.epam.dlab.backendapi.service.impl.RestoreCallbackHandlerServiceImpl;
import com.epam.dlab.constants.ServiceConsts;
+import com.epam.dlab.mongo.MongoService;
import com.epam.dlab.rest.client.RESTService;
import com.epam.dlab.rest.contracts.DockerAPI;
import com.fasterxml.jackson.core.JsonParser;
@@ -69,6 +71,8 @@ public class ProvisioningDevModule extends ModuleBase<ProvisioningServiceApplica
@Override
protected void configure() {
bind(ProvisioningServiceApplicationConfiguration.class).toInstance(configuration);
+ bind(MongoService.class).toInstance(configuration.getMongoFactory().build(environment));
+
bind(RESTService.class).annotatedWith(Names.named(ServiceConsts.SECURITY_SERVICE_NAME)).toInstance
(createAuthenticationService());
bind(RESTService.class).toInstance(configuration.getSelfFactory().build(environment, ServiceConsts
@@ -80,6 +84,8 @@ public class ProvisioningDevModule extends ModuleBase<ProvisioningServiceApplica
bind(RestoreCallbackHandlerService.class).to(RestoreCallbackHandlerServiceImpl.class);
bind(CheckInactivityService.class).to(CheckInactivityServiceImpl.class);
bind(ProjectService.class).to(ProjectServiceImpl.class);
+ bind(EndpointDAO.class).to(EndpointDAOImpl.class);
+ bind(EndpointService.class).to(EndpointServiceImpl.class);
}
/**
diff --git a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/ProvisioningHealthCheckResource.java b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/EndpointResource.java
similarity index 57%
copy from services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/ProvisioningHealthCheckResource.java
copy to services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/EndpointResource.java
index e50d7ae..1a85d39 100644
--- a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/ProvisioningHealthCheckResource.java
+++ b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/EndpointResource.java
@@ -19,28 +19,44 @@
package com.epam.dlab.backendapi.resources;
-
import com.epam.dlab.auth.UserInfo;
import com.epam.dlab.backendapi.ProvisioningServiceApplicationConfiguration;
+import com.epam.dlab.backendapi.service.EndpointService;
import com.google.inject.Inject;
import io.dropwizard.auth.Auth;
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
+import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
-@Path("/healthcheck")
+@Path("infrastructure/endpoint")
+@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
-public class ProvisioningHealthCheckResource {
- private static final String HEALTH_CHECK = "ProvisioningHealthCheck";
+public class EndpointResource {
+ private final EndpointService endpointService;
+ private final ProvisioningServiceApplicationConfiguration configuration;
@Inject
- private ProvisioningServiceApplicationConfiguration configuration;
+ public EndpointResource(EndpointService endpointService, ProvisioningServiceApplicationConfiguration configuration) {
+ this.endpointService = endpointService;
+ this.configuration = configuration;
+ }
@GET
- public Response status(@Auth UserInfo ui) {
+ @Path("/healthcheck")
+ public Response status(@Auth UserInfo userInfo) {
+ return Response.ok().build();
+ }
+
+ @POST
+ public Response connectEndpoint(@Auth UserInfo userInfo, @Context HttpServletRequest request, String name) {
+ endpointService.create(name, request.getScheme() + "://" + request.getRemoteHost());
return Response.ok(configuration.getCloudProvider()).build();
}
-}
\ No newline at end of file
+}
diff --git a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/GitExploratoryResource.java b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/GitExploratoryResource.java
index 80a3d5b..0afeea4 100644
--- a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/GitExploratoryResource.java
+++ b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/GitExploratoryResource.java
@@ -26,10 +26,13 @@ import com.epam.dlab.backendapi.core.commands.DockerAction;
import com.epam.dlab.backendapi.core.commands.DockerCommands;
import com.epam.dlab.backendapi.core.commands.RunDockerCommand;
import com.epam.dlab.backendapi.core.response.handlers.ExploratoryGitCredsCallbackHandler;
+import com.epam.dlab.backendapi.service.EndpointService;
import com.epam.dlab.backendapi.service.impl.DockerService;
import com.epam.dlab.dto.exploratory.ExploratoryBaseDTO;
import com.epam.dlab.dto.exploratory.ExploratoryGitCredsUpdateDTO;
+import com.epam.dlab.rest.contracts.ApiCallbacks;
import com.fasterxml.jackson.core.JsonProcessingException;
+import com.google.inject.Inject;
import io.dropwizard.auth.Auth;
import lombok.extern.slf4j.Slf4j;
@@ -45,6 +48,9 @@ import javax.ws.rs.core.MediaType;
@Slf4j
public class GitExploratoryResource extends DockerService implements DockerCommands {
+ @Inject
+ private EndpointService endpointService;
+
@Path("/git_creds")
@POST
public String gitCredsUpdate(@Auth UserInfo ui, ExploratoryGitCredsUpdateDTO dto) throws JsonProcessingException {
@@ -56,7 +62,8 @@ public class GitExploratoryResource extends DockerService implements DockerComma
String uuid = DockerCommands.generateUUID();
folderListenerExecutor.start(configuration.getImagesDirectory(),
configuration.getResourceStatusPollTimeout(),
- getFileHandlerCallback(action, uuid, dto));
+ getFileHandlerCallback(action, uuid, dto, endpointService.getEndpointUrl(dto.getEndpoint()) +
+ ApiCallbacks.GIT_CREDS));
RunDockerCommand runDockerCommand = new RunDockerCommand()
.withInteractive()
@@ -74,8 +81,10 @@ public class GitExploratoryResource extends DockerService implements DockerComma
return uuid;
}
- private FileHandlerCallback getFileHandlerCallback(DockerAction action, String uuid, ExploratoryBaseDTO<?> dto) {
- return new ExploratoryGitCredsCallbackHandler(selfService, action, uuid, dto.getCloudSettings().getIamUser(), dto.getExploratoryName());
+ private FileHandlerCallback getFileHandlerCallback(DockerAction action, String uuid, ExploratoryBaseDTO<?> dto,
+ String callbackUri) {
+ return new ExploratoryGitCredsCallbackHandler(selfService, action, uuid, dto.getCloudSettings().getIamUser(),
+ dto.getExploratoryName(), callbackUri);
}
private String nameContainer(String user, DockerAction action, String name) {
diff --git a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/ImageResource.java b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/ImageResource.java
index b57f5b2..cccc600 100644
--- a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/ImageResource.java
+++ b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/ImageResource.java
@@ -25,10 +25,13 @@ import com.epam.dlab.backendapi.core.commands.DockerAction;
import com.epam.dlab.backendapi.core.commands.DockerCommands;
import com.epam.dlab.backendapi.core.commands.RunDockerCommand;
import com.epam.dlab.backendapi.core.response.handlers.ImageCreateCallbackHandler;
+import com.epam.dlab.backendapi.service.EndpointService;
import com.epam.dlab.backendapi.service.impl.DockerService;
import com.epam.dlab.dto.exploratory.ExploratoryImageDTO;
+import com.epam.dlab.rest.contracts.ApiCallbacks;
import com.epam.dlab.rest.contracts.ExploratoryAPI;
import com.fasterxml.jackson.core.JsonProcessingException;
+import com.google.inject.Inject;
import io.dropwizard.auth.Auth;
import lombok.extern.slf4j.Slf4j;
@@ -45,12 +48,16 @@ import javax.ws.rs.core.Response;
@Slf4j
public class ImageResource extends DockerService implements DockerCommands {
+ @Inject
+ private EndpointService endpointService;
+
@POST
public Response createImage(@Auth UserInfo ui, ExploratoryImageDTO image) throws JsonProcessingException {
final String uuid = DockerCommands.generateUUID();
folderListenerExecutor.start(configuration.getImagesDirectory(), configuration.getResourceStatusPollTimeout(),
- new ImageCreateCallbackHandler(selfService, uuid, DockerAction.CREATE_IMAGE, image));
+ new ImageCreateCallbackHandler(selfService, uuid, DockerAction.CREATE_IMAGE, image,
+ endpointService.getEndpointUrl(image.getEndpoint()) + ApiCallbacks.IMAGE_STATUS_URI));
String command = commandBuilder.buildCommand(getDockerCommand(DockerAction.CREATE_IMAGE, uuid, image), image);
commandExecutor.executeAsync(ui.getName(), uuid, command);
log.debug("Docker command: " + command);
diff --git a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/LibraryResource.java b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/LibraryResource.java
index 0e07d69..28bf9ae 100644
--- a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/LibraryResource.java
+++ b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/LibraryResource.java
@@ -27,15 +27,18 @@ import com.epam.dlab.backendapi.core.commands.DockerCommands;
import com.epam.dlab.backendapi.core.commands.RunDockerCommand;
import com.epam.dlab.backendapi.core.response.handlers.LibInstallCallbackHandler;
import com.epam.dlab.backendapi.core.response.handlers.LibListCallbackHandler;
+import com.epam.dlab.backendapi.service.EndpointService;
import com.epam.dlab.backendapi.service.impl.DockerService;
import com.epam.dlab.dto.LibListComputationalDTO;
import com.epam.dlab.dto.base.DataEngineType;
import com.epam.dlab.dto.exploratory.ExploratoryActionDTO;
import com.epam.dlab.dto.exploratory.ExploratoryBaseDTO;
import com.epam.dlab.dto.exploratory.LibraryInstallDTO;
+import com.epam.dlab.rest.contracts.ApiCallbacks;
import com.epam.dlab.rest.contracts.ComputationalAPI;
import com.epam.dlab.rest.contracts.ExploratoryAPI;
import com.fasterxml.jackson.core.JsonProcessingException;
+import com.google.inject.Inject;
import io.dropwizard.auth.Auth;
import lombok.extern.slf4j.Slf4j;
@@ -51,6 +54,8 @@ import javax.ws.rs.core.MediaType;
@Slf4j
public class LibraryResource extends DockerService implements DockerCommands {
+ @Inject
+ private EndpointService endpointService;
@POST
@Path(ExploratoryAPI.EXPLORATORY + "/lib_list")
@@ -81,7 +86,8 @@ public class LibraryResource extends DockerService implements DockerCommands {
String uuid = DockerCommands.generateUUID();
folderListenerExecutor.start(configuration.getImagesDirectory(),
configuration.getResourceStatusPollTimeout(),
- getFileHandlerCallbackExploratory(action, uuid, dto));
+ getFileHandlerCallbackExploratory(action, uuid, dto, endpointService.getEndpointUrl(dto.getEndpoint()) +
+ ApiCallbacks.LIB_STATUS_URI));
RunDockerCommand runDockerCommand = getDockerCommandExploratory(dto, action, uuid);
@@ -94,7 +100,8 @@ public class LibraryResource extends DockerService implements DockerCommands {
String uuid = DockerCommands.generateUUID();
folderListenerExecutor.start(configuration.getImagesDirectory(),
configuration.getResourceStatusPollTimeout(),
- getFileHandlerCallbackComputational(action, uuid, dto));
+ getFileHandlerCallbackComputational(action, uuid, dto, endpointService.getEndpointUrl(dto.getEndpoint()) +
+ ApiCallbacks.LIB_STATUS_URI));
RunDockerCommand runDockerCommand = getDockerCommandComputational(dto, action, uuid);
@@ -149,29 +156,28 @@ public class LibraryResource extends DockerService implements DockerCommands {
}
private FileHandlerCallback getFileHandlerCallbackExploratory(DockerAction action, String uuid,
- ExploratoryBaseDTO<?> dto) {
+ ExploratoryBaseDTO<?> dto, String callbackUri) {
switch (action) {
- case LIB_INSTALL:
- return new LibInstallCallbackHandler(selfService, action, uuid,
- dto.getCloudSettings().getIamUser(),
- (LibraryInstallDTO) dto);
case LIB_LIST:
return new LibListCallbackHandler(selfService, DockerAction.LIB_LIST, uuid,
- dto.getCloudSettings().getIamUser(), dto.getNotebookImage());
+ dto.getCloudSettings().getIamUser(), dto.getNotebookImage(), callbackUri);
+ case LIB_INSTALL:
+ return new LibInstallCallbackHandler(selfService, action, uuid, dto.getCloudSettings().getIamUser(),
+ (LibraryInstallDTO) dto, callbackUri);
default:
throw new IllegalArgumentException("Unknown action " + action);
}
}
private FileHandlerCallback getFileHandlerCallbackComputational(DockerAction action, String uuid,
- ExploratoryBaseDTO<?> dto) {
+ ExploratoryBaseDTO<?> dto, String callbackUri) {
switch (action) {
case LIB_LIST:
- return new LibListCallbackHandler(selfService, action, uuid,
- dto.getCloudSettings().getIamUser(), ((LibListComputationalDTO) dto).getLibCacheKey());
+ return new LibListCallbackHandler(selfService, action, uuid, dto.getCloudSettings().getIamUser(),
+ ((LibListComputationalDTO) dto).getLibCacheKey(), callbackUri);
case LIB_INSTALL:
- return new LibInstallCallbackHandler(selfService, action, uuid,
- dto.getCloudSettings().getIamUser(), ((LibraryInstallDTO) dto));
+ return new LibInstallCallbackHandler(selfService, action, uuid, dto.getCloudSettings().getIamUser(),
+ ((LibraryInstallDTO) dto), callbackUri);
default:
throw new IllegalArgumentException("Unknown action " + action);
diff --git a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/aws/ComputationalResourceAws.java b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/aws/ComputationalResourceAws.java
index 8e8730c..932848f 100644
--- a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/aws/ComputationalResourceAws.java
+++ b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/aws/ComputationalResourceAws.java
@@ -27,6 +27,7 @@ import com.epam.dlab.backendapi.core.commands.DockerCommands;
import com.epam.dlab.backendapi.core.commands.RunDockerCommand;
import com.epam.dlab.backendapi.core.response.handlers.ComputationalCallbackHandler;
import com.epam.dlab.backendapi.core.response.handlers.ComputationalConfigure;
+import com.epam.dlab.backendapi.service.EndpointService;
import com.epam.dlab.backendapi.service.impl.DockerService;
import com.epam.dlab.backendapi.service.impl.SparkClusterService;
import com.epam.dlab.dto.aws.computational.AwsComputationalTerminateDTO;
@@ -38,6 +39,7 @@ import com.epam.dlab.dto.computational.ComputationalClusterConfigDTO;
import com.epam.dlab.dto.computational.ComputationalStartDTO;
import com.epam.dlab.dto.computational.ComputationalStopDTO;
import com.epam.dlab.exceptions.DlabException;
+import com.epam.dlab.rest.contracts.ApiCallbacks;
import com.epam.dlab.rest.contracts.ComputationalAPI;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.google.inject.Inject;
@@ -64,15 +66,19 @@ public class ComputationalResourceAws extends DockerService implements DockerCom
private ComputationalConfigure computationalConfigure;
@Inject
private SparkClusterService sparkClusterService;
+ @Inject
+ private EndpointService endpointService;
@POST
@Path(ComputationalAPI.COMPUTATIONAL_CREATE_CLOUD_SPECIFIC)
public String create(@Auth UserInfo ui, ComputationalCreateAws dto) {
log.debug("Create computational resources {} for user {}: {}", dto.getComputationalName(), ui.getName(), dto);
String uuid = DockerCommands.generateUUID();
+
folderListenerExecutor.start(configuration.getImagesDirectory(),
configuration.getResourceStatusPollTimeout(),
- getFileHandlerCallback(CREATE, uuid, dto));
+ getFileHandlerCallback(CREATE, uuid, dto, endpointService.getEndpointUrl(dto.getEndpoint()) +
+ ApiCallbacks.COMPUTATIONAL + ApiCallbacks.STATUS_URI));
try {
long timeout = configuration.getResourceStatusPollTimeout().toSeconds();
commandExecutor.executeAsync(
@@ -111,7 +117,8 @@ public class ComputationalResourceAws extends DockerService implements DockerCom
String uuid = DockerCommands.generateUUID();
folderListenerExecutor.start(configuration.getImagesDirectory(),
configuration.getResourceStatusPollTimeout(),
- getFileHandlerCallback(TERMINATE, uuid, dto));
+ getFileHandlerCallback(TERMINATE, uuid, dto, endpointService.getEndpointUrl(dto.getEndpoint()) +
+ ApiCallbacks.COMPUTATIONAL + ApiCallbacks.STATUS_URI));
try {
commandExecutor.executeAsync(
ui.getName(),
@@ -183,8 +190,9 @@ public class ComputationalResourceAws extends DockerService implements DockerCom
return sparkClusterService.updateConfig(ui, config);
}
- private FileHandlerCallback getFileHandlerCallback(DockerAction action, String uuid, ComputationalBase<?> dto) {
- return new ComputationalCallbackHandler(computationalConfigure, selfService, action, uuid, dto);
+ private FileHandlerCallback getFileHandlerCallback(DockerAction action, String uuid, ComputationalBase<?> dto,
+ String callbackUri) {
+ return new ComputationalCallbackHandler(computationalConfigure, selfService, action, uuid, dto, callbackUri);
}
private String nameContainer(String user, DockerAction action, String exploratoryName, String name) {
diff --git a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/base/ExploratoryService.java b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/base/ExploratoryService.java
index c25f484..a59442c 100644
--- a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/base/ExploratoryService.java
+++ b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/base/ExploratoryService.java
@@ -25,20 +25,27 @@ import com.epam.dlab.backendapi.core.commands.DockerAction;
import com.epam.dlab.backendapi.core.commands.DockerCommands;
import com.epam.dlab.backendapi.core.commands.RunDockerCommand;
import com.epam.dlab.backendapi.core.response.handlers.ExploratoryCallbackHandler;
+import com.epam.dlab.backendapi.service.EndpointService;
import com.epam.dlab.backendapi.service.impl.DockerService;
import com.epam.dlab.dto.exploratory.ExploratoryBaseDTO;
+import com.epam.dlab.rest.contracts.ApiCallbacks;
import com.fasterxml.jackson.core.JsonProcessingException;
+import com.google.inject.Inject;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class ExploratoryService extends DockerService implements DockerCommands {
+ @Inject
+ private EndpointService endpointService;
+
public String action(String username, ExploratoryBaseDTO<?> dto, DockerAction action) throws JsonProcessingException {
log.debug("{} exploratory environment", action);
String uuid = DockerCommands.generateUUID();
folderListenerExecutor.start(configuration.getImagesDirectory(),
configuration.getResourceStatusPollTimeout(),
- getFileHandlerCallback(action, uuid, dto));
+ getFileHandlerCallback(action, uuid, dto, endpointService.getEndpointUrl(dto.getEndpoint()) +
+ ApiCallbacks.EXPLORATORY + ApiCallbacks.STATUS_URI));
RunDockerCommand runDockerCommand = new RunDockerCommand()
.withInteractive()
@@ -60,9 +67,10 @@ public class ExploratoryService extends DockerService implements DockerCommands
return Directories.NOTEBOOK_LOG_DIRECTORY;
}
- private FileHandlerCallback getFileHandlerCallback(DockerAction action, String uuid, ExploratoryBaseDTO<?> dto) {
+ private FileHandlerCallback getFileHandlerCallback(DockerAction action, String uuid, ExploratoryBaseDTO<?> dto,
+ String callbackUri) {
return new ExploratoryCallbackHandler(selfService, action, uuid, dto.getCloudSettings().getIamUser(),
- dto.getExploratoryName());
+ dto.getExploratoryName(), callbackUri);
}
private String nameContainer(String user, DockerAction action, String name) {
diff --git a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/gcp/ComputationalResourceGcp.java b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/gcp/ComputationalResourceGcp.java
index 0db357b..06efd9f 100644
--- a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/gcp/ComputationalResourceGcp.java
+++ b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/gcp/ComputationalResourceGcp.java
@@ -27,6 +27,7 @@ import com.epam.dlab.backendapi.core.commands.DockerCommands;
import com.epam.dlab.backendapi.core.commands.RunDockerCommand;
import com.epam.dlab.backendapi.core.response.handlers.ComputationalCallbackHandler;
import com.epam.dlab.backendapi.core.response.handlers.ComputationalConfigure;
+import com.epam.dlab.backendapi.service.EndpointService;
import com.epam.dlab.backendapi.service.impl.DockerService;
import com.epam.dlab.backendapi.service.impl.SparkClusterService;
import com.epam.dlab.dto.base.DataEngineType;
@@ -38,6 +39,7 @@ 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.exceptions.DlabException;
+import com.epam.dlab.rest.contracts.ApiCallbacks;
import com.epam.dlab.rest.contracts.ComputationalAPI;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.google.inject.Inject;
@@ -64,6 +66,8 @@ public class ComputationalResourceGcp extends DockerService implements DockerCom
private ComputationalConfigure computationalConfigure;
@Inject
private SparkClusterService sparkClusterService;
+ @Inject
+ private EndpointService endpointService;
@POST
@Path(ComputationalAPI.COMPUTATIONAL_CREATE_CLOUD_SPECIFIC)
@@ -72,7 +76,8 @@ public class ComputationalResourceGcp extends DockerService implements DockerCom
String uuid = DockerCommands.generateUUID();
folderListenerExecutor.start(configuration.getImagesDirectory(),
configuration.getResourceStatusPollTimeout(),
- getFileHandlerCallback(CREATE, uuid, dto));
+ getFileHandlerCallback(CREATE, uuid, dto, endpointService.getEndpointUrl(dto.getEndpoint()) +
+ ApiCallbacks.COMPUTATIONAL + ApiCallbacks.STATUS_URI));
try {
commandExecutor.executeAsync(
ui.getName(),
@@ -108,7 +113,8 @@ public class ComputationalResourceGcp extends DockerService implements DockerCom
String uuid = DockerCommands.generateUUID();
folderListenerExecutor.start(configuration.getImagesDirectory(),
configuration.getResourceStatusPollTimeout(),
- getFileHandlerCallback(TERMINATE, uuid, dto));
+ getFileHandlerCallback(TERMINATE, uuid, dto, endpointService.getEndpointUrl(dto.getEndpoint()) +
+ ApiCallbacks.COMPUTATIONAL + ApiCallbacks.STATUS_URI));
try {
commandExecutor.executeAsync(
ui.getName(),
@@ -182,8 +188,9 @@ public class ComputationalResourceGcp extends DockerService implements DockerCom
return sparkClusterService.updateConfig(ui, config);
}
- private FileHandlerCallback getFileHandlerCallback(DockerAction action, String uuid, ComputationalBase<?> dto) {
- return new ComputationalCallbackHandler(computationalConfigure, selfService, action, uuid, dto);
+ private FileHandlerCallback getFileHandlerCallback(DockerAction action, String uuid, ComputationalBase<?> dto,
+ String callbackUri) {
+ return new ComputationalCallbackHandler(computationalConfigure, selfService, action, uuid, dto, callbackUri);
}
private String nameContainer(String user, DockerAction action, String exploratoryName, String name) {
diff --git a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/ProvisioningHealthCheckResource.java b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/EndpointService.java
similarity index 51%
rename from services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/ProvisioningHealthCheckResource.java
rename to services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/EndpointService.java
index e50d7ae..7bbd25a 100644
--- a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/ProvisioningHealthCheckResource.java
+++ b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/EndpointService.java
@@ -17,30 +17,10 @@
* under the License.
*/
-package com.epam.dlab.backendapi.resources;
+package com.epam.dlab.backendapi.service;
+public interface EndpointService {
+ String getEndpointUrl(String name);
-import com.epam.dlab.auth.UserInfo;
-import com.epam.dlab.backendapi.ProvisioningServiceApplicationConfiguration;
-import com.google.inject.Inject;
-import io.dropwizard.auth.Auth;
-
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-
-@Path("/healthcheck")
-@Produces(MediaType.APPLICATION_JSON)
-public class ProvisioningHealthCheckResource {
- private static final String HEALTH_CHECK = "ProvisioningHealthCheck";
-
- @Inject
- private ProvisioningServiceApplicationConfiguration configuration;
-
- @GET
- public Response status(@Auth UserInfo ui) {
- return Response.ok(configuration.getCloudProvider()).build();
- }
-}
\ No newline at end of file
+ void create(String name, String url);
+}
diff --git a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/EndpointServiceImpl.java b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/EndpointServiceImpl.java
new file mode 100644
index 0000000..650ac0d
--- /dev/null
+++ b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/EndpointServiceImpl.java
@@ -0,0 +1,62 @@
+/*
+ * 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.service.impl;
+
+import com.epam.dlab.backendapi.dao.EndpointDAO;
+import com.epam.dlab.backendapi.service.EndpointService;
+import com.epam.dlab.exceptions.DlabException;
+import com.google.inject.Inject;
+import lombok.extern.slf4j.Slf4j;
+import org.bson.Document;
+
+import java.util.List;
+
+@Slf4j
+public class EndpointServiceImpl implements EndpointService {
+ private static final String URL = "url";
+ private final EndpointDAO endpointDAO;
+
+ @Inject
+ public EndpointServiceImpl(EndpointDAO endpointDAO) {
+ this.endpointDAO = endpointDAO;
+ }
+
+ @Override
+ public String getEndpointUrl(String name) {
+ return (String) getOrError(name).get(URL);
+ }
+
+ @Override
+ public void create(String name, String url) {
+ List<Document> all = endpointDAO.findAll();
+ if (all.isEmpty()) {
+ endpointDAO.create(name, url);
+ log.debug("Successfully created connection with selfservice url: {}", url);
+ } else {
+ log.error("Endpoint is already connected, excising {}, url {}", all, url);
+ throw new DlabException("Endpoint is already connected");
+ }
+ }
+
+ private Document getOrError(String name) {
+ return endpointDAO.findOne(name).orElseThrow(() ->
+ new DlabException("Cannot find selfservice endpoint url with name " + name));
+ }
+}
diff --git a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/ProjectServiceImpl.java b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/ProjectServiceImpl.java
index 47c4dee..24b68fc 100644
--- a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/ProjectServiceImpl.java
+++ b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/ProjectServiceImpl.java
@@ -5,6 +5,7 @@ import com.epam.dlab.backendapi.ProvisioningServiceApplicationConfiguration;
import com.epam.dlab.backendapi.core.commands.*;
import com.epam.dlab.backendapi.core.response.folderlistener.FolderListenerExecutor;
import com.epam.dlab.backendapi.core.response.handlers.ProjectCallbackHandler;
+import com.epam.dlab.backendapi.service.EndpointService;
import com.epam.dlab.backendapi.service.ProjectService;
import com.epam.dlab.cloud.CloudProvider;
import com.epam.dlab.dto.ResourceBaseDTO;
@@ -33,6 +34,8 @@ public class ProjectServiceImpl implements ProjectService {
private ICommandExecutor commandExecutor;
@Inject
private CommandBuilder commandBuilder;
+ @Inject
+ private EndpointService endpointService;
@Override
public String create(UserInfo userInfo, ProjectCreateDTO dto) {
@@ -60,10 +63,12 @@ public class ProjectServiceImpl implements ProjectService {
String resourceType, String image, String endpoint) {
String uuid = DockerCommands.generateUUID();
+ log.debug(endpointService.getEndpointUrl(endpoint) + CALLBACK_URI);
folderListenerExecutor.start(configuration.getKeyLoaderDirectory(),
configuration.getKeyLoaderPollTimeout(),
new ProjectCallbackHandler(selfService, userInfo.getName(), uuid,
- action, CALLBACK_URI, projectName, getEdgeClass(), endpoint));
+ action, endpointService.getEndpointUrl(endpoint) + CALLBACK_URI, projectName,
+ getEdgeClass(), endpoint));
RunDockerCommand runDockerCommand = new RunDockerCommand()
.withInteractive()
diff --git a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/SparkClusterService.java b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/SparkClusterService.java
index a773b70..22d6698 100644
--- a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/SparkClusterService.java
+++ b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/SparkClusterService.java
@@ -27,6 +27,7 @@ import com.epam.dlab.backendapi.core.commands.DockerCommands;
import com.epam.dlab.backendapi.core.commands.RunDockerCommand;
import com.epam.dlab.backendapi.core.response.handlers.ComputationalCallbackHandler;
import com.epam.dlab.backendapi.core.response.handlers.ComputationalConfigure;
+import com.epam.dlab.backendapi.service.EndpointService;
import com.epam.dlab.dto.base.DataEngineType;
import com.epam.dlab.dto.base.computational.ComputationalBase;
import com.epam.dlab.dto.computational.ComputationalClusterConfigDTO;
@@ -34,6 +35,7 @@ import com.epam.dlab.dto.computational.ComputationalStartDTO;
import com.epam.dlab.dto.computational.ComputationalStopDTO;
import com.epam.dlab.dto.computational.ComputationalTerminateDTO;
import com.epam.dlab.exceptions.DlabException;
+import com.epam.dlab.rest.contracts.ApiCallbacks;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.google.inject.Inject;
import com.google.inject.Singleton;
@@ -47,6 +49,8 @@ public class SparkClusterService extends DockerService implements DockerCommands
@Inject
private ComputationalConfigure computationalConfigure;
+ @Inject
+ private EndpointService endpointService;
public String create(UserInfo ui, ComputationalBase<?> dto) {
return action(ui, dto, CREATE);
@@ -68,7 +72,8 @@ public class SparkClusterService extends DockerService implements DockerCommands
String uuid = DockerCommands.generateUUID();
folderListenerExecutor.start(configuration.getImagesDirectory(),
configuration.getResourceStatusPollTimeout(),
- getFileHandlerCallback(RECONFIGURE_SPARK, uuid, clusterConfigDTO));
+ getFileHandlerCallback(RECONFIGURE_SPARK, uuid, clusterConfigDTO, endpointService.getEndpointUrl(
+ clusterConfigDTO.getEndpoint()) + ApiCallbacks.COMPUTATIONAL + ApiCallbacks.STATUS_URI));
runReconfigureSparkDockerCommand(ui, clusterConfigDTO, uuid);
return uuid;
}
@@ -101,7 +106,8 @@ public class SparkClusterService extends DockerService implements DockerCommands
String uuid = DockerCommands.generateUUID();
folderListenerExecutor.start(configuration.getImagesDirectory(),
configuration.getResourceStatusPollTimeout(),
- getFileHandlerCallback(action, uuid, dto));
+ getFileHandlerCallback(action, uuid, dto, endpointService.getEndpointUrl(dto.getEndpoint()) +
+ ApiCallbacks.COMPUTATIONAL + ApiCallbacks.STATUS_URI));
try {
final RunDockerCommand dockerCommand = new RunDockerCommand()
.withInteractive()
@@ -124,8 +130,9 @@ public class SparkClusterService extends DockerService implements DockerCommands
return uuid;
}
- private FileHandlerCallback getFileHandlerCallback(DockerAction action, String uuid, ComputationalBase<?> dto) {
- return new ComputationalCallbackHandler(computationalConfigure, selfService, action, uuid, dto);
+ private FileHandlerCallback getFileHandlerCallback(DockerAction action, String uuid, ComputationalBase<?> dto,
+ String callbackUri) {
+ return new ComputationalCallbackHandler(computationalConfigure, selfService, action, uuid, dto, callbackUri);
}
private String nameContainer(String user, DockerAction action, String exploratoryName, String name) {
diff --git a/services/provisioning-service/src/test/java/com/epam/dlab/backendapi/core/commands/CommandExecutorMockTest.java b/services/provisioning-service/src/test/java/com/epam/dlab/backendapi/core/commands/CommandExecutorMockTest.java
index bf92609..773f4e3 100644
--- a/services/provisioning-service/src/test/java/com/epam/dlab/backendapi/core/commands/CommandExecutorMockTest.java
+++ b/services/provisioning-service/src/test/java/com/epam/dlab/backendapi/core/commands/CommandExecutorMockTest.java
@@ -70,7 +70,7 @@ public class CommandExecutorMockTest {
RESTServiceMock selfService = new RESTServiceMock();
ExploratoryCallbackHandler handler = new ExploratoryCallbackHandler(selfService, action,
- getRequestId(exec), getEdgeUserName(exec), getExploratoryName(exec));
+ getRequestId(exec), getEdgeUserName(exec), getExploratoryName(exec), "someCallbackUri");
handler.handle(exec.getResponseFileName(), Files.readAllBytes(Paths.get(exec.getResponseFileName())));
try {
@@ -98,7 +98,7 @@ public class CommandExecutorMockTest {
getRequestId(exec), getEdgeUserName(exec), getExploratoryName(exec));
*/
ResourceCallbackHandler<?> handler = new LibListCallbackHandler(selfService, action, getRequestId(exec),
- getEdgeUserName(exec), getExploratoryName(exec));
+ getEdgeUserName(exec), getExploratoryName(exec), "someCallbackUri");
handler.handle(exec.getResponseFileName(), Files.readAllBytes(Paths.get(exec.getResponseFileName())));
diff --git a/services/provisioning-service/src/test/java/com/epam/dlab/backendapi/core/response/handlers/dao/FileSystemCallbackHandlerDaoTest.java b/services/provisioning-service/src/test/java/com/epam/dlab/backendapi/core/response/handlers/dao/FileSystemCallbackHandlerDaoTest.java
index 0dc3663..dc6377c 100644
--- a/services/provisioning-service/src/test/java/com/epam/dlab/backendapi/core/response/handlers/dao/FileSystemCallbackHandlerDaoTest.java
+++ b/services/provisioning-service/src/test/java/com/epam/dlab/backendapi/core/response/handlers/dao/FileSystemCallbackHandlerDaoTest.java
@@ -76,7 +76,8 @@ public class FileSystemCallbackHandlerDaoTest {
when(mapper.writeValueAsBytes(any())).thenReturn("{'test': 'test'}".getBytes());
final PersistentFileHandler persistentFileHandler =
new PersistentFileHandler(new LibListCallbackHandler(null,
- DockerAction.LIB_LIST, "uuid", "test", "das"), 1L, "/opt/test");
+ DockerAction.LIB_LIST, "uuid", "test", "das", "someCallbackUri"),
+ 1L, "/opt/test");
fileSystemCallbackHandlerDao.upsert(persistentFileHandler);
@@ -95,10 +96,12 @@ public class FileSystemCallbackHandlerDaoTest {
.new DockerFileHandlerCallback("sameUUID"), 1L, "/opt/test");
final PersistentFileHandler persistentFileHandler2 =
new PersistentFileHandler(new LibListCallbackHandler(null,
- DockerAction.LIB_LIST, "sameUUID", "test", "das1"), 1L, "/opt/test");
+ DockerAction.LIB_LIST, "sameUUID", "test", "das1", "someCallbackUri"),
+ 1L, "/opt/test");
final PersistentFileHandler persistentFileHandler3 =
new PersistentFileHandler(new LibListCallbackHandler(null,
- DockerAction.LIB_LIST, "anotherUUID", "test", "das2"), 1L, "/opt/test");
+ DockerAction.LIB_LIST, "anotherUUID", "test", "das2", "someCallbackUri"),
+ 1L, "/opt/test");
fileSystemCallbackHandlerDao.upsert(persistentFileHandler1);
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/dropwizard/listeners/MongoStartupListener.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/dropwizard/listeners/MongoStartupListener.java
index d83bfe7..eb9c553 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/dropwizard/listeners/MongoStartupListener.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/dropwizard/listeners/MongoStartupListener.java
@@ -29,8 +29,8 @@ public class MongoStartupListener implements ServerLifecycleListener {
private final SettingsDAO settingsDAO;
@Inject
- public MongoStartupListener(UserRoleDao userRoleDao,
- SelfServiceApplicationConfiguration configuration, SettingsDAO settingsDAO) {
+ public MongoStartupListener(UserRoleDao userRoleDao, SelfServiceApplicationConfiguration configuration,
+ SettingsDAO settingsDAO) {
this.userRoleDao = userRoleDao;
this.configuration = configuration;
this.settingsDAO = settingsDAO;
@@ -50,8 +50,7 @@ public class MongoStartupListener implements ServerLifecycleListener {
}
private List<UserRoleDto> getRoles() {
- try (InputStream is = getClass().getResourceAsStream(format(ROLES_FILE_FORMAT,
- configuration.getCloudProvider().getName()))) {
+ try (InputStream is = getClass().getResourceAsStream(format(ROLES_FILE_FORMAT, CloudProvider.AWS.getName()))) {
return MAPPER.readValue(is, new TypeReference<List<UserRoleDto>>() {
});
} catch (IOException e) {
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/modules/ModuleFactory.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/modules/ModuleFactory.java
index 7ab2ac0..4ca089f 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/modules/ModuleFactory.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/modules/ModuleFactory.java
@@ -49,16 +49,16 @@ public class ModuleFactory {
return new CloudProviderModule();
}
- private static CloudModule getCloudModule(SelfServiceApplicationConfiguration configuration) {
- switch (configuration.getCloudProvider()) {
- case AWS:
- return new AwsSelfServiceModule();
- case AZURE:
- return new AzureSelfServiceModule();
- case GCP:
- return new GcpSelfServiceModule();
- default:
- throw new UnsupportedOperationException("Unsupported cloud provider " + configuration.getCloudProvider());
- }
- }
+// private static CloudModule getCloudModule(SelfServiceApplicationConfiguration configuration) {
+// switch (configuration.getCloudProvider()) {
+// case AWS:
+// return new AwsSelfServiceModule();
+// case AZURE:
+// return new AzureSelfServiceModule();
+// case GCP:
+// return new GcpSelfServiceModule();
+// default:
+// throw new UnsupportedOperationException("Unsupported cloud provider " + configuration.getCloudProvider());
+// }
+// }
}
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/EndpointResource.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/EndpointResource.java
index 71873eb..6707571 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/EndpointResource.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/EndpointResource.java
@@ -153,7 +153,7 @@ public class EndpointResource {
public Response checkEndpointUrl(@Parameter(hidden = true) @Auth UserInfo userInfo,
@Parameter(description = "Endpoint url")
@PathParam("url") String url) {
- endpointService.checkEndpointUrl(userInfo, url);
+ endpointService.checkUrl(userInfo, url);
return Response.ok().build();
}
}
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/schedulers/endpoint/CheckEndpointStatusScheduler.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/schedulers/endpoint/CheckEndpointStatusScheduler.java
index 658370a..2f34688 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/schedulers/endpoint/CheckEndpointStatusScheduler.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/schedulers/endpoint/CheckEndpointStatusScheduler.java
@@ -49,7 +49,7 @@ public class CheckEndpointStatusScheduler implements Job {
private boolean checkUrl(UserInfo serviceUser, EndpointDTO endpoint) {
try {
- endpointService.checkEndpointUrl(serviceUser, endpoint.getUrl());
+ endpointService.checkUrl(serviceUser, endpoint.getUrl());
} catch (Exception e) {
return true;
}
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/EndpointService.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/EndpointService.java
index dde3547..9ad6bfe 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/EndpointService.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/EndpointService.java
@@ -4,7 +4,6 @@ import com.epam.dlab.auth.UserInfo;
import com.epam.dlab.backendapi.domain.EndpointDTO;
import com.epam.dlab.backendapi.domain.EndpointResourcesDTO;
import com.epam.dlab.backendapi.domain.ProjectDTO;
-import com.epam.dlab.cloud.CloudProvider;
import java.util.List;
@@ -25,5 +24,5 @@ public interface EndpointService {
void removeEndpointInAllProjects(UserInfo userInfo, String endpointName, List<ProjectDTO> projects);
- CloudProvider checkEndpointUrl(UserInfo userInfo, String url);
+ void checkUrl(UserInfo userInfo, String url);
}
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/EndpointServiceImpl.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/EndpointServiceImpl.java
index 812c21b..6c70927 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/EndpointServiceImpl.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/EndpointServiceImpl.java
@@ -24,10 +24,12 @@ import javax.ws.rs.core.Response;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
+import java.util.Objects;
@Slf4j
public class EndpointServiceImpl implements EndpointService {
- private static final String HEALTH_CHECK = "healthcheck";
+ private static final String ENDPOINT = "infrastructure/endpoint";
+ private static final String HEALTH_CHECK = "infrastructure/endpoint/healthcheck";
private final EndpointDAO endpointDAO;
private final ProjectService projectService;
private final ExploratoryDAO exploratoryDAO;
@@ -71,8 +73,11 @@ public class EndpointServiceImpl implements EndpointService {
@Override
public void create(UserInfo userInfo, EndpointDTO endpointDTO) {
- CloudProvider cloudProvider = checkEndpointUrl(userInfo, endpointDTO.getUrl());
if (!endpointDAO.get(endpointDTO.getName()).isPresent()) {
+ CloudProvider cloudProvider = connectEndpoint(userInfo, endpointDTO.getUrl(), endpointDTO.getName());
+ if (!Objects.nonNull(cloudProvider)) {
+ throw new DlabException("CloudProvider cannot be null");
+ }
endpointDAO.create(new EndpointDTO(endpointDTO.getName(), endpointDTO.getUrl(), endpointDTO.getAccount(),
endpointDTO.getTag(), EndpointDTO.EndpointStatus.ACTIVE, cloudProvider));
} else {
@@ -102,12 +107,10 @@ public class EndpointServiceImpl implements EndpointService {
}
@Override
- public CloudProvider checkEndpointUrl(UserInfo userInfo, String url) {
+ public void checkUrl(UserInfo userInfo, String url) {
Response response;
- CloudProvider cloudProvider;
try {
response = provisioningService.get(url + HEALTH_CHECK, userInfo.getAccessToken(), Response.class);
- cloudProvider = response.readEntity(CloudProvider.class);
} catch (Exception e) {
log.error("Cannot connect to url '{}'", url);
throw new DlabException(String.format("Cannot connect to url '%s'", url), e);
@@ -116,6 +119,22 @@ public class EndpointServiceImpl implements EndpointService {
log.warn("Endpoint url {} is not valid", url);
throw new ResourceNotFoundException(String.format("Endpoint url '%s' is not valid", url));
}
+ }
+
+ private CloudProvider connectEndpoint(UserInfo userInfo, String url, String name) {
+ Response response;
+ CloudProvider cloudProvider;
+ try {
+ response = provisioningService.post(url + ENDPOINT, userInfo.getAccessToken(), name, Response.class);
+ cloudProvider = response.readEntity(CloudProvider.class);
+ } catch (Exception e) {
+ log.error("Cannot connect to url '{}'", url);
+ throw new DlabException(String.format("Cannot connect to url '%s'", url), e);
+ }
+ if (response.getStatus() != 200) {
+ log.warn("Endpoint connection failed, url {}", url);
+ throw new ResourceNotFoundException(String.format("Endpoint url '%s' is not valid", url));
+ }
return cloudProvider;
}
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 fd9e45c..bd67fab 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
@@ -283,6 +283,7 @@ public class RequestBuilder {
return (T) newResourceSysBaseDTO(userInfo, endpointDTO.getCloudProvider(), ExploratoryActionDTO.class)
.withNotebookInstanceName(userInstance.getExploratoryId())
.withProject(userInstance.getProject())
+ .withEndpoint(endpointDTO.getName())
.withNotebookImage(userInstance.getImageName())
.withApplicationName(getApplicationNameFromImage(userInstance.getImageName()))
.withExploratoryName(userInstance.getExploratoryName());
@@ -307,7 +308,7 @@ public class RequestBuilder {
public <T extends LibListComputationalDTO> T newLibComputationalList(UserInfo userInfo,
UserInstanceDTO userInstance,
UserComputationalResource
- computationalResource,
+ computationalResource,
EndpointDTO endpointDTO) {
checkInappropriateCloudProviderOrElseThrowException(endpointDTO.getCloudProvider());
@@ -316,7 +317,8 @@ public class RequestBuilder {
.withProject(userInstance.getProject())
.withComputationalImage(computationalResource.getImageName())
.withLibCacheKey(ExploratoryLibCache.libraryCacheKey(userInstance))
- .withApplicationName(getApplicationNameFromImage(userInstance.getImageName()));
+ .withApplicationName(getApplicationNameFromImage(userInstance.getImageName()))
+ .withEndpoint(endpointDTO.getName());
}
@SuppressWarnings("unchecked")
@@ -472,7 +474,8 @@ public class RequestBuilder {
.withComputationalName(computationalName)
.withNotebookInstanceName(exploratory.getExploratoryId())
.withApplicationName(getApplicationNameFromImage(exploratory.getImageName()))
- .withProject(exploratory.getProject());
+ .withProject(exploratory.getProject())
+ .withEndpoint(endpointDTO.getName());
}
@SuppressWarnings("unchecked")
@@ -483,7 +486,8 @@ public class RequestBuilder {
.withComputationalName(computationalName)
.withNotebookInstanceName(exploratory.getExploratoryId())
.withApplicationName(getApplicationNameFromImage(exploratory.getImageName()))
- .withProject(exploratory.getProject());
+ .withProject(exploratory.getProject())
+ .withEndpoint(endpointDTO.getName());
}
@SuppressWarnings("unchecked")
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@dlab.apache.org
For additional commands, e-mail: commits-help@dlab.apache.org