in src/AWS.Deploy.CLI/Commands/DeployCommand.cs [627:704]
private async Task ConfigureDeploymentFromCli(Recommendation recommendation, IEnumerable<OptionSettingItem> configurableOptionSettings, bool showAdvancedSettings)
{
_toolInteractiveService.WriteLine(string.Empty);
while (true)
{
var message = "Current settings (select number to change its value)";
var title = message + Environment.NewLine + new string('-', message.Length);
_toolInteractiveService.WriteLine(title);
var optionSettings =
configurableOptionSettings
.Where(x => (!recommendation.IsExistingCloudApplication || x.Updatable) && (!x.AdvancedSetting || showAdvancedSettings) && _optionSettingHandler.IsOptionSettingDisplayable(recommendation, x))
.ToArray();
for (var i = 1; i <= optionSettings.Length; i++)
{
DisplayOptionSetting(recommendation, optionSettings[i - 1], i, optionSettings.Length, DisplayOptionSettingsMode.Editable);
}
_toolInteractiveService.WriteLine();
if (!showAdvancedSettings)
{
// Don't bother showing 'more' for advanced options if there aren't any advanced options.
if (configurableOptionSettings.Any(x => x.AdvancedSetting))
{
_toolInteractiveService.WriteLine("Enter 'more' to display Advanced settings. ");
}
}
_toolInteractiveService.WriteLine("Or press 'Enter' to deploy:");
var input = _toolInteractiveService.ReadLine();
// advanced - break to main loop to reprint menu
if (input.Trim().ToLower().Equals("more"))
{
showAdvancedSettings = true;
_toolInteractiveService.WriteLine();
continue;
}
// deploy case, nothing more to configure
if (string.IsNullOrEmpty(input))
{
var settingValidatorFailedResults = _optionSettingHandler.RunOptionSettingValidators(recommendation);
var recipeValidatorFailedResults = _recipeHandler.RunRecipeValidators(recommendation, _session);
if (!settingValidatorFailedResults.Any() && !recipeValidatorFailedResults.Any())
{
// validation successful
// deployment configured
return;
}
_toolInteractiveService.WriteLine();
_toolInteractiveService.WriteErrorLine("The deployment configuration needs to be adjusted before it can be deployed:");
foreach (var result in settingValidatorFailedResults)
_toolInteractiveService.WriteErrorLine($" - {result.ValidationFailedMessage}");
foreach (var result in recipeValidatorFailedResults)
_toolInteractiveService.WriteErrorLine($" - {result.ValidationFailedMessage}");
_toolInteractiveService.WriteLine();
_toolInteractiveService.WriteErrorLine("Please adjust your settings");
}
// configure option setting
if (int.TryParse(input, out var selectedNumber) &&
selectedNumber >= 1 &&
selectedNumber <= optionSettings.Length)
{
await ConfigureDeploymentFromCli(recommendation, optionSettings[selectedNumber - 1]);
}
_toolInteractiveService.WriteLine();
}
}