Skip to content

Commit

Permalink
remove 'DeploymentScenario' from tofu-maker
Browse files Browse the repository at this point in the history
  • Loading branch information
baixinsui committed Apr 16, 2024
1 parent 845a895 commit 286f168
Show file tree
Hide file tree
Showing 52 changed files with 833 additions and 2,528 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import lombok.extern.slf4j.Slf4j;
import org.eclipse.xpanse.modules.deployment.deployers.opentofu.callbacks.OpenTofuDeploymentResultCallbackManager;
import org.eclipse.xpanse.modules.deployment.deployers.opentofu.tofumaker.generated.model.OpenTofuResult;
import org.eclipse.xpanse.modules.orchestrator.deployment.DeploymentScenario;
import org.springframework.context.annotation.Profile;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
Expand Down Expand Up @@ -88,7 +89,44 @@ public void destroyCallback(
@PathVariable("task_id") String taskId,
@Valid @RequestBody OpenTofuResult result) {

openTofuDeploymentResultCallbackManager.destroyCallback(UUID.fromString(taskId), result);
openTofuDeploymentResultCallbackManager.destroyCallback(UUID.fromString(taskId), result,
DeploymentScenario.DESTROY);
}


/**
* Webhook methods to receive openTofu execution result.
*/
@Tag(name = "Webhook", description = "Webhook APIs")
@Operation(description = "Process the execution result after openTofu executes the command "
+ "line to rollback service deployment.")
@PostMapping(value = "${webhook.tofu-maker.rollbackCallbackUri}/{task_id}", produces =
MediaType.APPLICATION_JSON_VALUE)
@ResponseStatus(HttpStatus.OK)
public void rollbackCallback(
@Parameter(name = "task_id", description = "task id")
@PathVariable("task_id") String taskId,
@Valid @RequestBody OpenTofuResult result) {
openTofuDeploymentResultCallbackManager.destroyCallback(UUID.fromString(taskId), result,
DeploymentScenario.ROLLBACK);
}


