in cmd/hub/parameters/eval.go [35:84]
func LockParameters(parameters []manifest.Parameter,
extraValues []manifest.Parameter,
ask func(manifest.Parameter) (interface{}, error)) (LockedParameters, []error) {
for _, parameter := range parameters {
if !util.Empty(parameter.Default) && parameter.Kind != "user" {
kind := ""
if parameter.Kind != "" {
kind = fmt.Sprintf(" but `%s`", parameter.Kind)
}
util.Warn("Parameter `%s` default value `%s` won't be used as parameter is not `user` kind%s",
parameter.Name, util.Wrap(util.String(parameter.Default)), kind)
}
}
errs := make([]error, 0)
// populate empty user-level parameters from environment or user input
for i, parameter := range parameters {
if util.Empty(parameter.Value) && parameter.Kind == "user" && len(parameter.Parameters) == 0 {
value, err := ask(parameter)
parameters[i].Value = value
if err != nil {
errs = append(errs, err)
}
}
}
// create key-value map for parameter expansion
kv := make(map[string]interface{})
for _, extra := range extraValues {
kv[extra.QName()] = extra.Value
}
for _, parameter := range parameters {
kv[parameter.QName()] = parameter.Value
}
// expand, check for cycles
locked := make(LockedParameters)
for _, parameter := range parameters {
fqName := parameter.QName()
if RequireExpansion(parameter.Value) && parameter.Kind != "link" {
errs = append(errs, ExpandParameter(¶meter, []string{}, kv)...)
kv[fqName] = parameter.Value
}
locked[fqName] = LockedParameter{Name: parameter.Name, Component: parameter.Component,
Value: parameter.Value, Env: parameter.Env}
}
if config.Debug && len(locked) > 0 {
log.Print("Parameters locked:")
PrintLockedParameters(locked)
}
return locked, errs
}