in src/AWS.Deploy.CLI/ServerMode/Controllers/DeploymentController.cs [549:603]
public async Task<IActionResult> StartDeployment(string sessionId)
{
var state = _stateServer.Get(sessionId);
if (state == null)
{
return NotFound($"Session ID {sessionId} not found.");
}
var serviceProvider = CreateSessionServiceProvider(state);
var orchestratorSession = CreateOrchestratorSession(state);
var orchestrator = CreateOrchestrator(state, serviceProvider);
if (state.SelectedRecommendation == null)
throw new SelectedRecommendationIsNullException("The selected recommendation is null or invalid.");
var optionSettingHandler = serviceProvider.GetRequiredService<IOptionSettingHandler>();
var recipeHandler = serviceProvider.GetRequiredService<IRecipeHandler>();
var settingValidatorFailedResults = optionSettingHandler.RunOptionSettingValidators(state.SelectedRecommendation);
var recipeValidatorFailedResults = recipeHandler.RunRecipeValidators(state.SelectedRecommendation, orchestratorSession);
if (settingValidatorFailedResults.Any() || recipeValidatorFailedResults.Any())
{
var settingValidationErrorMessage = $"The deployment configuration needs to be adjusted before it can be deployed:{Environment.NewLine}";
foreach (var result in settingValidatorFailedResults)
settingValidationErrorMessage += $" - {result.ValidationFailedMessage}{Environment.NewLine}{Environment.NewLine}";
foreach (var result in recipeValidatorFailedResults)
settingValidationErrorMessage += $" - {result.ValidationFailedMessage}{Environment.NewLine}{Environment.NewLine}";
settingValidationErrorMessage += $"{Environment.NewLine}Please adjust your settings";
return Problem(settingValidationErrorMessage);
}
var systemCapabilityEvaluator = serviceProvider.GetRequiredService<ISystemCapabilityEvaluator>();
var capabilities = await systemCapabilityEvaluator.EvaluateSystemCapabilities(state.SelectedRecommendation);
var missingCapabilitiesMessage = "";
foreach (var capability in capabilities)
{
missingCapabilitiesMessage = $"{missingCapabilitiesMessage}{capability.GetMessage()}{Environment.NewLine}";
}
if (capabilities.Any())
return Problem($"Unable to start deployment due to missing system capabilities.{Environment.NewLine}{missingCapabilitiesMessage}", statusCode: Microsoft.AspNetCore.Http.StatusCodes.Status424FailedDependency);
// Because we're starting a deployment, clear the cached system capabilities checks
// in case the deployment fails and the user reruns it after modifying Docker or Node
systemCapabilityEvaluator.ClearCachedCapabilityChecks();
var task = new DeployRecommendationTask(orchestratorSession, orchestrator, state.ApplicationDetails, state.SelectedRecommendation);
state.DeploymentTask = task.Execute();
return Ok();
}