func setValuesFromState()

in cmd/hub/compose/elaborate.go [433:494]


func setValuesFromState(parameters []manifest.Parameter, st *state.StateManifest, useStateStackParameters bool) {
	stateStackOutputs := make(map[string]interface{})

	// for apps installed on overlay stack we must look into
	// stack parameters to obtain kubernetes credentials
	if useStateStackParameters {
		for _, parameter := range st.StackParameters {
			// should we filter out `link` parameters?
			if parameter.Component == "" && !util.Empty(parameter.Value) {
				stateStackOutputs[parameter.Name] = parameter.Value
			}
		}
	}
	for _, output := range st.StackOutputs {
		name := output.Name
		if i := strings.Index(name, ":"); i > 0 && i < len(name)-1 {
			name = name[i+1:]
		}
		stateStackOutputs[name] = output.Value
	}

	kubeOutputs := findKubernetesProvider(st)

	for i := range parameters {
		parameter := &parameters[i]
		if strings.HasPrefix(parameter.Name, "hub.") {
			continue
		}
		if util.Empty(parameter.Value) {
			value, exist := stateStackOutputs[parameter.Name]
			if exist {
				if parameter.FromEnv == "" {
					parameter.Value = value
				} else {
					if !util.Empty(parameter.Default) {
						pDefault := util.String(parameter.Default)
						pValue := util.String(value)
						if pDefault != pValue {
							qName := parameter.QName()
							util.Warn("Overwriting empty parameter `%s` `default: %s` with state value `default: %s` (due to `fromEnv: %s`)",
								qName,
								util.Trim(util.MaybeMaskedValue(config.Trace, qName, pDefault)),
								util.Trim(util.MaybeMaskedValue(config.Trace, qName, pValue)),
								parameter.FromEnv)
						}
					}
					parameter.Default = value
				}
			} else {
				// a special case for Kubernetes
				if len(kubeOutputs) > 0 && util.Contains(kube.KubernetesParameters, parameter.Name) {
					for _, output := range kubeOutputs {
						if output.Name == parameter.Name {
							parameter.Value = output.Value
							break
						}
					}
				}
			}
		}
	}
}