public async Task SingleSiteDockerApplicationEnsureSetupAsync(List<ConfigurationOptionSetting> optionSettings)
{
using (var ebClient = new AmazonElasticBeanstalkClient(creds, configurationProvider.RegionEndpoint))
{
var describeEnvironmentsResponse = await ebClient.DescribeEnvironmentsAsync();
var current = describeEnvironmentsResponse.Environments
.SingleOrDefault(env =>
env?.CNAME != null && env.CNAME.StartsWith(currentCNamePrefix, StringComparison.CurrentCultureIgnoreCase) &&
env.Status == EnvironmentStatus.Ready);
loggerProvider.GetLogger().Debug("Current: {@current}", current);
List<Task> terminatingTasks = new List<Task>();
if (current != null && current.Health != EnvironmentHealth.Green)
{
loggerProvider.GetLogger().Debug("Current Environment is not in green state. Deleting environment.");
var terminateCurrentEnvTask = ebClient.TerminateEnvironmentAsync(new TerminateEnvironmentRequest { EnvironmentId = current.EnvironmentId, TerminateResources = true });
terminatingTasks.Add(terminateCurrentEnvTask);
current = null;
}
if (terminatingTasks.Count > 0)
{
await Task.WhenAll(terminatingTasks);
await EnsureTerminationsCompleteAsync();
}
if (current != null)
{
loggerProvider.GetLogger().Debug("Environment is set up properly");
return;
}
loggerProvider.GetLogger().Debug("No environment is up - create");
Task.WaitAll(new List<Task>
{
CreateDockerCurrentEnvironmentAsync("A", optionSettings),
}.ToArray());
}
}