in internal/cmd/deploy/util.go [51:135]
func getParameters(template cft.Template, cliParams map[string]string, old []types.Parameter, stackExists bool) []types.Parameter {
newParams := make([]types.Parameter, 0)
oldMap := make(map[string]types.Parameter)
for _, param := range old {
// Ignore NoEcho values
if stackExists || ptr.ToString(param.ParameterValue) != "****" {
oldMap[ptr.ToString(param.ParameterKey)] = param
}
}
if params, ok := template.Map()["Parameters"]; ok {
// Check we don't have any unknown params
for k := range cliParams {
if _, ok := params.(map[string]interface{})[k]; !ok {
panic(fmt.Errorf("unknown parameter: %s", k))
}
}
// Decide on a default value
for k, p := range params.(map[string]interface{}) {
// New variable so we don't mess up the pointers below
param := p.(map[string]interface{})
value := ""
usePrevious := false
// Decide if we have an existing value
if cliParam, ok := cliParams[k]; ok {
value = cliParam
} else {
extra := ""
if oldParam, ok := oldMap[k]; ok {
extra = fmt.Sprintf(" (existing value: %s)", fmt.Sprint(*oldParam.ParameterValue))
if stackExists {
usePrevious = true
} else {
value = *oldParam.ParameterValue
}
} else if defaultValue, ok := param["Default"]; ok {
extra = fmt.Sprintf(" (default value: %s)", fmt.Sprint(defaultValue))
value = fmt.Sprint(defaultValue)
} else if yes {
panic(fmt.Errorf("no default or existing value for parameter '%s'. Set a default, supply a --params flag, or deploy without the --yes flag", k))
}
if !yes {
spinner.Pause()
prompt := fmt.Sprintf("Enter a value for parameter '%s'", k)
if description, ok := param["Description"]; ok {
prompt += fmt.Sprintf(" \"%s\"", description)
}
prompt += fmt.Sprintf("%s:", extra)
newValue := console.Ask(prompt)
if newValue != "" {
value = newValue
usePrevious = false
}
}
}
if usePrevious {
newParams = append(newParams, types.Parameter{
ParameterKey: ptr.String(k),
UsePreviousValue: ptr.Bool(true),
})
} else {
newParams = append(newParams, types.Parameter{
ParameterKey: ptr.String(k),
ParameterValue: ptr.String(value),
})
}
}
}
spinner.Resume()
return newParams
}