Skip to content

Commit

Permalink
Merge pull request #2397 from swaroopar/feature/separateActionAndConfig
Browse files Browse the repository at this point in the history
separate config and action code
  • Loading branch information
iskey authored Feb 13, 2025
2 parents 5035708 + 8272a49 commit 1277bc6
Show file tree
Hide file tree
Showing 24 changed files with 526 additions and 482 deletions.
39 changes: 23 additions & 16 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,34 @@ Xpanse unleashes your cloud services by removing vendor lock-in and lock out. It
providers core services, meaning that your xpanse service is portable (multi-cloud) on any cloud topology and provider.
It also avoids tight coupling of your service to other cloud service provider services.

## Developer Setup and contribution guide

All details on how to set up and run the project can be found on our documentation website
1. [Developer setup](https://eclipse.dev/xpanse/docs/developer-setup)
2. [Pull Requests](https://eclipse.dev/xpanse/docs/Contribute/pull-requests)

## Configuration Language

Details can be found on the project
website [here](https://eclipse.dev/xpanse/docs/configuration-language).

## Formatter and Linter

The project follows [google-code-format](https://github.com/google/google-java-format).
We use the [spotless plugin](https://github.com/diffplug/spotless/tree/main/plugin-maven#google-java-format) to format code and to validate code format.
We can automatically format the code using the command below.

```shell
mvn spotless:apply
```

To validate errors we can run the command below.

```shell
mvn spotless:check && mvn checkstyle:check
```


## Runtime

Details can be found on the project website [here](https://eclipse.dev/xpanse/docs/runtime).
Expand Down Expand Up @@ -95,19 +118,3 @@ The static code analysis framework will also validate if the license exists in t
## Dependencies File

All third-party related content is listed in the [DEPENDENCIES](DEPENDENCIES) file.

## Code Formatter

The project follows [google-code-format](https://github.com/google/google-java-format).
We use the [spotless plugin](https://github.com/diffplug/spotless/tree/main/plugin-maven#google-java-format) to format code and to validate code format.
We can automatically format the code using the command below.

```shell
mvn spotless:apply
```

To validate errors we can run the command below.

```shell
mvn spotless:check && mvn checkstyle:check
```
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@
import java.util.UUID;
import lombok.extern.slf4j.Slf4j;
import org.eclipse.xpanse.api.config.AuditApiRequest;
import org.eclipse.xpanse.modules.deployment.ServiceConfigurationManager;
import org.eclipse.xpanse.modules.models.serviceconfiguration.ServiceChangeRequest;
import org.eclipse.xpanse.modules.models.serviceconfiguration.ServiceConfigurationChangeResult;
import org.eclipse.xpanse.modules.deployment.ServiceChangeManager;
import org.eclipse.xpanse.modules.models.servicechange.ServiceChangeRequest;
import org.eclipse.xpanse.modules.models.servicechange.ServiceChangeResult;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
Expand All @@ -38,7 +38,7 @@
@RequestMapping("/agent/xpanse")
public class AgentPollingApi {

@Resource private ServiceConfigurationManager serviceConfigurationManager;
@Resource private ServiceChangeManager serviceChangeManager;

/**
* Query pending service change request for agent.
Expand Down Expand Up @@ -74,7 +74,7 @@ public ResponseEntity<ServiceChangeRequest> getPendingServiceChangeRequest(
description = "The name of the resource of deployed service")
@PathVariable("resourceName")
String resourceName) {
return serviceConfigurationManager.getPendingServiceChangeRequest(serviceId, resourceName);
return serviceChangeManager.getPendingServiceChangeRequest(serviceId, resourceName);
}

/**
Expand All @@ -98,7 +98,7 @@ public void updateServiceChangeResult(
UUID changeId,
@Parameter(name = "result", description = "result of the service change request.")
@RequestBody
ServiceConfigurationChangeResult result) {
serviceConfigurationManager.updateServiceChangeResult(changeId, result);
ServiceChangeResult result) {
serviceChangeManager.updateServiceChangeResult(changeId, result);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,23 +5,38 @@

package org.eclipse.xpanse.api.controllers;

import static org.eclipse.xpanse.modules.security.auth.common.RoleConstants.ROLE_ADMIN;
import static org.eclipse.xpanse.modules.security.auth.common.RoleConstants.ROLE_USER;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import java.util.List;
import java.util.UUID;
import lombok.extern.slf4j.Slf4j;
import org.eclipse.xpanse.api.config.AuditApiRequest;
import org.eclipse.xpanse.modules.deployment.ServiceChangeDetailsManager;
import org.eclipse.xpanse.modules.models.serviceconfiguration.ServiceChangeOrderDetails;
import org.eclipse.xpanse.modules.models.serviceconfiguration.enums.ServiceChangeStatus;
import org.eclipse.xpanse.modules.models.servicechange.ServiceChangeOrderDetails;
import org.eclipse.xpanse.modules.models.servicechange.enums.ServiceChangeStatus;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.security.access.annotation.Secured;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;

/** service change details Api. */
@Slf4j
@RestController
@RequestMapping("/xpanse")
@CrossOrigin
@Secured({ROLE_ADMIN, ROLE_USER})
@ConditionalOnProperty(name = "enable.agent.api.only", havingValue = "false", matchIfMissing = true)
public class ServiceChangeDetailsApi {

@Resource private ServiceChangeDetailsManager serviceChangeDetailsManager;
Expand Down Expand Up @@ -50,7 +65,7 @@ public List<ServiceChangeOrderDetails> getServiceChangeRequestDetails(
@Parameter(name = "status", description = "Status of the service configuration")
@RequestParam(name = "status", required = false)
ServiceChangeStatus status) {
return serviceChangeDetailsManager.getServiceChangeRequestDetails(
return serviceChangeDetailsManager.getAllChangeRequests(
orderId, serviceId, resourceName, configManager, status);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
import lombok.extern.slf4j.Slf4j;
import org.eclipse.xpanse.modules.models.response.ErrorResponse;
import org.eclipse.xpanse.modules.models.response.ErrorType;
import org.eclipse.xpanse.modules.models.serviceconfiguration.exceptions.ServiceChangeDetailsEntityNotFoundException;
import org.eclipse.xpanse.modules.models.servicechange.exceptions.ServiceChangeDetailsEntityNotFoundException;
import org.eclipse.xpanse.modules.models.serviceconfiguration.exceptions.ServiceConfigurationInvalidException;
import org.eclipse.xpanse.modules.models.serviceconfiguration.exceptions.ServiceConfigurationNotFoundException;
import org.springframework.core.Ordered;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,8 @@
import org.eclipse.xpanse.modules.database.common.ObjectJsonConverter;
import org.eclipse.xpanse.modules.database.service.ServiceDeploymentEntity;
import org.eclipse.xpanse.modules.database.serviceorder.ServiceOrderEntity;
import org.eclipse.xpanse.modules.models.serviceconfiguration.AnsibleTaskResult;
import org.eclipse.xpanse.modules.models.serviceconfiguration.enums.ServiceChangeStatus;
import org.eclipse.xpanse.modules.models.servicechange.AnsibleTaskResult;
import org.eclipse.xpanse.modules.models.servicechange.enums.ServiceChangeStatus;
import org.hibernate.annotations.OnDelete;
import org.hibernate.annotations.OnDeleteAction;
import org.hibernate.annotations.Type;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.eclipse.xpanse.modules.models.serviceconfiguration.enums.ServiceChangeStatus;
import org.eclipse.xpanse.modules.models.servicechange.enums.ServiceChangeStatus;

/** The query model for ServiceChangeDetailsEntity. */
@Data
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@
import org.eclipse.xpanse.modules.models.service.view.DeployedService;
import org.eclipse.xpanse.modules.models.service.view.DeployedServiceDetails;
import org.eclipse.xpanse.modules.models.service.view.VendorHostedDeployedServiceDetails;
import org.eclipse.xpanse.modules.models.serviceconfiguration.ServiceChangeDetails;
import org.eclipse.xpanse.modules.models.serviceconfiguration.ServiceChangeOrderDetails;
import org.eclipse.xpanse.modules.models.servicechange.ServiceChangeDetails;
import org.eclipse.xpanse.modules.models.servicechange.ServiceChangeOrderDetails;
import org.eclipse.xpanse.modules.models.serviceconfiguration.ServiceConfigurationDetails;
import org.eclipse.xpanse.modules.models.servicetemplate.request.ServiceTemplateRequestHistory;
import org.eclipse.xpanse.modules.models.servicetemplate.request.ServiceTemplateRequestToReview;
Expand Down Expand Up @@ -170,15 +170,15 @@ public static List<ServiceChangeOrderDetails> transToServiceChangeOrderDetails(
ServiceChangeOrderDetails orderDetails = new ServiceChangeOrderDetails();
orderDetails.setOrderId(orderId);
ServiceOrderEntity orderEntity = requestList.getFirst().getServiceOrderEntity();
orderDetails.setConfigRequest(orderEntity.getRequestBody());
orderDetails.setServiceChangeRequest(orderEntity.getRequestBody());
orderDetails.setOrderStatus(orderEntity.getTaskStatus());
List<ServiceChangeDetails> detailsList = new ArrayList<>();
requestList.forEach(
request -> {
ServiceChangeDetails details = new ServiceChangeDetails();
details.setChangeId(request.getId());
details.setResourceName(request.getResourceName());
details.setConfigManager(request.getChangeHandler());
details.setChangeHandler(request.getChangeHandler());
details.setResultMessage(request.getResultMessage());
details.setProperties(request.getProperties());
details.setStatus(request.getStatus());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
import org.eclipse.xpanse.modules.database.servicechange.DatabaseServiceChangeDetailsStorage;
import org.eclipse.xpanse.modules.database.servicechange.ServiceChangeDetailsEntity;
import org.eclipse.xpanse.modules.database.servicechange.ServiceChangeDetailsRepository;
import org.eclipse.xpanse.modules.models.serviceconfiguration.enums.ServiceChangeStatus;
import org.eclipse.xpanse.modules.models.servicechange.enums.ServiceChangeStatus;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@
import org.eclipse.xpanse.modules.database.service.ServiceDeploymentEntity;
import org.eclipse.xpanse.modules.database.servicechange.ServiceChangeDetailsEntity;
import org.eclipse.xpanse.modules.database.serviceorder.ServiceOrderEntity;
import org.eclipse.xpanse.modules.models.serviceconfiguration.AnsibleTaskResult;
import org.eclipse.xpanse.modules.models.serviceconfiguration.enums.ServiceChangeStatus;
import org.eclipse.xpanse.modules.models.servicechange.AnsibleTaskResult;
import org.eclipse.xpanse.modules.models.servicechange.enums.ServiceChangeStatus;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.Mock;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,13 @@

package org.eclipse.xpanse.modules.deployment;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import jakarta.annotation.Resource;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.UUID;
import java.util.stream.Collectors;
import lombok.extern.slf4j.Slf4j;
Expand All @@ -28,6 +31,7 @@
import org.eclipse.xpanse.modules.models.serviceaction.ServiceActionRequest;
import org.eclipse.xpanse.modules.models.serviceconfiguration.exceptions.ServiceConfigurationInvalidException;
import org.eclipse.xpanse.modules.models.servicetemplate.Ocl;
import org.eclipse.xpanse.modules.models.servicetemplate.ServiceAction;
import org.eclipse.xpanse.modules.models.servicetemplate.ServiceChangeParameter;
import org.eclipse.xpanse.modules.models.servicetemplate.ServiceChangeScript;
import org.eclipse.xpanse.modules.models.servicetemplate.exceptions.ServiceTemplateNotRegistered;
Expand All @@ -40,6 +44,8 @@
@Component
public class ServiceActionManager {

private final ObjectMapper objectMapper = new ObjectMapper();

@Resource private ServiceDeploymentEntityHandler serviceDeploymentEntityHandler;

@Resource private ServiceChangeDetailsStorage serviceChangeDetailsStorage;
Expand Down Expand Up @@ -140,17 +146,55 @@ private void addServiceChangeDetailsForServiceActions(
.filter(serviceAction -> actionName.equals(serviceAction.getName()))
.flatMap(action -> action.getActionParameters().stream())
.toList();
List<ServiceChangeDetailsEntity> requests =
serviceChangeDetailsManager.getAllServiceChangeDetails(
orderId,
serviceDeployment,
updateRequestMap,
deployResourceMap,
actionManageScripts,
actionParameters,
ServiceOrderType.SERVICE_ACTION);
if (!CollectionUtils.isEmpty(requests)) {
serviceChangeDetailsStorage.saveAll(requests);

serviceChangeDetailsManager.createAndQueueAllServiceChangeRequests(
orderId,
serviceDeployment,
updateRequestMap,
deployResourceMap,
actionManageScripts,
actionParameters,
ServiceOrderType.SERVICE_ACTION);
}

/** Returns the specific service action management script from service template. */
public Optional<ServiceChangeScript> getServiceActionManageScript(
ServiceChangeDetailsEntity serviceChangeDetailsEntity) {
try {
ServiceTemplateEntity serviceTemplateEntity =
serviceTemplateStorage.getServiceTemplateById(
serviceChangeDetailsEntity
.getServiceDeploymentEntity()
.getServiceTemplateId());
ServiceActionRequest serviceActionRequest =
objectMapper.readValue(
objectMapper.writeValueAsString(
serviceChangeDetailsEntity
.getServiceOrderEntity()
.getRequestBody()),
ServiceActionRequest.class);
Optional<ServiceAction> serviceActionOptional =
serviceTemplateEntity.getOcl().getServiceActions().stream()
.filter(
serviceAction ->
serviceAction
.getName()
.equals(serviceActionRequest.getActionName()))
.findFirst();
return serviceActionOptional.flatMap(
serviceAction ->
serviceAction.getActionManageScripts().stream()
.filter(
serviceChangeScript ->
serviceChangeScript
.getChangeHandler()
.equals(
serviceChangeDetailsEntity
.getChangeHandler()))
.findFirst());
} catch (JsonProcessingException e) {
log.error(e.getMessage(), e);
throw new ServiceConfigurationInvalidException(List.of("Wrong"));
}
}
}
Loading

0 comments on commit 1277bc6

Please sign in to comment.