/**
* Webhook methods to receive openTofu execution result.
*/
@Tag(name = "Webhook", description = "Webhook APIs")
@Operation(description = "Process the execution result after openTofu executes the command "
+ "line to purge service.")
@PostMapping(value = "${webhook.tofu-maker.purgeCallbackUri}/{task_id}", produces =
MediaType.APPLICATION_JSON_VALUE)
@ResponseStatus(HttpStatus.OK)
public void purgeCallback(
@Parameter(name = "task_id", description = "task id")
@PathVariable("task_id") String taskId,
@Valid @RequestBody OpenTofuResult result) {
openTofuDeploymentResultCallbackManager.destroyCallback(UUID.fromString(taskId), result,
DeploymentScenario.PURGE);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -402,6 +402,7 @@ public void deployServiceById(UUID newId, String userId, DeployRequest deployReq
MDC.put(TASK_ID, newId.toString());
log.info("Migrate workflow start deploy new service with id: {}", newId);
DeployTask deployTask = createNewDeployTask(deployRequest);
deployTask.setDeploymentScenario(DeploymentScenario.DEPLOY);
// override task id and user id.
deployTask.setId(newId);
deployTask.getDeployRequest().setUserId(userId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,14 @@
import org.eclipse.xpanse.modules.deployment.DeployServiceEntityToDeployTaskConverter;
import org.eclipse.xpanse.modules.deployment.ResourceHandlerManager;
import org.eclipse.xpanse.modules.deployment.deployers.opentofu.tofumaker.generated.model.OpenTofuResult;
import org.eclipse.xpanse.modules.deployment.deployers.terraform.utils.TfResourceTransUtils;
import org.eclipse.xpanse.modules.deployment.deployers.opentofu.utils.TfResourceTransUtils;
import org.eclipse.xpanse.modules.deployment.migration.MigrationService;
import org.eclipse.xpanse.modules.deployment.migration.consts.MigrateConstants;
import org.eclipse.xpanse.modules.models.service.deploy.enums.DeployerTaskStatus;
import org.eclipse.xpanse.modules.models.service.deploy.enums.ServiceDeploymentState;
import org.eclipse.xpanse.modules.orchestrator.deployment.DeployResult;
import org.eclipse.xpanse.modules.orchestrator.deployment.DeployTask;
import org.eclipse.xpanse.modules.orchestrator.deployment.DeploymentScenario;
import org.eclipse.xpanse.modules.workflow.utils.WorkflowUtils;
import org.springframework.stereotype.Component;

Expand Down Expand Up @@ -63,26 +64,11 @@ public class OpenTofuDeploymentResultCallbackManager {
private ServiceTemplateStorage serviceTemplateStorage;

/**
* Callback method after deployment is complete.
* Callback method after the deployment task is completed.
*/
public void deployCallback(UUID taskId, OpenTofuResult result) {
log.info("Update database entity with id:{} with open tofu deploy callback result.",
taskId);
DeployServiceEntity deployServiceEntity =
deployServiceEntityHandler.getDeployServiceEntity(taskId);
DeployResult deployResult = handlerCallbackOpenTofuResult(result);
deployResult.setId(taskId);
if (StringUtils.isNotBlank(result.getTerraformState())) {
ServiceTemplateEntity serviceTemplateEntity =
serviceTemplateStorage.getServiceTemplateById(
deployServiceEntity.getServiceTemplateId());
resourceHandlerManager.getResourceHandler(deployServiceEntity.getCsp(),
serviceTemplateEntity.getOcl()
.getDeployment().getKind()).handler(deployResult);
}
DeployServiceEntity updatedDeployServiceEntity =
deployResultManager.updateDeployServiceEntityWithDeployResult(
deployResult, deployServiceEntity);
handleCallbackOpenTofuResult(taskId, result, DeploymentScenario.DEPLOY);
if (ServiceDeploymentState.DEPLOY_FAILED
== updatedDeployServiceEntity.getServiceDeploymentState()) {
DeployTask deployTask =
Expand All @@ -100,26 +86,17 @@ public void deployCallback(UUID taskId, OpenTofuResult result) {
}

/**
* Callback method after the service is destroyed.
* Callback method after the modification task is completed.
*/
public void destroyCallback(UUID taskId, OpenTofuResult result) {
log.info("Update database entity with id:{} with open tofu destroy callback result.",
taskId);
DeployServiceEntity deployServiceEntity =
deployServiceEntityHandler.getDeployServiceEntity(taskId);
DeployResult destroyResult = handlerCallbackOpenTofuResult(result);
destroyResult.setId(taskId);
if (StringUtils.isNotBlank(result.getTerraformState())) {
ServiceTemplateEntity serviceTemplateEntity =
serviceTemplateStorage.getServiceTemplateById(
deployServiceEntity.getServiceTemplateId());
resourceHandlerManager.getResourceHandler(deployServiceEntity.getCsp(),
serviceTemplateEntity.getOcl()
.getDeployment().getKind()).handler(destroyResult);
}
deployResultManager.updateDeployServiceEntityWithDeployResult(destroyResult,
deployServiceEntity);
public void modifyCallback(UUID taskId, OpenTofuResult openTofuResult) {
handleCallbackOpenTofuResult(taskId, openTofuResult, DeploymentScenario.MODIFY);
}

/**
* Callback method after the destroy/rollback/purge task is completed.
*/
public void destroyCallback(UUID taskId, OpenTofuResult result, DeploymentScenario scenario) {
handleCallbackOpenTofuResult(taskId, result, scenario);
ServiceMigrationEntity serviceMigrationEntity =
migrationService.getServiceMigrationEntityByOldServiceId(taskId.toString());
if (Objects.nonNull(serviceMigrationEntity)) {
Expand All @@ -128,47 +105,40 @@ public void destroyCallback(UUID taskId, OpenTofuResult result) {
}
}

/**
* Callback method after the service is modified.
*/
public void modifyCallback(UUID taskId, OpenTofuResult result) {
log.info("Update database entity with id:{} with terraform modify callback result.",
taskId);
private DeployServiceEntity handleCallbackOpenTofuResult(UUID taskId, OpenTofuResult result,
DeploymentScenario scenario) {
log.info("Handle openTofu callback result of task with id:{} in scenario:{}. ", taskId,
scenario.toValue());
DeployServiceEntity deployServiceEntity =
deployServiceEntityHandler.getDeployServiceEntity(taskId);
DeployResult deployResult = handlerCallbackOpenTofuResult(result);
deployResult.setId(taskId);
if (StringUtils.isNotBlank(result.getTerraformState())) {
ServiceTemplateEntity serviceTemplateEntity =
serviceTemplateStorage.getServiceTemplateById(
deployServiceEntity.getServiceTemplateId());
resourceHandlerManager.getResourceHandler(deployServiceEntity.getCsp(),
serviceTemplateEntity.getOcl()
.getDeployment().getKind()).handler(deployResult);
}
deployResultManager.updateDeployServiceEntityWithDeployResult(deployResult,
deployServiceEntity);
}

private DeployResult handlerCallbackOpenTofuResult(OpenTofuResult result) {
DeployResult deployResult = new DeployResult();
deployResult.setId(taskId);
if (Boolean.FALSE.equals(result.getCommandSuccessful())) {
deployResult.setMessage(result.getCommandStdError());
}
deployResult.setState(getDeployerTaskStatus(result.getDeploymentScenario(),
Boolean.TRUE.equals(result.getCommandSuccessful())));
deployResult.setState(getDeployerTaskStatus(scenario, result.getCommandSuccessful()));
deployResult.getPrivateProperties()
.put(TfResourceTransUtils.STATE_FILE_NAME, result.getTerraformState());
if (Objects.nonNull(result.getImportantFileContentMap())) {
deployResult.getPrivateProperties().putAll(result.getImportantFileContentMap());
}
return deployResult;

if (StringUtils.isNotBlank(result.getTerraformState())) {
ServiceTemplateEntity serviceTemplateEntity =
serviceTemplateStorage.getServiceTemplateById(
deployServiceEntity.getServiceTemplateId());
resourceHandlerManager.getResourceHandler(deployServiceEntity.getCsp(),
serviceTemplateEntity.getOcl().getDeployment().getKind()).handler(deployResult);
}
return deployResultManager.updateDeployServiceEntityWithDeployResult(deployResult,
deployServiceEntity);

}

private DeployerTaskStatus getDeployerTaskStatus(
OpenTofuResult.DeploymentScenarioEnum deploymentScenario,
boolean isCommandSuccessful) {
return switch (deploymentScenario) {
private DeployerTaskStatus getDeployerTaskStatus(DeploymentScenario scenario,
Boolean isCommandSuccessful) {
return switch (scenario) {
case DEPLOY -> isCommandSuccessful ? DeployerTaskStatus.DEPLOY_SUCCESS
: DeployerTaskStatus.DEPLOY_FAILED;
case MODIFY -> isCommandSuccessful ? DeployerTaskStatus.MODIFICATION_SUCCESSFUL
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -148,8 +148,6 @@ private void asyncExecDeploy(DeployTask task) {
// Execute the openTofu command asynchronously.
taskExecutor.execute(() -> {
OpenTofuResult openTofuResult = new OpenTofuResult();
openTofuResult.setDeploymentScenario(OpenTofuResult.DeploymentScenarioEnum.fromValue(
task.getDeploymentScenario().toValue()));
try {
executor.deploy();
openTofuResult.setCommandSuccessful(true);
Expand All @@ -171,8 +169,6 @@ private void asyncExecDestroy(DeployTask task, String tfState) {
// Execute the openTofu command asynchronously.
taskExecutor.execute(() -> {
OpenTofuResult openTofuResult = new OpenTofuResult();
openTofuResult.setDeploymentScenario(OpenTofuResult.DeploymentScenarioEnum.fromValue(
task.getDeploymentScenario().toValue()));
try {
executor.destroy();
openTofuResult.setCommandSuccessful(true);
Expand All @@ -183,7 +179,8 @@ private void asyncExecDestroy(DeployTask task, String tfState) {
}
openTofuResult.setTerraformState(executor.getTerraformState());
openTofuResult.setImportantFileContentMap(executor.getImportantFilesContent());
openTofuDeploymentResultCallbackManager.destroyCallback(task.getId(), openTofuResult);
openTofuDeploymentResultCallbackManager.destroyCallback(task.getId(), openTofuResult,
task.getDeploymentScenario());
});
}

Expand All @@ -195,8 +192,6 @@ private void asyncExecModify(DeployTask task, String tfState) {
// Execute the terraform command asynchronously.
taskExecutor.execute(() -> {
OpenTofuResult openTofuResult = new OpenTofuResult();
openTofuResult.setDeploymentScenario(OpenTofuResult.DeploymentScenarioEnum.fromValue(
task.getDeploymentScenario().toValue()));
try {
executor.deploy();
openTofuResult.setCommandSuccessful(true);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import org.eclipse.xpanse.modules.models.response.ResultType;
import org.eclipse.xpanse.modules.models.servicetemplate.ScriptsRepo;
import org.eclipse.xpanse.modules.orchestrator.deployment.DeployTask;
import org.eclipse.xpanse.modules.orchestrator.deployment.DeploymentScenario;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Component;
Expand Down Expand Up @@ -102,23 +103,10 @@ public Map<String, String> getEnvironmentVariables(DeployTask deployTask) {
/**
* generates webhook config.
*/
public WebhookConfig getWebhookConfig(DeployTask deployTask, boolean isDestroyTask) {
public WebhookConfig getWebhookConfigWithTask(DeployTask deployTask) {
WebhookConfig webhookConfig = new WebhookConfig();
String callbackUrl = getClientRequestBaseUrl(port)
+ (isDestroyTask ? tofuMakerConfig.getDestroyCallbackUri()
: tofuMakerConfig.getDeployCallbackUri());
webhookConfig.setUrl(callbackUrl + SPLIT + deployTask.getId());
webhookConfig.setAuthType(WebhookConfig.AuthTypeEnum.NONE);
return webhookConfig;
}

/**
* generates webhook config.
*/
public WebhookConfig getModifyWebhookConfig(DeployTask deployTask) {
WebhookConfig webhookConfig = new WebhookConfig();
String callbackUrl = getClientRequestBaseUrl(port)
+ tofuMakerConfig.getModifyCallbackUri();
+ getDeployerTaskCallbackUrl(deployTask.getDeploymentScenario());
webhookConfig.setUrl(callbackUrl + SPLIT + deployTask.getId());
webhookConfig.setAuthType(WebhookConfig.AuthTypeEnum.NONE);
return webhookConfig;
Expand All @@ -139,4 +127,15 @@ private String getClientRequestBaseUrl(String port) {
throw new OpenTofuMakerRequestFailedException(e.getMessage());
}
}

private String getDeployerTaskCallbackUrl(DeploymentScenario deploymentScenario) {
return switch (deploymentScenario) {
case DEPLOY -> tofuMakerConfig.getDeployCallbackUri();
case MODIFY -> tofuMakerConfig.getModifyCallbackUri();
case DESTROY -> tofuMakerConfig.getDestroyCallbackUri();
case ROLLBACK -> tofuMakerConfig.getRollbackCallbackUri();
case PURGE -> tofuMakerConfig.getPurgeCallbackUri();

};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ private OpenTofuAsyncDeployFromScriptsRequest getDeployFromScriptsRequest(Deploy
request.setScripts(tofuMakerHelper.getFiles(task));
request.setVariables(tofuMakerHelper.getInputVariables(task, true));
request.setEnvVariables(tofuMakerHelper.getEnvironmentVariables(task));
request.setWebhookConfig(tofuMakerHelper.getWebhookConfig(task, false));
request.setWebhookConfig(tofuMakerHelper.getWebhookConfigWithTask(task));
return request;
}

Expand All @@ -91,7 +91,7 @@ private OpenTofuAsyncDeployFromGitRepoRequest getDeployFromGitRepoRequest(Deploy
request.setIsPlanOnly(false);
request.setVariables(tofuMakerHelper.getInputVariables(task, true));
request.setEnvVariables(tofuMakerHelper.getEnvironmentVariables(task));
request.setWebhookConfig(tofuMakerHelper.getWebhookConfig(task, false));
request.setWebhookConfig(tofuMakerHelper.getWebhookConfigWithTask(task));
request.setGitRepoDetails(
tofuMakerHelper.convertOpenTofuScriptGitRepoDetailsFromDeployFromGitRepo(
task.getOcl().getDeployment().getScriptsRepo())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -97,10 +97,7 @@ private OpenTofuAsyncDestroyFromScriptsRequest getDestroyFromScriptsRequest(Depl
request.setTfState(stateFile);
request.setVariables(tofuMakerHelper.getInputVariables(task, false));
request.setEnvVariables(tofuMakerHelper.getEnvironmentVariables(task));
request.setWebhookConfig(tofuMakerHelper.getWebhookConfig(task, true));
request.setDeploymentScenario(
OpenTofuAsyncDestroyFromScriptsRequest.DeploymentScenarioEnum.fromValue(
task.getDeploymentScenario().toValue()));
request.setWebhookConfig(tofuMakerHelper.getWebhookConfigWithTask(task));
return request;
}

Expand All @@ -112,10 +109,7 @@ private OpenTofuAsyncDestroyFromGitRepoRequest getDestroyFromGitRepoRequest(Depl
request.setTfState(stateFile);
request.setVariables(tofuMakerHelper.getInputVariables(task, false));
request.setEnvVariables(tofuMakerHelper.getEnvironmentVariables(task));
request.setWebhookConfig(tofuMakerHelper.getWebhookConfig(task, true));
request.setDeploymentScenario(
OpenTofuAsyncDestroyFromGitRepoRequest.DeploymentScenarioEnum.fromValue(
task.getDeploymentScenario().toValue()));
request.setWebhookConfig(tofuMakerHelper.getWebhookConfigWithTask(task));
request.setGitRepoDetails(
tofuMakerHelper.convertOpenTofuScriptGitRepoDetailsFromDeployFromGitRepo(
task.getOcl().getDeployment().getScriptsRepo()));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ private OpenTofuAsyncModifyFromScriptsRequest getModifyFromScriptsRequest(Deploy
request.setTfState(stateFile);
request.setVariables(tofuMakerHelper.getInputVariables(task, false));
request.setEnvVariables(tofuMakerHelper.getEnvironmentVariables(task));
request.setWebhookConfig(tofuMakerHelper.getModifyWebhookConfig(task));
request.setWebhookConfig(tofuMakerHelper.getWebhookConfigWithTask(task));
return request;
}

Expand All @@ -108,7 +108,7 @@ private OpenTofuAsyncModifyFromGitRepoRequest getModifyFromGitRepoRequest(Deploy
request.setTfState(stateFile);
request.setVariables(tofuMakerHelper.getInputVariables(task, false));
request.setEnvVariables(tofuMakerHelper.getEnvironmentVariables(task));
request.setWebhookConfig(tofuMakerHelper.getModifyWebhookConfig(task));
request.setWebhookConfig(tofuMakerHelper.getWebhookConfigWithTask(task));
request.setGitRepoDetails(
tofuMakerHelper.convertOpenTofuScriptGitRepoDetailsFromDeployFromGitRepo(
task.getOcl().getDeployment().getScriptsRepo()));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,10 @@ public class TofuMakerConfig {
@Value("${webhook.tofu-maker.destroyCallbackUri}")
private String destroyCallbackUri;

@Value("${webhook.tofu-maker.rollbackCallbackUri}")
private String rollbackCallbackUri;

@Value("${webhook.tofu-maker.purgeCallbackUri}")
private String purgeCallbackUri;

}

0 comments on commit 286f168

Please sign in to comment.