in src/AWS.Deploy.CLI/Commands/TypeHints/InstanceTypeCommand.cs [75:132]
public async Task<object> Execute(Recommendation recommendation, OptionSettingItem optionSetting)
{
var instanceTypes = await GetData();
var instanceTypeDefaultValue = _optionSettingHandler.GetOptionSettingDefaultValue<string>(recommendation, optionSetting);
if (instanceTypes == null)
{
return _consoleUtilities.AskUserForValue("Select EC2 Instance Type:", instanceTypeDefaultValue ?? string.Empty, true);
}
var freeTierEligibleAnswer = _consoleUtilities.AskYesNoQuestion("Do you want the EC2 instance to be free tier eligible?", "true");
var freeTierEligible = freeTierEligibleAnswer == YesNo.Yes;
string architecture;
if (string.Equals(_platform, EC2.FILTER_PLATFORM_WINDOWS, System.StringComparison.OrdinalIgnoreCase))
{
architecture = EC2.FILTER_ARCHITECTURE_X86_64;
}
else
{
var architectureAllowedValues = new List<string> { EC2.FILTER_ARCHITECTURE_X86_64, EC2.FILTER_ARCHITECTURE_ARM64 };
architecture = _consoleUtilities.AskUserToChoose(architectureAllowedValues, "The architecture of the EC2 instances created for the environment.", EC2.FILTER_ARCHITECTURE_X86_64);
}
var cpuCores = instanceTypes
.Where(x => x.FreeTierEligible.Equals(freeTierEligible))
.Where(x => x.ProcessorInfo.SupportedArchitectures.Contains(architecture))
.Select(x => x.VCpuInfo.DefaultCores).Distinct().OrderBy(x => x).ToList();
if (cpuCores.Count == 0)
return _consoleUtilities.AskUserForValue("Select EC2 Instance Type:", instanceTypeDefaultValue ?? string.Empty, true);
var cpuCoreCount = int.Parse(_consoleUtilities.AskUserToChoose(cpuCores.Select(x => x.ToString()).ToList(), "Select EC2 Instance CPU Cores:", "1"));
var memory = instanceTypes
.Where(x => x.FreeTierEligible.Equals(freeTierEligible))
.Where(x => x.ProcessorInfo.SupportedArchitectures.Contains(architecture))
.Where(x => x.VCpuInfo.DefaultCores.Equals(cpuCoreCount))
.Select(x => x.MemoryInfo.SizeInMiB).Distinct().OrderBy(x => x).ToList();
if (memory.Count == 0)
return _consoleUtilities.AskUserForValue("Select EC2 Instance Type:", instanceTypeDefaultValue ?? string.Empty, true);
var memoryCount = _consoleUtilities.AskUserToChoose(memory.Select(x => x.ToString()).ToList(), "Select EC2 Instance Memory:", "1024");
var availableInstanceTypes = instanceTypes
.Where(x => x.FreeTierEligible.Equals(freeTierEligible))
.Where(x => x.ProcessorInfo.SupportedArchitectures.Contains(architecture))
.Where(x => x.VCpuInfo.DefaultCores.Equals(cpuCoreCount))
.Where(x => x.MemoryInfo.SizeInMiB.Equals(long.Parse(memoryCount)))
.Select(x => x.InstanceType.Value).Distinct().OrderBy(x => x).ToList();
if (availableInstanceTypes.Count == 0)
return _consoleUtilities.AskUserForValue("Select EC2 Instance Type:", instanceTypeDefaultValue ?? string.Empty, true);
var userResponse = _consoleUtilities.AskUserToChoose(availableInstanceTypes, "Select EC2 Instance Type:", availableInstanceTypes.First());
return userResponse;
}