in src/AWS.Deploy.Orchestration/ServiceHandlers/AWSElasticBeanstalkHandler.cs [397:449]
private async Task<bool> WaitForEnvironmentUpdateCompletion(string applicationName, string environmentName, DateTime startingEventDate)
{
_interactiveService.LogInfoMessage("Waiting for environment update to complete");
var success = true;
var environment = new EnvironmentDescription();
var lastPrintedEventDate = startingEventDate;
var requestEvents = new DescribeEventsRequest
{
ApplicationName = applicationName,
EnvironmentName = environmentName
};
var requestEnvironment = new DescribeEnvironmentsRequest
{
ApplicationName = applicationName,
EnvironmentNames = new List<string> { environmentName }
};
var ebClient = _awsClientFactory.GetAWSClient<IAmazonElasticBeanstalk>();
do
{
Thread.Sleep(5000);
var responseEnvironments = await ebClient.DescribeEnvironmentsAsync(requestEnvironment);
if (responseEnvironments.Environments.Count == 0)
throw new AWSResourceNotFoundException(DeployToolErrorCode.BeanstalkEnvironmentDoesNotExist, $"Failed to find environment {environmentName} belonging to application {applicationName}");
environment = responseEnvironments.Environments[0];
requestEvents.StartTimeUtc = lastPrintedEventDate;
var responseEvents = await ebClient.DescribeEventsAsync(requestEvents);
if (responseEvents.Events.Any())
{
for (var i = responseEvents.Events.Count - 1; i >= 0; i--)
{
var evnt = responseEvents.Events[i];
if (evnt.EventDate <= lastPrintedEventDate)
continue;
_interactiveService.LogInfoMessage(evnt.EventDate.ToLocalTime() + " " + evnt.Severity + " " + evnt.Message);
if (evnt.Severity == EventSeverity.ERROR || evnt.Severity == EventSeverity.FATAL)
{
success = false;
}
}
lastPrintedEventDate = responseEvents.Events[0].EventDate;
}
} while (environment.Status == EnvironmentStatus.Launching || environment.Status == EnvironmentStatus.Updating);
return success;
}