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/28 14:24:19 UTC

[incubator-dlab] branch DLAB-1357 updated: Added start/stop/terminate features

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

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


The following commit(s) were added to refs/heads/DLAB-1357 by this push:
     new acdf862  Added start/stop/terminate features
acdf862 is described below

commit acdf86222995be6679c441b7279548318e33bef2
Author: Oleh Fuks <ol...@gmail.com>
AuthorDate: Tue Jan 28 16:23:56 2020 +0200

    Added start/stop/terminate features
---
 .../com/epam/dlab/dto/base/odahu/OdahuResult.java  |  1 -
 .../com/epam/dlab/dto/odahu/ActionOdahuDTO.java}   | 18 +++---
 .../response/handlers/OdahuCallbackHandler.java    |  7 ++-
 .../dlab/backendapi/resources/OdahuResource.java   | 23 ++++++-
 .../epam/dlab/backendapi/service/OdahuService.java |  7 +++
 .../backendapi/service/impl/OdahuServiceImpl.java  | 19 ++++++
 .../resources/mock_response/gcp/odahu_start.json   |  9 +++
 .../resources/mock_response/gcp/odahu_stop.json    |  9 +++
 .../mock_response/gcp/odahu_terminate.json         |  9 +++
 .../{CreateOdahuDTO.java => OdahuActionDTO.java}   |  2 +-
 .../dlab/backendapi/resources/OdahuResource.java   | 37 +++++++++--
 .../epam/dlab/backendapi/service/OdahuService.java | 10 ++-
 .../backendapi/service/impl/OdahuServiceImpl.java  | 73 ++++++++++++++++++----
 .../epam/dlab/backendapi/util/RequestBuilder.java  | 15 ++++-
 14 files changed, 203 insertions(+), 36 deletions(-)

diff --git a/services/dlab-model/src/main/java/com/epam/dlab/dto/base/odahu/OdahuResult.java b/services/dlab-model/src/main/java/com/epam/dlab/dto/base/odahu/OdahuResult.java
index 2991392..3398101 100644
--- a/services/dlab-model/src/main/java/com/epam/dlab/dto/base/odahu/OdahuResult.java
+++ b/services/dlab-model/src/main/java/com/epam/dlab/dto/base/odahu/OdahuResult.java
@@ -23,7 +23,6 @@ import com.epam.dlab.dto.ResourceURL;
 import com.epam.dlab.dto.StatusBaseDTO;
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import com.fasterxml.jackson.annotation.JsonProperty;
-import lombok.Builder;
 import lombok.Data;
 
 import java.util.List;
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/CreateOdahuDTO.java b/services/dlab-model/src/main/java/com/epam/dlab/dto/odahu/ActionOdahuDTO.java
similarity index 73%
copy from services/self-service/src/main/java/com/epam/dlab/backendapi/domain/CreateOdahuDTO.java
copy to services/dlab-model/src/main/java/com/epam/dlab/dto/odahu/ActionOdahuDTO.java
index 4d5d1ed..bf9bf1e 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/CreateOdahuDTO.java
+++ b/services/dlab-model/src/main/java/com/epam/dlab/dto/odahu/ActionOdahuDTO.java
@@ -17,20 +17,20 @@
  * under the License.
  */
 
-package com.epam.dlab.backendapi.domain;
+package com.epam.dlab.dto.odahu;
 
-import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.epam.dlab.dto.ResourceBaseDTO;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Builder;
 import lombok.Data;
 
-import javax.validation.constraints.NotNull;
-
 @Data
