This is an automated email from the ASF dual-hosted git repository. daisyguo pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-openwhisk-wskdeploy.git
The following commit(s) were added to refs/heads/master by this push: new 0eda06c Fix single-line parameter to look for Type names (and default with proper value) (#511) 0eda06c is described below commit 0eda06cd62c4981d253df1fca5a016dfd3706253 Author: Matt Rutkowski <mrutk...@us.ibm.com> AuthorDate: Tue Sep 19 00:04:01 2017 -0500 Fix single-line parameter to look for Type names (and default with proper value) (#511) * Update guide to include hello world variants, improve intrapage links. * Update guide to include hello world variants, improve intrapage links. * Update guide to include hello world variants, improve intrapage links. * Update guide to include hello world variants, improve intrapage links. * fix some docs; assure single-line parms works. * fix some docs; assure single-line parms works. * fix some docs; assure single-line parms works. --- docs/examples/manifest_hello_world.yaml | 9 +++++++++ docs/examples/src/hello.js | 4 ++++ docs/programming_guide.md | 23 ++++++++++++----------- docs/wskdeploy_debugging.md | 11 +++++++++++ parsers/manifest_parser.go | 27 ++++++++++++++++++++++----- 5 files changed, 58 insertions(+), 16 deletions(-) diff --git a/docs/examples/manifest_hello_world.yaml b/docs/examples/manifest_hello_world.yaml new file mode 100644 index 0000000..80f60f0 --- /dev/null +++ b/docs/examples/manifest_hello_world.yaml @@ -0,0 +1,9 @@ +# Example 1: Basic Hello World using NodeJS (JavaScript) +package: + hello_world_package: + # name: hello_world_package + version: 1.0 + license: Apache-2.0 + actions: + hello_world: + function: src/hello.js diff --git a/docs/examples/src/hello.js b/docs/examples/src/hello.js new file mode 100644 index 0000000..55d282f --- /dev/null +++ b/docs/examples/src/hello.js @@ -0,0 +1,4 @@ +function main(params) { + msg = "Hello, " + params.name + " from " + params.place; + return { payload: msg }; +} diff --git a/docs/programming_guide.md b/docs/programming_guide.md index 41c827f..b447f7e 100644 --- a/docs/programming_guide.md +++ b/docs/programming_guide.md @@ -1,32 +1,33 @@ # ```wskdeploy``` utility by example _A step-by-step guide for deploying Apache OpenWhisk applications using Package Manifest files._ -This guide will walk you through how to describe OpenWhisk applications using the [OpenWhisk Packaging Specification](https://github.com/apache/incubator-openwhisk-wskdeploy/tree/master/specification) and deploy them through the Whisk Deploy utility. +This guide will walk you through how to describe OpenWhisk applications using the [OpenWhisk Packaging Specification](https://github.com/apache/incubator-openwhisk-wskdeploy/tree/master/specification#openwhisk-packaging-specification) and deploy them through the Whisk Deploy utility. Please use the specification as the ultimate reference for all Manifest file grammar and syntax. ### Setting up your Host and Credentials -In order to deply your OpenWhisk package, at minimum, the wskdeploy utility needs valid OpenWhisk APIHOST and AUTH variable to attempt deployment. Please read the [Configuring wskdeploy](wskdeploy_configuring.md) +In order to deploy your OpenWhisk package, at minimum, the ```wskdeploy``` utility needs valid OpenWhisk APIHOST and AUTH variable to attempt deployment. Please read the [Configuring wskdeploy](wskdeploy_configuring.md#configuring-wskdeploy) # Debugging your package -In addition to the normal output the wskdeploy utility provides, you may enable additional information that may further assist you in debugging. Please read the [Debugging Whisk Deploy](wskdeploy_debugging.md) document. +In addition to the normal output the wskdeploy utility provides, you may enable additional information that may further assist you in debugging. Please read the [Debugging Whisk Deploy](wskdeploy_debugging.md#debugging-wskdeploy) document. # Creating a "hello world" application As with most language introductions, here we show a minimal "hello world" application as encoded in an OpenWhisk Package Manifest YAML file: ``` -helloworld: - version: 1.0 - license: Apache-2.0 - actions: - hello: - version: 1.0 - function: src/hello/hello.js +package: + helloworld: + version: 1.0 + license: Apache-2.0 + actions: + hello: + version: 1.0 + function: src/hello/hello.js ``` where "hello.js" contains the following JavaScript code: ``` function main(params) { - console.log('hello', params.payload+'!'); + msg = "Hello, " + params.name + " from " + params.place; return { payload: msg }; } ``` diff --git a/docs/wskdeploy_debugging.md b/docs/wskdeploy_debugging.md index 767de72..1f4fbe7 100644 --- a/docs/wskdeploy_debugging.md +++ b/docs/wskdeploy_debugging.md @@ -10,6 +10,17 @@ The first thing you should do is turn on _"verbose mode"_ using the flag ```-v`` $ wskdeploy -v -m manifest.yaml ``` +## Enable console logging in your Action + +You may call ```console.log(<text>)`` within your Action (function) code to aid in debugging. For example, in NodeJS (JavaScript) you could output your entire JSON payload before returning it: +``` +function main(params) { + msg = "Hello, " + params.name + " from " + params.place; + console.log(msg) + return { payload: msg }; +} +``` + ## Enable additional trace in Go Client Wskdeploy uses the OpenWhisk GoLang Client to format and invoke OpenWhisk's APIs which has additional debug tracing available. diff --git a/parsers/manifest_parser.go b/parsers/manifest_parser.go index ff9afb5..2b6a9a4 100644 --- a/parsers/manifest_parser.go +++ b/parsers/manifest_parser.go @@ -536,8 +536,11 @@ func ResolveParamTypeFromValue(value interface{}, filePath string) (string, erro } else { // raise an error if param is not a known type - lines := []string{"Line Unknown"} - msgs := []string{"Parameter value is not a known type. ["+actualType+"]"} + // TODO(): We have information to display to user on an error or warning here + // TODO(): specifically, we have the parameter name, its value to show on error/warning + // TODO(): perhaps this is a different Class of error? e.g., ErrorParameterMismatchError + lines := []string{"Line Unknown"} + msgs := []string{"Parameter value is not a known type. ["+actualType+"]"} err = utils.NewParserErr(filePath, lines, msgs) } } else { @@ -567,6 +570,20 @@ func ResolveParameter(paramName string, param *Parameter, filePath string) (inte // We need to identify parameter Type here for later validation param.Type, errorParser = ResolveParamTypeFromValue(param.Value, filePath) + // In single-line format, the param's <value> can be a "Type name" and NOT an actual value. + // if this is the case, we must detect it and set the value to the default for that type name. + //if param.Type == "string" { + // // The value is a <string>; now we must test if is the name of a known Type + // var tempValue = param.Value.(string) + // if isValidParameterType(tempValue) { + // // If the value is indeed the name of a Type, we must change BOTH its + // // Type to be that type and its value to that Type's default value + // // (which happens later by setting it to nil here + // param.Type = param.Value.(string) + // param.Value = nil + // } + //} + } else { // we have a multi-line parameter declaration @@ -581,8 +598,8 @@ func ResolveParameter(paramName string, param *Parameter, filePath string) (inte // if we do not have a value or default, but have a type, find its default and use it for the value if param.Type != "" && !isValidParameterType(param.Type) { - lines := []string{"Line Unknown"} - msgs := []string{"Invalid Type for parameter. ["+param.Type+"]"} + lines := []string{"Line Unknown"} + msgs := []string{"Invalid Type for parameter. ["+param.Type+"]"} return value, utils.NewParserErr(filePath, lines, msgs) } else if param.Type == "" { param.Type = tempType @@ -595,7 +612,7 @@ func ResolveParameter(paramName string, param *Parameter, filePath string) (inte typ := param.Type // TODO(Priti): need to validate type is one of the supported primitive types with unit testing - // TODO(): with the new logic, when would the fpllowing Unmarhsall() call be used? + // TODO(): with the new logic, when would the following Unmarhsall() call be used? // if value is of type 'string' and its not empty <OR> if type is not 'string' if str, ok := value.(string); ok && (len(typ) == 0 || typ != "string") { var parsed interface{} -- To stop receiving notification emails like this one, please contact ['"commits@openwhisk.apache.org" <commits@openwhisk.apache.org>'].