public static async Task<Image> FindImageAsync(IAmazonEC2 ec2Client, ImageDescriptor descriptor)
{
AmazonEC2Config config = CreateConfigFromClient(ec2Client, descriptor);
await LoadDefinitionsFromWebAsync(config).ConfigureAwait(false);
int retryCount = 1;
Image image = null;
do
{
var result = await ec2Client.DescribeImagesAsync(CreateDescribeImagesRequest(descriptor)).ConfigureAwait(false);
if (result.Images.Any())
image = result.Images.OrderByDescending(x => x.Name).First();
else
{
// backing control file may be outdated, reload and try once more
if (retryCount == 1)
{
Logger.InfoFormat("FindImage - DescribeImages call for image descriptor '{0}' (name prefix '{1}') yielded no results, assuming outdated control file and reloading",
descriptor.DefinitionKey,
descriptor.NamePrefix);
lock (LOCK_OBJECT)
{
ImageDefinitionsLoaded = false;
}
await LoadDefinitionsFromWebAsync(config).ConfigureAwait(false);
}
retryCount++;
}
} while (image == null && retryCount <= 2);
if (image == null)
Logger.InfoFormat("FindImage - failed to find valid AMI image for descriptor '{0}' (name prefix '{1}')",
descriptor.DefinitionKey,
descriptor.NamePrefix);
return image;
}
}