public async Task SwapEnvironmentCnamesAsync()
{
using (var ebClient = new AmazonElasticBeanstalkClient(creds, configurationProvider.RegionEndpoint))
{
loggerProvider.GetLogger().Debug("Swapping Environment CNAMEs...");
var describeEnvironmentsResponse = await ebClient.DescribeEnvironmentsAsync();
var current = describeEnvironmentsResponse.Environments
.SingleOrDefault(env =>
env?.CNAME != null && env.CNAME.StartsWith(currentCNamePrefix, StringComparison.CurrentCultureIgnoreCase) &&
env.Status == EnvironmentStatus.Ready);
var next = describeEnvironmentsResponse.Environments
.SingleOrDefault(env =>
env?.CNAME != null && env.CNAME.StartsWith(nextCNamePrefix, StringComparison.CurrentCultureIgnoreCase) &&
env.Status == EnvironmentStatus.Ready);
if (current == null)
{
var environments = JsonConvert.SerializeObject(describeEnvironmentsResponse.Environments);
var msg = $"Error state: On environment CNAME swap, could not find environment with CNAME: {currentCNamePrefix} in a READY state. Environments: {environments}";
loggerProvider.GetLogger().Error(msg);
throw new ElasticBeanstalkDeployerException(msg);
}
if (next == null)
{
var environments = JsonConvert.SerializeObject(describeEnvironmentsResponse.Environments);
var msg = $"Error state: On environment CNAME swap, could not find environment with CNAME: {nextCNamePrefix} in a READY state. Environments: {environments}";
loggerProvider.GetLogger().Error(msg);
throw new ElasticBeanstalkDeployerException(msg);
}
var swapEnvironmentCnamesRequest = new SwapEnvironmentCNAMEsRequest
{
DestinationEnvironmentId = next.EnvironmentId,
SourceEnvironmentId = current.EnvironmentId,
};
await ebClient.SwapEnvironmentCNAMEsAsync(swapEnvironmentCnamesRequest);
await WaitForCnameSwapToCompleteAsync(next.EnvironmentId, next.CNAME, current.EnvironmentId, current.CNAME);
}
}