You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwhisk.apache.org by mr...@apache.org on 2017/09/02 03:08:50 UTC
[incubator-openwhisk-wskdeploy] branch master updated: Create new
error types (#433)
This is an automated email from the ASF dual-hosted git repository.
mrutkowski 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 2caf7b6 Create new error types (#433)
2caf7b6 is described below
commit 2caf7b61640f06c3d060c3c0355bb9770d8d0b87
Author: Vincent <sh...@us.ibm.com>
AuthorDate: Fri Sep 1 23:08:47 2017 -0400
Create new error types (#433)
---
cmd/report.go | 20 ++++++++-----
cmd/root.go | 27 ++++++++++++++---
deployers/manifestreader.go | 3 +-
deployers/servicedeployer.go | 13 ++++++---
deployers/whiskclient.go | 59 ++++++++++++++++++++++---------------
parsers/manifest_parser.go | 4 +--
parsers/manifest_parser_test.go | 12 ++++++--
utils/errorhandlers.go | 5 ++--
utils/misc.go | 17 -----------
utils/wskdeployerror.go | 63 ++++++++++++++++++++++++++++++++++++----
wski18n/i18n_resources.go | 21 ++++++++++++--
wski18n/resources/en_US.all.json | 28 ++++++++++++++++++
12 files changed, 199 insertions(+), 73 deletions(-)
diff --git a/cmd/report.go b/cmd/report.go
index 73b6c51..65842bf 100644
--- a/cmd/report.go
+++ b/cmd/report.go
@@ -27,6 +27,7 @@ import (
"github.com/spf13/cobra"
"path"
"sync"
+ "net/http"
)
var wskpropsPath string
@@ -42,15 +43,18 @@ var reportCmd = &cobra.Command{
on OpenWhisk with specific OpenWhisk namespace. By default it will read the wsk property file
located under current user home.`,
Run: func(cmd *cobra.Command, args []string) {
- // TODO: Work your own magic here
if wskpropsPath != "" {
- client, _ = deployers.NewWhiskClient(wskpropsPath, utils.Flags.DeploymentPath, utils.Flags.ManifestPath, false)
- }
- userHome := utils.GetHomeDirectory()
- //default to ~/.wskprops
- propPath := path.Join(userHome, ".wskprops")
- client, _ = deployers.NewWhiskClient(propPath, utils.Flags.DeploymentPath, utils.Flags.ManifestPath, false)
- printDeploymentInfo(client)
+ config, _ := deployers.NewWhiskConfig(wskpropsPath, utils.Flags.DeploymentPath, utils.Flags.ManifestPath, false)
+ client, _ := deployers.CreateNewClient(http.DefaultClient, config)
+ printDeploymentInfo(client)
+ } else {
+ //default to ~/.wskprops
+ userHome := utils.GetHomeDirectory()
+ propPath := path.Join(userHome, ".wskprops")
+ config, _ := deployers.NewWhiskConfig(propPath, utils.Flags.DeploymentPath, utils.Flags.ManifestPath, false)
+ client, _ := deployers.CreateNewClient(http.DefaultClient, config)
+ printDeploymentInfo(client)
+ }
},
}
diff --git a/cmd/root.go b/cmd/root.go
index abe1533..5596096 100644
--- a/cmd/root.go
+++ b/cmd/root.go
@@ -31,6 +31,7 @@ import (
"strings"
"path"
"path/filepath"
+ "net/http"
)
var stderr = ""
@@ -198,8 +199,17 @@ func Deploy() error {
// master record of any dependency that has been downloaded
deployer.DependencyMaster = make(map[string]utils.DependencyRecord)
- whiskClient, clientConfig := deployers.NewWhiskClient(utils.Flags.CfgFile, utils.Flags.DeploymentPath, utils.Flags.ManifestPath, deployer.IsInteractive)
- deployer.Client = whiskClient
+ clientConfig, error := deployers.NewWhiskConfig(utils.Flags.CfgFile, utils.Flags.DeploymentPath, utils.Flags.ManifestPath, deployer.IsInteractive)
+ if error != nil {
+ return error
+ }
+
+ whiskClient, error := deployers.CreateNewClient(http.DefaultClient, clientConfig)
+ if error != nil {
+ return error
+ }
+
+ deployer.Client = whiskClient
deployer.ClientConfig = clientConfig
// The auth, apihost and namespace have been chosen, so that we can check the supported runtimes here.
@@ -279,8 +289,17 @@ func Undeploy() error {
deployer.IsInteractive = utils.Flags.UseInteractive
deployer.IsDefault = utils.Flags.UseDefaults
- whiskClient, clientConfig := deployers.NewWhiskClient(utils.Flags.CfgFile, utils.Flags.DeploymentPath, utils.Flags.ManifestPath, deployer.IsInteractive)
- deployer.Client = whiskClient
+ clientConfig, error := deployers.NewWhiskConfig(utils.Flags.CfgFile, utils.Flags.DeploymentPath, utils.Flags.ManifestPath, deployer.IsInteractive)
+ if error != nil {
+ return error
+ }
+
+ whiskClient, error := deployers.CreateNewClient(http.DefaultClient, clientConfig)
+ if error != nil {
+ return error
+ }
+
+ deployer.Client = whiskClient
deployer.ClientConfig = clientConfig
// The auth, apihost and namespace have been chosen, so that we can check the supported runtimes here.
diff --git a/deployers/manifestreader.go b/deployers/manifestreader.go
index f7c9b77..942af39 100644
--- a/deployers/manifestreader.go
+++ b/deployers/manifestreader.go
@@ -60,6 +60,7 @@ func (reader *ManifestReader) InitRootPackage(manifestParser *parsers.YAMLParser
// Wrapper parser to handle yaml dir
func (deployer *ManifestReader) HandleYaml(sdeployer *ServiceDeployer, manifestParser *parsers.YAMLParser, manifest *parsers.ManifestYAML) error {
+ var err error
deps, err := manifestParser.ComposeDependencies(manifest, deployer.serviceDeployer.ProjectPath)
actions, aubindings, err := manifestParser.ComposeActions(manifest, deployer.serviceDeployer.ManifestPath)
@@ -94,7 +95,7 @@ func (deployer *ManifestReader) HandleYaml(sdeployer *ServiceDeployer, manifestP
err = deployer.SetApis(sdeployer, aubindings)
}
- return nil
+ return err
}
func (reader *ManifestReader) SetDependencies(deps map[string]utils.DependencyRecord) error {
diff --git a/deployers/servicedeployer.go b/deployers/servicedeployer.go
index 0caea7d..254311a 100644
--- a/deployers/servicedeployer.go
+++ b/deployers/servicedeployer.go
@@ -28,6 +28,7 @@ import (
"github.com/apache/incubator-openwhisk-client-go/whisk"
"github.com/apache/incubator-openwhisk-wskdeploy/parsers"
"github.com/apache/incubator-openwhisk-wskdeploy/utils"
+ "github.com/apache/incubator-openwhisk-wskdeploy/wski18n"
)
type DeploymentApplication struct {
@@ -111,6 +112,7 @@ func (deployer *ServiceDeployer) ConstructDeploymentPlan() error {
var manifestReader = NewManfiestReader(deployer)
manifestReader.IsUndeploy = false
+ var err error
manifest, manifestParser, err := manifestReader.ParseManifest()
utils.Check(err)
@@ -138,13 +140,14 @@ func (deployer *ServiceDeployer) ConstructDeploymentPlan() error {
deploymentReader.BindAssets()
}
- return nil
+ return err
}
func (deployer *ServiceDeployer) ConstructUnDeploymentPlan() (*DeploymentApplication, error) {
var manifestReader = NewManfiestReader(deployer)
manifestReader.IsUndeploy = true
+ var err error
manifest, manifestParser, err := manifestReader.ParseManifest()
utils.Check(err)
@@ -175,7 +178,7 @@ func (deployer *ServiceDeployer) ConstructUnDeploymentPlan() (*DeploymentApplica
verifiedPlan := deployer.Deployment
- return verifiedPlan, nil
+ return verifiedPlan, err
}
// Use reflect util to deploy everything in this service deployer
@@ -197,7 +200,8 @@ func (deployer *ServiceDeployer) Deploy() error {
if strings.EqualFold(text, "y") || strings.EqualFold(text, "yes") {
deployer.InteractiveChoice = true
if err := deployer.deployAssets(); err != nil {
- fmt.Println("\nDeployment did not complete sucessfully. Run `wskdeploy undeploy` to remove partially deployed assets")
+ errString := wski18n.T("Deployment did not complete sucessfully. Run `wskdeploy undeploy` to remove partially deployed assets.\n")
+ whisk.Debug(whisk.DbgError, errString)
return err
}
@@ -213,7 +217,8 @@ func (deployer *ServiceDeployer) Deploy() error {
// non-interactive
if err := deployer.deployAssets(); err != nil {
- fmt.Println("\nDeployment did not complete sucessfully. Run `wskdeploy undeploy` to remove partially deployed assets")
+ errString := wski18n.T("Deployment did not complete sucessfully. Run `wskdeploy undeploy` to remove partially deployed assets.\n")
+ whisk.Debug(whisk.DbgError, errString)
return err
}
diff --git a/deployers/whiskclient.go b/deployers/whiskclient.go
index d5d9da4..87bf629 100644
--- a/deployers/whiskclient.go
+++ b/deployers/whiskclient.go
@@ -21,15 +21,14 @@ import (
"bufio"
"fmt"
"net/http"
- "net/url"
"os"
"strings"
"github.com/apache/incubator-openwhisk-client-go/whisk"
"github.com/apache/incubator-openwhisk-wskdeploy/parsers"
+ "github.com/apache/incubator-openwhisk-wskdeploy/wski18n"
"github.com/apache/incubator-openwhisk-wskdeploy/utils"
"path"
- "errors"
)
const (
@@ -69,7 +68,7 @@ var CreateNewClient = func (httpClient *http.Client, config_input *whisk.Config)
return whisk.NewClient(http.DefaultClient, clientConfig)
}
-func NewWhiskClient(proppath string, deploymentPath string, manifestPath string, isInteractive bool) (*whisk.Client, *whisk.Config) {
+func NewWhiskConfig(proppath string, deploymentPath string, manifestPath string, isInteractive bool) (*whisk.Config, error) {
credential := PropertyValue {}
namespace := PropertyValue {}
apiHost := PropertyValue {}
@@ -108,6 +107,7 @@ func NewWhiskClient(proppath string, deploymentPath string, manifestPath string,
OsPackage: whisk.OSPackageImp{},
}
+ // The error raised here can be neglected, because we will handle it in the end of this function.
wskprops, _ := GetWskPropFromWskprops(pi, proppath)
credential = GetPropertyValue(credential, wskprops.AuthKey, WSKPROPS)
namespace = GetPropertyValue(namespace, wskprops.Namespace, WSKPROPS)
@@ -118,7 +118,10 @@ func NewWhiskClient(proppath string, deploymentPath string, manifestPath string,
// No need to keep the default value for namespace, since both of auth and apihost are not set after .wskprops.
// whisk.property will set the default value as well.
apiHost.Value = ""
+ apiHost.Source = DEFAULTVALUE
}
+
+ // The error raised here can be neglected, because we will handle it in the end of this function.
whiskproperty, _ := GetWskPropFromWhiskProperty(pi)
credential = GetPropertyValue(credential, whiskproperty.AuthKey, WHISKPROPERTY)
namespace = GetPropertyValue(namespace, whiskproperty.Namespace, WHISKPROPERTY)
@@ -153,42 +156,50 @@ func NewWhiskClient(proppath string, deploymentPath string, manifestPath string,
ns = whisk.DEFAULT_NAMESPACE
source = DEFAULTVALUE
}
-
namespace.Value = ns
namespace.Source = source
}
}
- var baseURL *url.URL
- baseURL, err := utils.GetURLBase(apiHost.Value)
- if err != nil {
- utils.Check(err)
- }
-
- if len(credential.Value) == 0 {
- errStr := "Missing authentication key"
- err = whisk.MakeWskError(errors.New(errStr), whisk.EXIT_CODE_ERR_GENERAL, whisk.DISPLAY_MSG, whisk.DISPLAY_USAGE)
- utils.Check(err)
- }
-
- fmt.Println("The URL is " + baseURL.String() + ", selected from " + apiHost.Source)
- fmt.Println("The auth key is set, selected from " + credential.Source)
- fmt.Println("The namespace is " + namespace.Value + ", selected from " + namespace.Source)
clientConfig = &whisk.Config{
AuthToken: credential.Value, //Authtoken
Namespace: namespace.Value, //Namespace
- BaseURL: baseURL,
Host: apiHost.Value,
Version: "v1",
Insecure: true, // true if you want to ignore certificate signing
+ }
+
+ if len(credential.Value) == 0 {
+ errStr := wski18n.T("The authentication key is not configured.\n")
+ whisk.Debug(whisk.DbgError, errStr)
+ return clientConfig, utils.NewInvalidWskpropsError(errStr)
+ }
+ if len(apiHost.Value) == 0 {
+ errStr := wski18n.T("The API host is not configured.\n")
+ whisk.Debug(whisk.DbgError, errStr)
+ return clientConfig, utils.NewInvalidWskpropsError(errStr)
}
- // Setup network client
- client, err := CreateNewClient(http.DefaultClient, clientConfig)
- utils.Check(err)
- return client, clientConfig
+ if len(namespace.Value) == 0 {
+ errStr := wski18n.T("The namespace is not configured.\n")
+ whisk.Debug(whisk.DbgError, errStr)
+ return clientConfig, utils.NewInvalidWskpropsError(errStr)
+ }
+
+ stdout := wski18n.T("The API host is {{.apihost}}, from {{.apisource}}.\n",
+ map[string]interface{}{"apihost": apiHost.Value, "apisource": apiHost.Source})
+ whisk.Debug(whisk.DbgInfo, stdout)
+
+ stdout = wski18n.T("The auth key is set, from {{.authsource}}.\n",
+ map[string]interface{}{"authsource": credential.Source})
+ whisk.Debug(whisk.DbgInfo, stdout)
+
+ stdout = wski18n.T("The namespace is {{.namespace}}, from {{.namespacesource}}.\n",
+ map[string]interface{}{"namespace": namespace.Value, "namespacesource": namespace.Source})
+ whisk.Debug(whisk.DbgInfo, stdout)
+ return clientConfig, nil
}
var promptForValue = func (msg string) (string, error) {
diff --git a/parsers/manifest_parser.go b/parsers/manifest_parser.go
index 9abfe49..8330f09 100644
--- a/parsers/manifest_parser.go
+++ b/parsers/manifest_parser.go
@@ -513,7 +513,7 @@ func ResolveParamTypeFromValue(value interface{}) (string, error) {
} else {
// raise an error if param is not a known type
- err = utils.NewParserErr("", -1, "Parameter value is not a known type. ["+actualType+"]")
+ err = utils.NewParserErr("Parameter value is not a known type. ["+actualType+"]")
}
} else {
@@ -556,7 +556,7 @@ func ResolveParameter(paramName string, param *Parameter) (interface{}, error) {
// 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) {
- return value, utils.NewParserErr("", -1, "Invalid Type for parameter. ["+param.Type+"]")
+ return value, utils.NewParserErr("Invalid Type for parameter. ["+param.Type+"]")
} else if param.Type == "" {
param.Type = tempType
}
diff --git a/parsers/manifest_parser_test.go b/parsers/manifest_parser_test.go
index f42d961..fb3f1c9 100644
--- a/parsers/manifest_parser_test.go
+++ b/parsers/manifest_parser_test.go
@@ -1,4 +1,4 @@
-// +build unit
+//// +build unit
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
@@ -876,8 +876,14 @@ func TestResolveParameterForMultiLineParams(t *testing.T) {
param5 := Parameter{Type: "invalid", multiline: true}
_, err := ResolveParameter(p, ¶m5)
assert.NotNil(t, err, "Expected error saying Invalid type for parameter")
- expectedErr := utils.NewParserErr("", -1, "Invalid Type for parameter. [invalid]")
- assert.Equal(t, err, expectedErr, "Expected error "+expectedErr.Error()+" but found "+err.Error())
+ expectedErr := utils.NewParserErr("Invalid Type for parameter. [invalid]")
+ switch errorType := err.(type) {
+ default:
+ assert.Fail(t, "Wrong error type received: We are expecting ParserErr.")
+ case *utils.ParserErr:
+ assert.Equal(t, expectedErr.Message, errorType.Message,
+ "Expected error " + expectedErr.Message + " but found " + errorType.Message)
+ }
// type none - param without type, without value, and without default value
param6 := Parameter{multiline: true}
diff --git a/utils/errorhandlers.go b/utils/errorhandlers.go
index 297e441..04ecd57 100644
--- a/utils/errorhandlers.go
+++ b/utils/errorhandlers.go
@@ -52,8 +52,7 @@ func PrintOpenWhiskError(err error) {
fmt.Fprintf(outputStream, "%s%s\n", color.RedString(wski18n.T("Error: ")), err.Error())
}
-func PrintOpenWhiskOutput(err error) {
- outputStream := colorable.NewColorableStderr()
- fmt.Fprintf(outputStream, "%s%s\n", color.RedString(wski18n.T("Error: ")), err.Error())
+func PrintOpenWhiskOutput(output string) {
+ fmt.Fprintf(os.Stdout, "%s\n", output)
}
diff --git a/utils/misc.go b/utils/misc.go
index afb6dc4..11f1afa 100644
--- a/utils/misc.go
+++ b/utils/misc.go
@@ -319,23 +319,6 @@ func javaEntryError() error {
return errors.New(errMsg)
}
-// ParserErr records errors from parsing YAML against the wskdeploy spec.
-type ParserErr struct {
- filneame string
- lineNum int
- message string
-}
-
-// Implement the error interface.
-func (e ParserErr) Error() string {
- return fmt.Sprintf("%s [%d]: %s", e.filneame, e.lineNum, e.message)
-}
-
-func NewParserErr(fname string, line int, msg string) error {
- var err = &ParserErr{"", -1, msg}
- return err
-}
-
//for web action support, code from wsk cli with tiny adjustments
const WEB_EXPORT_ANNOT = "web-export"
const RAW_HTTP_ANNOT = "raw-http"
diff --git a/utils/wskdeployerror.go b/utils/wskdeployerror.go
index 3b23a92..8394d02 100644
--- a/utils/wskdeployerror.go
+++ b/utils/wskdeployerror.go
@@ -19,6 +19,7 @@ package utils
import (
"fmt"
+ "runtime"
"github.com/apache/incubator-openwhisk-wskdeploy/wski18n"
)
@@ -40,18 +41,70 @@ func (e *TestCaseError) Error() string {
return e.errorMessage
}
+type BaseErr struct {
+ FileName string
+ LineNum int
+ Message string
+}
+
+func (e *BaseErr) Error() string {
+ return fmt.Sprintf("%s [%d]: %s", e.FileName, e.LineNum, e.Message)
+}
+
+func (e *BaseErr) SetFileName(fileName string) {
+ e.FileName = fileName
+}
+
+func (e *BaseErr) SetLineNum(lineNum int) {
+ e.LineNum = lineNum
+}
+
+func (e *BaseErr) SetMessage(message string) {
+ e.Message = message
+}
+
type InputYamlFileError struct {
- errorMessage string
+ BaseErr
errorType string
}
-func NewInputYamlFileError(errorMessage string) *InputYamlFileError {
- return &InputYamlFileError{
- errorMessage: errorMessage,
+func NewInputYamlFileError(errMessage string) *InputYamlFileError {
+ _, fn, lineNum, _ := runtime.Caller(1)
+ var err = &InputYamlFileError{
errorType: wski18n.T(INVALID_YAML_INPUT),
}
+ err.SetFileName(fn)
+ err.SetLineNum(lineNum)
+ err.SetMessage(errMessage)
+ return err
}
func (e *InputYamlFileError) Error() string {
- return fmt.Sprintf("%s =====> %s", e.errorType, e.errorMessage)
+ return fmt.Sprintf("%s [%d]: %s =====> %s", e.FileName, e.LineNum, e.errorType, e.Message)
+}
+
+type InvalidWskpropsError struct {
+ BaseErr
+}
+
+func NewInvalidWskpropsError(errMessage string) *InvalidWskpropsError {
+ _, fn, lineNum, _ := runtime.Caller(1)
+ var err = &InvalidWskpropsError{}
+ err.SetFileName(fn)
+ err.SetLineNum(lineNum)
+ err.SetMessage(errMessage)
+ return err
+}
+
+type ParserErr struct {
+ BaseErr
+}
+
+func NewParserErr(msg string) *ParserErr {
+ _, fn, line, _ := runtime.Caller(1)
+ var err = &ParserErr{}
+ err.SetFileName(fn)
+ err.SetLineNum(line)
+ err.SetMessage(msg)
+ return err
}
diff --git a/wski18n/i18n_resources.go b/wski18n/i18n_resources.go
index 23da48f..e9caf8d 100644
--- a/wski18n/i18n_resources.go
+++ b/wski18n/i18n_resources.go
@@ -1,3 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
// Code generated by go-bindata.
// sources:
// wski18n/resources/de_DE.all.json
@@ -97,7 +114,7 @@ func wski18nResourcesDe_deAllJson() (*asset, error) {
return a, nil
}
-var _wski18nResourcesEn_usAllJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xa4\x92\xcd\x4e\xeb\x30\x14\x84\xf7\x79\x8a\x51\x36\xdd\x54\xb9\xfb\xbb\xeb\xa2\x52\x2b\x04\xad\x28\x20\x21\x40\x8a\x89\x1d\x62\x1a\xff\x28\x3e\x01\x95\x28\xef\x8e\xe2\xb6\x80\x8a\xd3\x14\xd8\x59\xf1\xcc\x37\x93\x73\x7c\x17\x01\x4d\x04\x00\xb1\xe4\xf1\x7f\xc4\x33\x51\x96\x26\x1e\x6f\x3f\x51\xc5\xb4\x2b\x19\x49\xa3\xbb\xbb\x89\xc6\x64\x39\x47\x61\x1c\x41\xd5\x8e\xf0\x28\x60\x2b\xf3\x22\xb9\xe0\x49\x1c\x01 [...]
+var _wski18nResourcesEn_usAllJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xa4\x94\xc1\x8e\xd3\x30\x10\x86\xef\x7e\x8a\x51\x2e\x7b\xa9\xc2\x9d\xdb\x1e\x56\xda\x15\x82\x5d\xb1\x0b\x12\x02\xa4\x9a\x78\xd2\x98\xc6\x76\x64\x8f\x41\xc5\xca\xbb\x23\xbb\x6d\xa8\x8a\xdd\xa6\xdd\x5b\x6c\xcf\x7c\xf3\x7b\x7e\x4f\xbe\x32\x80\xc0\x00\x00\x2a\x29\xaa\xb7\x50\xdd\x63\xdf\x9b\x6a\xb1\xdd\x22\xcb\xb5\xeb\x39\x49\xa3\xe3\xd9\xad\x86\xdb\xa7\x07\xe8\x8c\x23\x50\xde\x11\xfc\x40\x18\xac\xf9\x25\x05 [...]
func wski18nResourcesEn_usAllJsonBytes() ([]byte, error) {
return bindataRead(
@@ -112,7 +129,7 @@ func wski18nResourcesEn_usAllJson() (*asset, error) {
return nil, err
}
- info := bindataFileInfo{name: "wski18n/resources/en_US.all.json", size: 1082, mode: os.FileMode(420), modTime: time.Unix(1504207585, 0)}
+ info := bindataFileInfo{name: "wski18n/resources/en_US.all.json", size: 1890, mode: os.FileMode(420), modTime: time.Unix(1504289235, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
diff --git a/wski18n/resources/en_US.all.json b/wski18n/resources/en_US.all.json
index fccfc6f..45c3bdb 100644
--- a/wski18n/resources/en_US.all.json
+++ b/wski18n/resources/en_US.all.json
@@ -42,5 +42,33 @@
{
"id": "Using {{.manifestPath}} for undeployment.\n",
"translation": "Using {{.manifestPath}} for undeployment.\n"
+ },
+
+
+
+ {
+ "id": "The authentication key is not configured.\n",
+ "translation": "The authentication key is not configured.\n"
+ },
+ {
+ "id": "The API host is not configured.\n",
+ "translation": "The API host is not configured.\n"
+ },
+ {
+ "id": "The namespace is not configured.\n",
+ "translation": "The namespace is not configured.\n"
+ },
+ {
+ "id": "The API host is {{.apihost}}, from {{.apisource}}.\n",
+ "translation": "The API host is {{.apihost}}, from {{.apisource}}.\n"
+ },
+ {
+ "id": "The auth key is set, from {{.authsource}}.\n",
+ "translation": "The auth key is set, from {{.authsource}}.\n"
+ },
+ {
+ "id": "The namespace is {{.namespace}}, from {{.namespacesource}}.\n",
+ "translation": "The namespace is {{.namespace}}, from {{.namespacesource}}.\n"
}
+
]
--
To stop receiving notification emails like this one, please contact
['"commits@openwhisk.apache.org" <co...@openwhisk.apache.org>'].