Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

separate config and action code #2397

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading