in src/AWS.Deploy.CLI/Commands/DeployCommand.cs [363:437]
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 (optionSetting == null)
throw new OptionSettingItemDoesNotExistException(DeployToolErrorCode.OptionSettingItemDoesNotExistInRecipe, $"The Option Setting Item {optionSettingJsonPath} does not exist.");
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;
case OptionSettingValueType.KeyValue:
var optionSettingKey = optionSettingJsonPath.Split(".").Last();
var existingValue = recommendation.GetOptionSettingValue<Dictionary<string, string>>(optionSetting);
existingValue ??= new Dictionary<string, string>();
existingValue[optionSettingKey] = optionSettingValue;
settingValue = existingValue;
break;
default:
throw new InvalidOverrideValueException(DeployToolErrorCode.InvalidValueForOptionSettingItem, $"Invalid value {optionSettingValue} for option setting item {optionSettingJsonPath}");
}
}
catch (Exception exception)
{
_toolInteractiveService.WriteDebugLine(exception.PrettyPrint());
throw new InvalidOverrideValueException(DeployToolErrorCode.InvalidValueForOptionSettingItem, $"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, _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(DeployToolErrorCode.DeploymentConfigurationNeedsAdjusting, errorMessage.Trim());
}