in parsers/manifest_parser.go [131:189]
func (dm *YAMLParser) composeInputs(inputs map[string]Parameter, packageInputs PackageInputs, manifestFilePath string) (whisk.KeyValueArr, error) {
var errorParser error
keyValArr := make(whisk.KeyValueArr, 0)
var inputsWithoutValue []string
var paramsCLI interface{}
if len(utils.Flags.Param) > 0 {
paramsCLI, errorParser = utils.GetJSONFromStrings(utils.Flags.Param, false)
if errorParser != nil {
return nil, errorParser
}
}
for name, param := range inputs {
var keyVal whisk.KeyValue
// keyvalue key is set to parameter name
keyVal.Key = name
// parameter on CLI takes the highest precedence such that
// input variables gets values from CLI first
if paramsCLI != nil {
// check if this particular input is specified on CLI
if v, ok := paramsCLI.(map[string]interface{})[name]; ok {
keyVal.Value = wskenv.ConvertSingleName(v.(string))
}
}
// if those inputs are not specified on CLI,
// read their values from the manifest file
if keyVal.Value == nil {
keyVal.Value, errorParser = ResolveParameter(name, ¶m, manifestFilePath)
if errorParser != nil {
return nil, errorParser
}
if param.Type == STRING && param.Value != nil {
if keyVal.Value == getTypeDefaultValue(param.Type) {
if packageInputs.Inputs != nil {
n := wskenv.GetEnvVarName(param.Value.(string))
if v, ok := packageInputs.Inputs[n]; ok {
keyVal.Value = v.Value.(string)
}
}
}
}
}
if keyVal.Value != nil {
keyValArr = append(keyValArr, keyVal)
}
if param.Required && keyVal.Value == getTypeDefaultValue(param.Type) {
inputsWithoutValue = append(inputsWithoutValue, name)
}
}
if len(inputsWithoutValue) > 0 {
errMessage := wski18n.T(wski18n.ID_ERR_REQUIRED_INPUTS_MISSING_VALUE_X_inputs_X,
map[string]interface{}{
wski18n.KEY_INPUTS: strings.Join(inputsWithoutValue, ", ")})
return nil, wskderrors.NewYAMLFileFormatError(manifestFilePath, errMessage)
}
return keyValArr, nil
}