public async Task Execute()

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;
        }