public async Task <object> Execute(Recommendation recommendation, OptionSettingItem optionSetting)
        {
            var currentValue             = recommendation.GetOptionSettingValue(optionSetting);
            var applicationOptionSetting = recommendation.GetOptionSetting(optionSetting.ParentSettingId);

            var applicationName = recommendation.GetOptionSettingValue(applicationOptionSetting) as string;
            var environments    = await _awsResourceQueryer.ListOfElasticBeanstalkEnvironments(_session, applicationName);

            var userResponse = _consoleUtilities.AskUserToChooseOrCreateNew(
                options: environments.Select(env => env.EnvironmentName),
                title: "Select Elastic Beanstalk environment to deploy to:",
                askNewName: true,
                defaultNewName: currentValue.ToString());

            return(userResponse.SelectedOption ?? userResponse.NewName);
        }
Esempio n. 2
0
        /// <summary>
        /// This method is used to set the values for Option Setting Items when a deployment is being performed using a user specifed config file.
        /// </summary>
        /// <param name="recommendation">The selected recommendation settings used for deployment <see cref="Recommendation"/></param>
        /// <param name="userDeploymentSettings">The deserialized object from the user provided config file. <see cref="UserDeploymentSettings"/></param>
        private void ConfigureDeploymentFromConfigFile(Recommendation recommendation, UserDeploymentSettings userDeploymentSettings)
        {
            foreach (var entry in userDeploymentSettings.LeafOptionSettingItems)
            {
                var optionSettingJsonPath = entry.Key;
                var optionSettingValue    = entry.Value;

                var optionSetting = recommendation.GetOptionSetting(optionSettingJsonPath);

                if (!recommendation.IsExistingCloudApplication || optionSetting.Updatable)
                {
                    object settingValue;
                    try
                    {
                        switch (optionSetting.Type)
                        {
                        case OptionSettingValueType.String:
                            settingValue = optionSettingValue;
                            break;

                        case OptionSettingValueType.Int:
                            settingValue = int.Parse(optionSettingValue);
                            break;

                        case OptionSettingValueType.Bool:
                            settingValue = bool.Parse(optionSettingValue);
                            break;

                        case OptionSettingValueType.Double:
                            settingValue = double.Parse(optionSettingValue);
                            break;

                        default:
                            throw new InvalidOverrideValueException($"Invalid value {optionSettingValue} for option setting item {optionSettingJsonPath}");
                        }
                    }
                    catch (Exception)
                    {
                        throw new InvalidOverrideValueException($"Invalid value {optionSettingValue} for option setting item {optionSettingJsonPath}");
                    }

                    optionSetting.SetValueOverride(settingValue);

                    SetDeploymentBundleOptionSetting(recommendation, optionSetting.Id, settingValue);
                }
            }

            var validatorFailedResults =
                recommendation.Recipe
                .BuildValidators()
                .Select(validator => validator.Validate(recommendation.Recipe, _session))
                .Where(x => !x.IsValid)
                .ToList();

            if (!validatorFailedResults.Any())
            {
                // validation successful
                // deployment configured
                return;
            }

            var errorMessage = "The deployment configuration needs to be adjusted before it can be deployed:" + Environment.NewLine;

            foreach (var result in validatorFailedResults)
            {
                errorMessage += result.ValidationFailedMessage + Environment.NewLine;
            }
            throw new InvalidUserDeploymentSettingsException(errorMessage.Trim());
        }