func LockParameters()

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(&parameter, []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
}