-@JsonIgnoreProperties(ignoreUnknown = true)
-public class CreateOdahuDTO {
-    @NotNull
+@Builder
+public class ActionOdahuDTO extends ResourceBaseDTO<ActionOdahuDTO> {
+    @JsonProperty("odahu_cluster_name")
     private final String name;
-    @NotNull
+    @JsonProperty("project_name")
     private final String project;
-    @NotNull
+    @JsonProperty("endpoint_name")
     private final String endpoint;
 }
diff --git a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/core/response/handlers/OdahuCallbackHandler.java b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/core/response/handlers/OdahuCallbackHandler.java
index d9027b1..4e4fd52 100644
--- a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/core/response/handlers/OdahuCallbackHandler.java
+++ b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/core/response/handlers/OdahuCallbackHandler.java
@@ -29,6 +29,7 @@ import lombok.extern.slf4j.Slf4j;
 
 import java.io.IOException;
 import java.util.List;
+import java.util.Objects;
 
 @Slf4j
 public class OdahuCallbackHandler extends ResourceCallbackHandler<OdahuResult> {
@@ -63,7 +64,7 @@ public class OdahuCallbackHandler extends ResourceCallbackHandler<OdahuResult> {
             return result;
         }
         final JsonNode nodeUrl = resultNode.get(ODAHU_URLS_FIELD);
-        List<ResourceURL> urls;
+        List<ResourceURL> urls = null;
         if (nodeUrl != null) {
             try {
                 urls = mapper.readValue(nodeUrl.toString(), new TypeReference<List<ResourceURL>>() {
@@ -75,6 +76,10 @@ public class OdahuCallbackHandler extends ResourceCallbackHandler<OdahuResult> {
             }
         }
 
+        if (getAction() == DockerAction.CREATE && Objects.isNull(urls)) {
+            log.warn("There are no odahu urls in response file while creating {}", result);
+        }
+
         return result;
     }
 }
diff --git a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/OdahuResource.java b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/OdahuResource.java
index 8e701c3..7d0cb2a 100644
--- a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/OdahuResource.java
+++ b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/OdahuResource.java
@@ -21,6 +21,7 @@ package com.epam.dlab.backendapi.resources;
 
 import com.epam.dlab.auth.UserInfo;
 import com.epam.dlab.backendapi.service.OdahuService;
+import com.epam.dlab.dto.odahu.ActionOdahuDTO;
 import com.epam.dlab.dto.odahu.OdahuCreateDTO;
 import com.google.inject.Inject;
 import io.dropwizard.auth.Auth;
@@ -33,6 +34,8 @@ import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 
 @Path("infrastructure/odahu")
+@Consumes(MediaType.APPLICATION_JSON)
+@Produces(MediaType.APPLICATION_JSON)
 public class OdahuResource {
 
     private final OdahuService odahuService;
@@ -43,9 +46,25 @@ public class OdahuResource {
     }
 
     @POST
-    @Consumes(MediaType.APPLICATION_JSON)
-    @Produces(MediaType.APPLICATION_JSON)
     public Response createProject(@Auth UserInfo userInfo, OdahuCreateDTO dto) {
         return Response.ok(odahuService.create(userInfo, dto)).build();
     }
+
+    @Path("start")
+    @POST
+    public Response startProject(@Auth UserInfo userInfo, ActionOdahuDTO dto) {
+        return Response.ok(odahuService.start(userInfo, dto)).build();
+    }
+
+    @Path("stop")
+    @POST
+    public Response stopProject(@Auth UserInfo userInfo, ActionOdahuDTO dto) {
+        return Response.ok(odahuService.stop(userInfo, dto)).build();
+    }
+
+    @Path("terminate")
+    @POST
+    public Response terminateProject(@Auth UserInfo userInfo, ActionOdahuDTO dto) {
+        return Response.ok(odahuService.terminate(userInfo, dto)).build();
+    }
 }
diff --git a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/OdahuService.java b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/OdahuService.java
index f74d17c..6205301 100644
--- a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/OdahuService.java
+++ b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/OdahuService.java
@@ -20,8 +20,15 @@
 package com.epam.dlab.backendapi.service;
 
 import com.epam.dlab.auth.UserInfo;
+import com.epam.dlab.dto.odahu.ActionOdahuDTO;
 import com.epam.dlab.dto.odahu.OdahuCreateDTO;
 
 public interface OdahuService {
     String create(UserInfo userInfo, OdahuCreateDTO odahuCreateDTO);
+
+    String start(UserInfo userInfo, ActionOdahuDTO dto);
+
+    String stop(UserInfo userInfo, ActionOdahuDTO dto);
+
+    String terminate(UserInfo userInfo, ActionOdahuDTO dto);
 }
diff --git a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/OdahuServiceImpl.java b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/OdahuServiceImpl.java
index 5b58e77..97c24df 100644
--- a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/OdahuServiceImpl.java
+++ b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/OdahuServiceImpl.java
@@ -30,6 +30,7 @@ import com.epam.dlab.backendapi.core.response.folderlistener.FolderListenerExecu
 import com.epam.dlab.backendapi.core.response.handlers.OdahuCallbackHandler;
 import com.epam.dlab.backendapi.service.OdahuService;
 import com.epam.dlab.dto.ResourceBaseDTO;
+import com.epam.dlab.dto.odahu.ActionOdahuDTO;
 import com.epam.dlab.dto.odahu.OdahuCreateDTO;
 import com.epam.dlab.rest.client.RESTService;
 import com.fasterxml.jackson.core.JsonProcessingException;
@@ -64,6 +65,24 @@ public class OdahuServiceImpl implements OdahuService {
                 dto.getProject(), dto.getEndpoint());
     }
 
+    @Override
+    public String start(UserInfo userInfo, ActionOdahuDTO dto) {
+        return executeDocker(userInfo, dto, DockerAction.START, ODAHU_RESOURCE_TYPE, ODAHU_IMAGE, dto.getName(),
+                dto.getProject(), dto.getEndpoint());
+    }
+
+    @Override
+    public String stop(UserInfo userInfo, ActionOdahuDTO dto) {
+        return executeDocker(userInfo, dto, DockerAction.STOP, ODAHU_RESOURCE_TYPE, ODAHU_IMAGE, dto.getName(),
+                dto.getProject(), dto.getEndpoint());
+    }
+
+    @Override
+    public String terminate(UserInfo userInfo, ActionOdahuDTO dto) {
+        return executeDocker(userInfo, dto, DockerAction.TERMINATE, ODAHU_RESOURCE_TYPE, ODAHU_IMAGE, dto.getName(),
+                dto.getProject(), dto.getEndpoint());
+    }
+
 
     private String executeDocker(UserInfo userInfo, ResourceBaseDTO dto, DockerAction action, String resourceType,
                                  String image, String name, String project, String endpoint) {
diff --git a/services/provisioning-service/src/main/resources/mock_response/gcp/odahu_start.json b/services/provisioning-service/src/main/resources/mock_response/gcp/odahu_start.json
new file mode 100644
index 0000000..99433bd
--- /dev/null
+++ b/services/provisioning-service/src/main/resources/mock_response/gcp/odahu_start.json
@@ -0,0 +1,9 @@
+{
+  "status": "ok",
+  "response": {
+    "result": {
+    },
+    "log": "/var/log/dlab/odahu/odahu_${EDGE_USER_NAME}_${REQUEST_ID}.log"
+  },
+  "request_id": "${REQUEST_ID}"
+}
diff --git a/services/provisioning-service/src/main/resources/mock_response/gcp/odahu_stop.json b/services/provisioning-service/src/main/resources/mock_response/gcp/odahu_stop.json
new file mode 100644
index 0000000..99433bd
--- /dev/null
+++ b/services/provisioning-service/src/main/resources/mock_response/gcp/odahu_stop.json
@@ -0,0 +1,9 @@
+{
+  "status": "ok",
+  "response": {
+    "result": {
+    },
+    "log": "/var/log/dlab/odahu/odahu_${EDGE_USER_NAME}_${REQUEST_ID}.log"
+  },
+  "request_id": "${REQUEST_ID}"
+}
diff --git a/services/provisioning-service/src/main/resources/mock_response/gcp/odahu_terminate.json b/services/provisioning-service/src/main/resources/mock_response/gcp/odahu_terminate.json
new file mode 100644
index 0000000..99433bd
--- /dev/null
+++ b/services/provisioning-service/src/main/resources/mock_response/gcp/odahu_terminate.json
@@ -0,0 +1,9 @@
+{
+  "status": "ok",
+  "response": {
+    "result": {
+    },
+    "log": "/var/log/dlab/odahu/odahu_${EDGE_USER_NAME}_${REQUEST_ID}.log"
+  },
+  "request_id": "${REQUEST_ID}"
+}
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/CreateOdahuDTO.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/OdahuActionDTO.java
similarity index 97%
rename from services/self-service/src/main/java/com/epam/dlab/backendapi/domain/CreateOdahuDTO.java
rename to services/self-service/src/main/java/com/epam/dlab/backendapi/domain/OdahuActionDTO.java
index 4d5d1ed..fa86750 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/CreateOdahuDTO.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/domain/OdahuActionDTO.java
@@ -26,7 +26,7 @@ import javax.validation.constraints.NotNull;
 
 @Data
 @JsonIgnoreProperties(ignoreUnknown = true)
-public class CreateOdahuDTO {
+public class OdahuActionDTO {
     @NotNull
     private final String name;
     @NotNull
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/OdahuResource.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/OdahuResource.java
index ce5d829..38835fc 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/OdahuResource.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/resources/OdahuResource.java
@@ -20,7 +20,7 @@
 package com.epam.dlab.backendapi.resources;
 
 import com.epam.dlab.auth.UserInfo;
-import com.epam.dlab.backendapi.domain.CreateOdahuDTO;
+import com.epam.dlab.backendapi.domain.OdahuActionDTO;
 import com.epam.dlab.backendapi.service.OdahuService;
 import com.google.inject.Inject;
 import io.dropwizard.auth.Auth;
@@ -28,6 +28,7 @@ import io.swagger.v3.oas.annotations.Parameter;
 
 import javax.validation.Valid;
 import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
 import javax.ws.rs.GET;
 import javax.ws.rs.POST;
 import javax.ws.rs.Path;
@@ -49,18 +50,42 @@ public class OdahuResource {
         this.odahuService = odahuService;
     }
 
+    @GET
+    @Produces(MediaType.APPLICATION_JSON)
+    public Response getOdahuClusters(@Parameter(hidden = true) @Auth UserInfo userInfo) {
+        return Response.ok(odahuService.findOdahu()).build();
+    }
+
     @POST
     public Response createOdahuCluster(@Parameter(hidden = true) @Auth UserInfo userInfo,
                                        @Parameter(hidden = true) @Context UriInfo uriInfo,
-                                       @Valid CreateOdahuDTO createOdahuDTO) {
+                                       @Valid OdahuActionDTO createOdahuDTO) {
         odahuService.create(createOdahuDTO.getProject(), createOdahuDTO, userInfo);
         final URI uri = uriInfo.getRequestUriBuilder().path(createOdahuDTO.getName()).build();
         return Response.created(uri).build();
     }
 
-    @GET
-    @Produces(MediaType.APPLICATION_JSON)
-    public Response getOdahuClusters(@Parameter(hidden = true) @Auth UserInfo userInfo) {
-        return Response.ok(odahuService.findOdahu()).build();
+    @Path("start")
+    @POST
+    public Response startOdahuCluster(@Parameter(hidden = true) @Auth UserInfo userInfo,
+                                      @Valid OdahuActionDTO startOdahuDTO) {
+        odahuService.start(startOdahuDTO.getProject(), startOdahuDTO, userInfo);
+        return Response.accepted().build();
+    }
+
+    @Path("stop")
+    @POST
+    public Response stopOdahuCluster(@Parameter(hidden = true) @Auth UserInfo userInfo,
+                                     @Valid OdahuActionDTO stopOdahuDTO) {
+        odahuService.stop(stopOdahuDTO.getProject(), stopOdahuDTO, userInfo);
+        return Response.accepted().build();
+    }
+
+    @Path("terminate")
+    @DELETE
+    public Response terminateOdahuCluster(@Parameter(hidden = true) @Auth UserInfo userInfo,
+                                          @Valid OdahuActionDTO terminateOdahuDTO) {
+        odahuService.terminate(terminateOdahuDTO.getProject(), terminateOdahuDTO, userInfo);
+        return Response.accepted().build();
     }
 }
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/OdahuService.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/OdahuService.java
index dd72c13..4ad0d95 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/OdahuService.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/OdahuService.java
@@ -20,7 +20,7 @@
 package com.epam.dlab.backendapi.service;
 
 import com.epam.dlab.auth.UserInfo;
-import com.epam.dlab.backendapi.domain.CreateOdahuDTO;
+import com.epam.dlab.backendapi.domain.OdahuActionDTO;
 import com.epam.dlab.backendapi.domain.OdahuDTO;
 import com.epam.dlab.dto.UserInstanceStatus;
 import com.epam.dlab.dto.base.odahu.OdahuResult;
@@ -30,7 +30,13 @@ import java.util.List;
 public interface OdahuService {
     List<OdahuDTO> findOdahu();
 
-    void create(String project, CreateOdahuDTO createOdahuDTO, UserInfo userInfo);
+    void create(String project, OdahuActionDTO createOdahuDTO, UserInfo userInfo);
+
+    void start(String project, OdahuActionDTO startOdahuDTO, UserInfo userInfo);
+
+    void stop(String project, OdahuActionDTO stopOdahuDTO, UserInfo userInfo);
+
+    void terminate(String project, OdahuActionDTO terminateOdahuDTO, UserInfo userInfo);
 
     void updateStatus(OdahuResult odahuResult, UserInstanceStatus status);
 }
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/OdahuServiceImpl.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/OdahuServiceImpl.java
index 4123481..4d728b2 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/OdahuServiceImpl.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/OdahuServiceImpl.java
@@ -23,7 +23,7 @@ import com.epam.dlab.auth.UserInfo;
 import com.epam.dlab.backendapi.annotation.BudgetLimited;
 import com.epam.dlab.backendapi.annotation.Project;
 import com.epam.dlab.backendapi.dao.OdahuDAO;
-import com.epam.dlab.backendapi.domain.CreateOdahuDTO;
+import com.epam.dlab.backendapi.domain.OdahuActionDTO;
 import com.epam.dlab.backendapi.domain.OdahuDTO;
 import com.epam.dlab.backendapi.domain.ProjectDTO;
 import com.epam.dlab.backendapi.domain.RequestId;
@@ -38,13 +38,19 @@ import com.epam.dlab.exceptions.ResourceConflictException;
 import com.epam.dlab.rest.client.RESTService;
 import com.google.inject.Inject;
 import com.google.inject.name.Named;
+import lombok.extern.slf4j.Slf4j;
 
 import java.util.List;
+import java.util.Objects;
 import java.util.Optional;
 
+@Slf4j
 public class OdahuServiceImpl implements OdahuService {
 
     private static final String CREATE_ODAHU_API = "infrastructure/odahu";
+    private static final String START_ODAHU_API = "infrastructure/odahu/start";
+    private static final String STOP_ODAHU_API = "infrastructure/odahu/stop";
+    private static final String TERMINATE_ODAHU_API = "infrastructure/odahu/terminate";
 
     private final ProjectService projectService;
     private final EndpointService endpointService;
@@ -73,7 +79,7 @@ public class OdahuServiceImpl implements OdahuService {
 
     @BudgetLimited
     @Override
-    public void create(@Project String project, CreateOdahuDTO createOdahuDTO, UserInfo userInfo) {
+    public void create(@Project String project, OdahuActionDTO createOdahuDTO, UserInfo user) {
         Optional<OdahuDTO> odahuDTO = odahuDAO.getByProjectEndpoint(createOdahuDTO.getProject(), createOdahuDTO.getEndpoint());
         if (odahuDTO.isPresent()) {
             throw new ResourceConflictException(String.format("Odahu cluster already exist in system for project %s " +
@@ -84,25 +90,68 @@ public class OdahuServiceImpl implements OdahuService {
                 createOdahuDTO.getEndpoint(), UserInstanceStatus.CREATING));
 
         if (isAdded) {
-            createOnCloud(userInfo, createOdahuDTO, projectDTO);
+            String url = null;
+            try {
+                url = endpointService.get(createOdahuDTO.getEndpoint()).getUrl() + CREATE_ODAHU_API;
+                String uuid =
+                        provisioningService.post(url, user.getAccessToken(),
+                                requestBuilder.newOdahuCreate(user, createOdahuDTO, projectDTO), String.class);
+                requestId.put(user.getName(), uuid);
+            } catch (Exception e) {
+                log.error("Can not perform {} due to: {}, {}", url, e.getMessage(), e);
+                odahuDAO.updateStatus(createOdahuDTO.getName(), createOdahuDTO.getProject(), createOdahuDTO.getEndpoint(),
+                        UserInstanceStatus.FAILED);
+            }
         }
     }
 
+    @BudgetLimited
+    @Override
+    public void start(@Project String project, OdahuActionDTO startOdahuDTO, UserInfo user) {
+        ProjectDTO projectDTO = projectService.get(project);
+        odahuDAO.updateStatus(startOdahuDTO.getName(), startOdahuDTO.getProject(), startOdahuDTO.getEndpoint(),
+                UserInstanceStatus.STARTING);
+        actionOnCloud(user, startOdahuDTO, projectDTO, START_ODAHU_API);
+    }
+
+    @Override
+    public void stop(String project, OdahuActionDTO stopOdahuDTO, UserInfo user) {
+        ProjectDTO projectDTO = projectService.get(project);
+        odahuDAO.updateStatus(stopOdahuDTO.getName(), stopOdahuDTO.getProject(), stopOdahuDTO.getEndpoint(),
+                UserInstanceStatus.STOPPING);
+        actionOnCloud(user, stopOdahuDTO, projectDTO, STOP_ODAHU_API);
+    }
+
+    @Override
+    public void terminate(String project, OdahuActionDTO terminateOdahuDTO, UserInfo user) {
+        ProjectDTO projectDTO = projectService.get(project);
+        odahuDAO.updateStatus(terminateOdahuDTO.getName(), terminateOdahuDTO.getProject(), terminateOdahuDTO.getEndpoint(),
+                UserInstanceStatus.TERMINATING);
+        actionOnCloud(user, terminateOdahuDTO, projectDTO, TERMINATE_ODAHU_API);
+    }
+
     @Override
     public void updateStatus(OdahuResult result, UserInstanceStatus status) {
-        if (result.getResourceUrls().isEmpty()) {
-            odahuDAO.updateStatus(result.getName(), result.getProjectName(), result.getEndpointName(), status);
-        } else {
+        if (Objects.nonNull(result.getResourceUrls()) && !result.getResourceUrls().isEmpty()) {
             odahuDAO.updateStatusAndUrls(result.getName(), result.getProjectName(), result.getEndpointName(),
                     result.getResourceUrls(), status);
+        } else {
+            odahuDAO.updateStatus(result.getName(), result.getProjectName(), result.getEndpointName(), status);
         }
     }
 
-    private void createOnCloud(UserInfo user, CreateOdahuDTO createOdahuDTO, ProjectDTO projectDTO) {
-        String uuid =
-                provisioningService.post(endpointService.get(createOdahuDTO.getEndpoint()).getUrl() + CREATE_ODAHU_API,
-                        user.getAccessToken(),
-                        requestBuilder.newOdahuCreate(user, createOdahuDTO, projectDTO), String.class);
-        requestId.put(user.getName(), uuid);
+    private void actionOnCloud(UserInfo user, OdahuActionDTO odahuActionDTO, ProjectDTO projectDTO, String uri) {
+        String url = null;
+        try {
+            url = endpointService.get(odahuActionDTO.getEndpoint()).getUrl() + uri;
+            String uuid =
+                    provisioningService.post(url, user.getAccessToken(),
+                            requestBuilder.newOdahuAction(user, odahuActionDTO, projectDTO), String.class);
+            requestId.put(user.getName(), uuid);
+        } catch (Exception e) {
+            log.error("Can not perform {} due to: {}, {}", url, e.getMessage(), e);
+            odahuDAO.updateStatus(odahuActionDTO.getName(), odahuActionDTO.getProject(), odahuActionDTO.getEndpoint(),
+                    UserInstanceStatus.FAILED);
+        }
     }
 }
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 fd1a3f1..ea3c211 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,8 +22,8 @@ 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.CreateOdahuDTO;
 import com.epam.dlab.backendapi.domain.ExploratoryLibCache;
+import com.epam.dlab.backendapi.domain.OdahuActionDTO;
 import com.epam.dlab.backendapi.domain.ProjectDTO;
 import com.epam.dlab.backendapi.resources.dto.BackupFormDTO;
 import com.epam.dlab.backendapi.resources.dto.ComputationalCreateFormDTO;
@@ -78,6 +78,7 @@ 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.odahu.ActionOdahuDTO;
 import com.epam.dlab.dto.odahu.OdahuCreateDTO;
 import com.epam.dlab.dto.project.ProjectActionDTO;
 import com.epam.dlab.dto.project.ProjectCreateDTO;
@@ -662,7 +663,7 @@ public class RequestBuilder {
 				.withCloudSettings(cloudSettings(userInfo));
 	}
 
-	public OdahuCreateDTO newOdahuCreate(UserInfo user, CreateOdahuDTO createOdahuDTO, ProjectDTO projectDTO) {
+	public OdahuCreateDTO newOdahuCreate(UserInfo user, OdahuActionDTO createOdahuDTO, ProjectDTO projectDTO) {
 		return OdahuCreateDTO.builder()
 				.name(createOdahuDTO.getName())
 				.project(projectDTO.getName())
@@ -673,6 +674,16 @@ public class RequestBuilder {
 				.withCloudSettings(cloudSettings(user));
 	}
 
+	public ActionOdahuDTO newOdahuAction(UserInfo user, OdahuActionDTO actionDTO, ProjectDTO projectDTO) {
+		return ActionOdahuDTO.builder()
+				.name(actionDTO.getName())
+				.project(projectDTO.getName())
+				.endpoint(actionDTO.getEndpoint())
+				.build()
+				.withEdgeUserName(getEdgeUserName(user))
+				.withCloudSettings(cloudSettings(user));
+	}
+
 	private CloudProvider cloudProvider() {
 		return configuration.getCloudProvider();
 	}


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