func()

in deployers/projectreader.go [33:95]


func (deployer *ServiceDeployer) UpdatePackageInputs() error {
	var paramsCLI interface{}
	var err error
	var inputsWithoutValue []string

	// check if any inputs/parameters are specified in CLI using --param or --param-file
	// store params in Key/value pairs
	if len(utils.Flags.Param) > 0 {
		paramsCLI, err = utils.GetJSONFromStrings(utils.Flags.Param, false)
		if err != nil {
			return err
		}
	}

	if paramsCLI != nil {
		// iterate over each package to update its set of inputs with CLI
		for _, pkg := range deployer.Deployment.Packages {
			// iterate over each input of type Parameter
			for name, param := range pkg.Inputs.Inputs {
				inputValue := param.Value
				// check if this particular input is specified on CLI
				if v, ok := paramsCLI.(map[string]interface{})[name]; ok {
					inputValue = wskenv.InterpolateStringWithEnvVar(v)
				}
				param.Value = inputValue
				pkg.Inputs.Inputs[name] = param
			}
		}
	}
	for _, pkg := range deployer.Deployment.Packages {
		keyValArr := make([]whisk.KeyValue, 0)
		if pkg.Inputs.Inputs != nil || len(pkg.Inputs.Inputs) != 0 {
			for k, v := range pkg.Inputs.Inputs {
				if v.Required {
					if parsers.IsTypeDefaultValue(v.Type, v.Value) {
						inputsWithoutValue = append(inputsWithoutValue, k)
					}
				}
				if _, ok := deployer.ProjectInputs[k]; !ok {
					keyVal := whisk.KeyValue{
						Key:   k,
						Value: v.Value,
					}
					keyValArr = append(keyValArr, keyVal)
				}
			}
		}
		pkg.Package.Parameters = keyValArr
	}

	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, ", ")})
		if utils.Flags.Report {
			wskprint.PrintOpenWhiskError(errMessage)
		} else {
			return wskderrors.NewYAMLFileFormatError(deployer.ManifestPath, errMessage)
		}
	}

	return nil
}