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 := ¶meters[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
}
}
}
}
}
}
}