in parsers/manifest_parser.go [308:363]
func (dm *YAMLParser) composePackageInputs(projectInputs map[string]Parameter, rawInputs map[string]Parameter, filepath string) (map[string]Parameter, whisk.KeyValueArr, error) {
inputs := make(map[string]Parameter, 0)
// package inherits all project inputs
for n, param := range projectInputs {
inputs[n] = param
}
// iterate over package inputs
for name, i := range rawInputs {
value, err := ResolveParameter(name, &i, filepath)
if err != nil {
return nil, nil, err
}
// if value is set to default value for its type,
// check for input key being an env. variable itself
if value == getTypeDefaultValue(i.Type) {
value = wskenv.InterpolateStringWithEnvVar("${" + name + "}")
}
// if at this point, still value is set to default value of its type
// check if input key is defined under Project Inputs
if value == getTypeDefaultValue(i.Type) {
if i.Type == STRING && i.Value != nil {
n := wskenv.GetEnvVarName(i.Value.(string))
if v, ok := projectInputs[n]; ok {
value = v.Value.(string)
}
}
}
// create a Parameter object based on the package inputs
// resolve the value using env. variables
// if value is not specified, treat input key as an env. variable
// check if input key is defined in environment
// else set it to its default value based on the type for now
// the input value will be updated if its specified in deployment
// or on CLI using --param or --param-file
i.Value = value
inputs[name] = i
}
// create an array of Key/Value pair with inputs
// inputs name as key and with its value if its not nil
keyValArr := make(whisk.KeyValueArr, 0)
for name, param := range inputs {
var keyVal whisk.KeyValue
keyVal.Key = name
keyVal.Value = param.Value
if keyVal.Value != nil {
keyValArr = append(keyValArr, keyVal)
}
}
return inputs, keyValArr, nil
}