You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwhisk.apache.org by cs...@apache.org on 2017/08/10 12:08:27 UTC
[incubator-openwhisk-cli] 02/11: Remove "experimental" gateway api
(#2547)
This is an automated email from the ASF dual-hosted git repository.
csantanapr pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-openwhisk-cli.git
commit 1c2b32d46cbf5e277c8ccade3ec87614e6f6af2f
Author: David Cariello <dr...@us.ibm.com>
AuthorDate: Tue Aug 8 12:14:35 2017 -0500
Remove "experimental" gateway api (#2547)
---
commands/api.go | 778 +++------------------------------------
commands/wsk.go | 1 -
wski18n/resources/en_US.all.json | 12 -
3 files changed, 55 insertions(+), 736 deletions(-)
diff --git a/commands/api.go b/commands/api.go
index b58b4ed..988fe96 100644
--- a/commands/api.go
+++ b/commands/api.go
@@ -43,664 +43,12 @@ const (
formatOptionJson = "json"
)
-//////////////
-// Commands //
-//////////////
-
-var apiExperimentalCmd = &cobra.Command{
- Use: "api-experimental",
- Short: wski18n.T("work with APIs (experimental)"),
-}
-
-var apiCmd = &cobra.Command{
- Use: "api",
- Short: wski18n.T("work with APIs"),
-}
-
-var apiCreateCmd = &cobra.Command{
- Use: "create ([BASE_PATH] API_PATH API_VERB ACTION] | --config-file CFG_FILE) ",
- Short: wski18n.T("create a new API"),
- SilenceUsage: true,
- SilenceErrors: true,
- PreRunE: setupClientConfig,
- RunE: func(cmd *cobra.Command, args []string) error {
-
- var api *whisk.Api
- var err error
-
- if (len(args) == 0 && Flags.api.configfile == "") {
- whisk.Debug(whisk.DbgError, "No swagger file and no arguments\n")
- errMsg := wski18n.T("Invalid argument(s). Specify a swagger file or specify an API base path with an API path, an API verb, and an action name.")
- whiskErr := whisk.MakeWskError(errors.New(errMsg), whisk.EXITCODE_ERR_GENERAL,
- whisk.DISPLAY_MSG, whisk.DISPLAY_USAGE)
- return whiskErr
- } else if (len(args) == 0 && Flags.api.configfile != "") {
- api, err = parseSwaggerApi()
- if err != nil {
- whisk.Debug(whisk.DbgError, "parseSwaggerApi() error: %s\n", err)
- errMsg := wski18n.T("Unable to parse swagger file: {{.err}}", map[string]interface{}{"err": err})
- whiskErr := whisk.MakeWskErrorFromWskError(errors.New(errMsg), err, whisk.EXITCODE_ERR_GENERAL,
- whisk.DISPLAY_MSG, whisk.DISPLAY_USAGE)
- return whiskErr
- }
- } else {
- if whiskErr := checkArgs(args, 3, 4, "Api create",
- wski18n.T("Specify a swagger file or specify an API base path with an API path, an API verb, and an action name.")); whiskErr != nil {
- return whiskErr
- }
- api, err = parseApi(cmd, args)
- if err != nil {
- whisk.Debug(whisk.DbgError, "parseApi(%s, %s) error: %s\n", cmd, args, err)
- errMsg := wski18n.T("Unable to parse api command arguments: {{.err}}",
- map[string]interface{}{"err": err})
- whiskErr := whisk.MakeWskErrorFromWskError(errors.New(errMsg), err, whisk.EXITCODE_ERR_GENERAL,
- whisk.DISPLAY_MSG, whisk.DISPLAY_USAGE)
- return whiskErr
- }
- }
-
- apiCreateReq := new(whisk.ApiCreateRequest)
- apiCreateReq.ApiDoc = api
- apiCreateReqOptions := new(whisk.ApiCreateRequestOptions)
- retApi, _, err := client.Apis.Insert(apiCreateReq, apiCreateReqOptions, whisk.DoNotOverwrite)
- if err != nil {
- whisk.Debug(whisk.DbgError, "client.Apis.Insert(%#v, false) error: %s\n", api, err)
- errMsg := wski18n.T("Unable to create API: {{.err}}", map[string]interface{}{"err": err})
- whiskErr := whisk.MakeWskErrorFromWskError(errors.New(errMsg), err, whisk.EXITCODE_ERR_NETWORK,
- whisk.DISPLAY_MSG, whisk.NO_DISPLAY_USAGE)
- return whiskErr
- }
-
- if (api.Swagger == "") {
- baseUrl := retApi.BaseUrl
- fmt.Fprintf(color.Output,
- wski18n.T("{{.ok}} created API {{.path}} {{.verb}} for action {{.name}}\n{{.fullpath}}\n",
- map[string]interface{}{
- "ok": color.GreenString("ok:"),
- "path": strings.TrimSuffix(api.GatewayBasePath, "/")+api.GatewayRelPath,
- "verb": api.GatewayMethod,
- "name": boldString("/"+api.Action.Namespace+"/"+api.Action.Name),
- "fullpath": strings.TrimSuffix(baseUrl, "/")+api.GatewayRelPath,
- }))
- } else {
- whisk.Debug(whisk.DbgInfo, "Processing swagger based create API response\n")
- baseUrl := retApi.BaseUrl
- for path, _ := range retApi.Swagger.Paths {
- managedUrl := strings.TrimSuffix(baseUrl, "/")+path
- whisk.Debug(whisk.DbgInfo, "Managed path: %s\n",managedUrl)
- for op, opv := range retApi.Swagger.Paths[path] {
- whisk.Debug(whisk.DbgInfo, "Path operation: %s\n", op)
- fmt.Fprintf(color.Output,
- wski18n.T("{{.ok}} created API {{.path}} {{.verb}} for action {{.name}}\n{{.fullpath}}\n",
- map[string]interface{}{
- "ok": color.GreenString("ok:"),
- "path": path,
- "verb": op,
- "name": boldString(opv.XOpenWhisk.ActionName),
- "fullpath": managedUrl,
- }))
- }
- }
- }
-
-
- return nil
- },
-}
-
-//var apiUpdateCmd = &cobra.Command{
-// Use: "update API_PATH API_VERB ACTION",
-// Short: wski18n.T("update an existing API"),
-// SilenceUsage: true,
-// SilenceErrors: true,
-// PreRunE: setupClientConfig,
-// RunE: func(cmd *cobra.Command, args []string) error {
-//
-// if whiskErr := checkArgs(args, 3, 3, "Api update",
-// wski18n.T("An API path, an API verb, and an action name are required.")); whiskErr != nil {
-// return whiskErr
-// }
-//
-// api, err := parseApi(cmd, args)
-// if err != nil {
-// whisk.Debug(whisk.DbgError, "parseApi(%s, %s) error: %s\n", cmd, args, err)
-// errMsg := wski18n.T("Unable to parse API command arguments: {{.err}}", map[string]interface{}{"err": err})
-// whiskErr := whisk.MakeWskErrorFromWskError(errors.New(errMsg), err, whisk.EXITCODE_ERR_GENERAL,
-// whisk.DISPLAY_MSG, whisk.DISPLAY_USAGE)
-// return whiskErr
-// }
-// sendApi := new(whisk.ApiCreateRequest)
-// sendApi.ApiDoc = api
-//
-// retApi, _, err := client.Apis.Insert(sendApi, true)
-// if err != nil {
-// whisk.Debug(whisk.DbgError, "client.Apis.Insert(%#v, %t, false) error: %s\n", api, err)
-// errMsg := wski18n.T("Unable to update API: {{.err}}", map[string]interface{}{"err": err})
-// whiskErr := whisk.MakeWskErrorFromWskError(errors.New(errMsg), err, whisk.EXITCODE_ERR_NETWORK,
-// whisk.DISPLAY_MSG, whisk.NO_DISPLAY_USAGE)
-// return whiskErr
-// }
-//
-// fmt.Fprintf(color.Output,
-// wski18n.T("{{.ok}} updated API {{.path}} {{.verb}} for action {{.name}}\n{{.fullpath}}\n",
-// map[string]interface{}{
-// "ok": color.GreenString("ok:"),
-// "path": api.GatewayRelPath,
-// "verb": api.GatewayMethod,
-// "name": boldString("/"+api.Action.Name),
-// "fullpath": getManagedUrl(retApi, api.GatewayRelPath, api.GatewayMethod),
-// }))
-// return nil
-// },
-//}
-
-var apiGetCmd = &cobra.Command{
- Use: "get BASE_PATH | API_NAME",
- Short: wski18n.T("get API details"),
- SilenceUsage: true,
- SilenceErrors: true,
- PreRunE: setupClientConfig,
- RunE: func(cmd *cobra.Command, args []string) error {
- var err error
- var isBasePathArg bool = true
-
- if whiskErr := checkArgs(args, 1, 1, "Api get",
- wski18n.T("An API base path or API name is required.")); whiskErr != nil {
- return whiskErr
- }
-
- apiGetReq := new(whisk.ApiGetRequest)
- apiGetReqOptions := new(whisk.ApiGetRequestOptions)
- apiGetReqOptions.ApiBasePath = args[0]
- retApi, _, err := client.Apis.Get(apiGetReq, apiGetReqOptions)
- if err != nil {
- whisk.Debug(whisk.DbgError, "client.Apis.Get(%#v, %#v) error: %s\n", apiGetReq, apiGetReqOptions, err)
- errMsg := wski18n.T("Unable to get API '{{.name}}': {{.err}}", map[string]interface{}{"name": args[0], "err": err})
- whiskErr := whisk.MakeWskErrorFromWskError(errors.New(errMsg), err, whisk.EXITCODE_ERR_GENERAL,
- whisk.DISPLAY_MSG, whisk.NO_DISPLAY_USAGE)
- return whiskErr
- }
- whisk.Debug(whisk.DbgInfo, "client.Apis.Get returned: %#v\n", retApi)
-
- var displayResult interface{} = nil
- if (Flags.common.detail) {
- if (retApi.Apis != nil && len(retApi.Apis) > 0 &&
- retApi.Apis[0].ApiValue != nil) {
- displayResult = retApi.Apis[0].ApiValue
- } else {
- whisk.Debug(whisk.DbgError, "No result object returned\n")
- }
- } else {
- if (retApi.Apis != nil && len(retApi.Apis) > 0 &&
- retApi.Apis[0].ApiValue != nil &&
- retApi.Apis[0].ApiValue.Swagger != nil) {
- displayResult = retApi.Apis[0].ApiValue.Swagger
- } else {
- whisk.Debug(whisk.DbgError, "No swagger returned\n")
- }
- }
- if (displayResult == nil) {
- var errMsg string
- if (isBasePathArg) {
- errMsg = wski18n.T("API does not exist for basepath {{.basepath}}",
- map[string]interface{}{"basepath": args[0]})
- } else {
- errMsg = wski18n.T("API does not exist for API name {{.apiname}}",
- map[string]interface{}{"apiname": args[0]})
- }
-
- whiskErr := whisk.MakeWskError(errors.New(errMsg), whisk.EXITCODE_ERR_GENERAL,
- whisk.DISPLAY_MSG, whisk.NO_DISPLAY_USAGE)
- return whiskErr
- }
- printJSON(displayResult)
-
- return nil
- },
-}
-
-var apiDeleteCmd = &cobra.Command{
- Use: "delete BASE_PATH | API_NAME [API_PATH [API_VERB]]",
- Short: wski18n.T("delete an API"),
- SilenceUsage: true,
- SilenceErrors: true,
- PreRunE: setupClientConfig,
- RunE: func(cmd *cobra.Command, args []string) error {
- if whiskErr := checkArgs(args, 1, 3, "Api delete",
- wski18n.T("An API base path or API name is required. An optional API relative path and operation may also be provided.")); whiskErr != nil {
- return whiskErr
- }
-
- apiDeleteReq := new(whisk.ApiDeleteRequest)
- apiDeleteReqOptions := new(whisk.ApiDeleteRequestOptions)
- // Is the argument a basepath (must start with /) or an API name
- if _, ok := isValidBasepath(args[0]); !ok {
- whisk.Debug(whisk.DbgInfo, "Treating '%s' as an API name; as it does not begin with '/'\n", args[0])
- apiDeleteReqOptions.ApiBasePath = args[0]
- } else {
- apiDeleteReqOptions.ApiBasePath = args[0]
- }
-
- if (len(args) > 1) {
- // Is the API path valid?
- if whiskErr, ok := isValidRelpath(args[1]); !ok {
- return whiskErr
- }
- apiDeleteReqOptions.ApiRelPath = args[1]
- }
- if (len(args) > 2) {
- // Is the API verb valid?
- if whiskErr, ok := IsValidApiVerb(args[2]); !ok {
- return whiskErr
- }
- apiDeleteReqOptions.ApiVerb = strings.ToUpper(args[2])
- }
-
- _, err := client.Apis.Delete(apiDeleteReq, apiDeleteReqOptions)
- if err != nil {
- whisk.Debug(whisk.DbgError, "client.Apis.Delete(%#v, %#v) error: %s\n", apiDeleteReq, apiDeleteReqOptions, err)
- errMsg := wski18n.T("Unable to delete API: {{.err}}", map[string]interface{}{"err": err})
- whiskErr := whisk.MakeWskError(errors.New(errMsg), whisk.EXITCODE_ERR_GENERAL,
- whisk.DISPLAY_MSG, whisk.NO_DISPLAY_USAGE)
- return whiskErr
- }
-
- if (len(args) == 1) {
- fmt.Fprintf(color.Output,
- wski18n.T("{{.ok}} deleted API {{.basepath}}\n",
- map[string]interface{}{
- "ok": color.GreenString("ok:"),
- "basepath": apiDeleteReqOptions.ApiBasePath,
- }))
- } else if (len(args) == 2 ) {
- fmt.Fprintf(color.Output,
- wski18n.T("{{.ok}} deleted {{.path}} from {{.basepath}}\n",
- map[string]interface{}{
- "ok": color.GreenString("ok:"),
- "path": apiDeleteReqOptions.ApiRelPath,
- "basepath": apiDeleteReqOptions.ApiBasePath,
- }))
- } else {
- fmt.Fprintf(color.Output,
- wski18n.T("{{.ok}} deleted {{.path}} {{.verb}} from {{.basepath}}\n",
- map[string]interface{}{
- "ok": color.GreenString("ok:"),
- "path": apiDeleteReqOptions.ApiRelPath,
- "verb": apiDeleteReqOptions.ApiVerb,
- "basepath": apiDeleteReqOptions.ApiBasePath,
- }))
- }
-
- return nil
- },
-}
-
-var fmtString = "%-30s %7s %20s %s\n"
-var apiListCmd = &cobra.Command{
- Use: "list [[BASE_PATH | API_NAME] [API_PATH [API_VERB]]",
- Short: wski18n.T("list APIs"),
- SilenceUsage: true,
- SilenceErrors: true,
- PreRunE: setupClientConfig,
- RunE: func(cmd *cobra.Command, args []string) error {
- var err error
- var retApiList *whisk.ApiListResponse
- var retApi *whisk.ApiGetResponse
- var retApiArray *whisk.RetApiArray
-
- if whiskErr := checkArgs(args, 0, 3, "Api list",
- wski18n.T("Optional parameters are: API base path (or API name), API relative path and operation.")); whiskErr != nil {
- return whiskErr
- }
-
- // Get API request body
- apiGetReq := new(whisk.ApiGetRequest)
- apiGetReq.Namespace = client.Config.Namespace
-
- // Get API request options
- apiGetReqOptions := new(whisk.ApiGetRequestOptions)
-
- // List API request query parameters
- apiListReqOptions := new(whisk.ApiListRequestOptions)
- apiListReqOptions.Limit = Flags.common.limit
- apiListReqOptions.Skip = Flags.common.skip
-
- if (len(args) == 0) {
- retApiList, _, err = client.Apis.List(apiListReqOptions)
- if err != nil {
- whisk.Debug(whisk.DbgError, "client.Apis.List(%#v) error: %s\n", apiListReqOptions, err)
- errMsg := wski18n.T("Unable to obtain the API list: {{.err}}", map[string]interface{}{"err": err})
- whiskErr := whisk.MakeWskErrorFromWskError(errors.New(errMsg), err, whisk.EXITCODE_ERR_GENERAL,
- whisk.DISPLAY_MSG, whisk.NO_DISPLAY_USAGE)
- return whiskErr
- }
- whisk.Debug(whisk.DbgInfo, "client.Apis.List returned: %#v (%+v)\n", retApiList, retApiList)
- // Cast to a common type to allow for code to print out apilist response or apiget response
- retApiArray = (*whisk.RetApiArray)(retApiList)
- } else {
- // The first argument is either a basepath (must start with /) or an API name
- apiGetReqOptions.ApiBasePath = args[0]
- if (len(args) > 1) {
- // Is the API path valid?
- if whiskErr, ok := isValidRelpath(args[1]); !ok {
- return whiskErr
- }
- apiGetReqOptions.ApiRelPath = args[1]
- }
- if (len(args) > 2) {
- // Is the API verb valid?
- if whiskErr, ok := IsValidApiVerb(args[2]); !ok {
- return whiskErr
- }
- apiGetReqOptions.ApiVerb = strings.ToUpper(args[2])
- }
-
- retApi, _, err = client.Apis.Get(apiGetReq, apiGetReqOptions)
- if err != nil {
- whisk.Debug(whisk.DbgError, "client.Apis.Get(%#v, %#v) error: %s\n", apiGetReq, apiGetReqOptions, err)
- errMsg := wski18n.T("Unable to obtain the API list: {{.err}}", map[string]interface{}{"err": err})
- whiskErr := whisk.MakeWskErrorFromWskError(errors.New(errMsg), err, whisk.EXITCODE_ERR_GENERAL,
- whisk.DISPLAY_MSG, whisk.NO_DISPLAY_USAGE)
- return whiskErr
- }
- whisk.Debug(whisk.DbgInfo, "client.Apis.Get returned: %#v\n", retApi)
- // Cast to a common type to allow for code to print out apilist response or apiget response
- retApiArray = (*whisk.RetApiArray)(retApi)
- }
-
- // Display the APIs - applying any specified filtering
- if (Flags.common.full) {
- fmt.Fprintf(color.Output,
- wski18n.T("{{.ok}} APIs\n",
- map[string]interface{}{
- "ok": color.GreenString("ok:"),
- }))
-
- for i:=0; i<len(retApiArray.Apis); i++ {
- printFilteredListApi(retApiArray.Apis[i].ApiValue, (*whisk.ApiOptions)(apiGetReqOptions))
- }
- } else {
- // Dynamically create the output format string based on the maximum size of the
- // fully qualified action name and the API Name.
- maxActionNameSize := min(40, max(len("Action"), getLargestActionNameSize(retApiArray, (*whisk.ApiOptions)(apiGetReqOptions))))
- maxApiNameSize := min(30, max(len("API Name"), getLargestApiNameSize(retApiArray, (*whisk.ApiOptions)(apiGetReqOptions))))
- fmtString = "%-"+strconv.Itoa(maxActionNameSize)+"s %7s %"+strconv.Itoa(maxApiNameSize+1)+"s %s\n"
-
- fmt.Fprintf(color.Output,
- wski18n.T("{{.ok}} APIs\n",
- map[string]interface{}{
- "ok": color.GreenString("ok:"),
- }))
- fmt.Printf(fmtString, "Action", "Verb", "API Name", "URL")
-
- for i:=0; i<len(retApiArray.Apis); i++ {
- printFilteredListRow(retApiArray.Apis[i].ApiValue, (*whisk.ApiOptions)(apiGetReqOptions), maxActionNameSize, maxApiNameSize)
- }
- }
-
- return nil
- },
-}
-
-/*
- * Takes an API object (containing one more more single basepath/relpath/operation triplets)
- * and some filtering configuration. For each API endpoint matching the filtering criteria, display
- * each endpoint's configuration - one line per configuration property (action name, verb, api name, api gw url)
- */
-func printFilteredListApi(resultApi *whisk.RetApi, api *whisk.ApiOptions) {
- baseUrl := strings.TrimSuffix(resultApi.BaseUrl, "/")
- apiName := resultApi.Swagger.Info.Title
- basePath := resultApi.Swagger.BasePath
- if (resultApi.Swagger != nil && resultApi.Swagger.Paths != nil) {
- for path, _ := range resultApi.Swagger.Paths {
- whisk.Debug(whisk.DbgInfo, "apiGetCmd: comparing api relpath: %s\n", path)
- if ( len(api.ApiRelPath) == 0 || path == api.ApiRelPath) {
- whisk.Debug(whisk.DbgInfo, "apiGetCmd: relpath matches\n")
- for op, opv := range resultApi.Swagger.Paths[path] {
- whisk.Debug(whisk.DbgInfo, "apiGetCmd: comparing operation: '%s'\n", op)
- if ( len(api.ApiVerb) == 0 || strings.ToLower(op) == strings.ToLower(api.ApiVerb)) {
- whisk.Debug(whisk.DbgInfo, "apiGetCmd: operation matches: %#v\n", opv)
- var actionName = "/"+opv.XOpenWhisk.Namespace+"/"+opv.XOpenWhisk.ActionName
- fmt.Printf("%s: %s\n", wski18n.T("Action"), actionName)
- fmt.Printf(" %s: %s\n", wski18n.T("API Name"), apiName)
- fmt.Printf(" %s: %s\n", wski18n.T("Base path"), basePath)
- fmt.Printf(" %s: %s\n", wski18n.T("Path"), path)
- fmt.Printf(" %s: %s\n", wski18n.T("Verb"), op)
- fmt.Printf(" %s: %s\n", wski18n.T("URL"), baseUrl+path)
- }
- }
- }
- }
- }
-}
-
-/*
- * Takes an API object (containing one more more single basepath/relpath/operation triplets)
- * and some filtering configuration. For each API matching the filtering criteria, display the API
- * on a single line (action name, verb, api name, api gw url).
- *
- * NOTE: Large action name and api name value will be truncated by their associated max size parameters.
- */
-func printFilteredListRow(resultApi *whisk.RetApi, api *whisk.ApiOptions, maxActionNameSize int, maxApiNameSize int) {
- baseUrl := strings.TrimSuffix(resultApi.BaseUrl, "/")
- apiName := resultApi.Swagger.Info.Title
- if (resultApi.Swagger != nil && resultApi.Swagger.Paths != nil) {
- for path, _ := range resultApi.Swagger.Paths {
- whisk.Debug(whisk.DbgInfo, "apiGetCmd: comparing api relpath: %s\n", path)
- if ( len(api.ApiRelPath) == 0 || path == api.ApiRelPath) {
- whisk.Debug(whisk.DbgInfo, "apiGetCmd: relpath matches\n")
- for op, opv := range resultApi.Swagger.Paths[path] {
- whisk.Debug(whisk.DbgInfo, "apiGetCmd: comparing operation: '%s'\n", op)
- if ( len(api.ApiVerb) == 0 || strings.ToLower(op) == strings.ToLower(api.ApiVerb)) {
- whisk.Debug(whisk.DbgInfo, "apiGetCmd: operation matches: %#v\n", opv)
- var actionName = "/"+opv.XOpenWhisk.Namespace+"/"+opv.XOpenWhisk.ActionName
- fmt.Printf(fmtString,
- actionName[0 : min(len(actionName), maxActionNameSize)],
- op,
- apiName[0 : min(len(apiName), maxApiNameSize)],
- baseUrl+path)
- }
- }
- }
- }
- }
-}
-
-func getLargestActionNameSize(retApiArray *whisk.RetApiArray, api *whisk.ApiOptions) int {
- var maxNameSize = 0
- for i:=0; i<len(retApiArray.Apis); i++ {
- var resultApi = retApiArray.Apis[i].ApiValue
- if (resultApi.Swagger != nil && resultApi.Swagger.Paths != nil) {
- for path, _ := range resultApi.Swagger.Paths {
- whisk.Debug(whisk.DbgInfo, "getLargestActionNameSize: comparing api relpath: %s\n", path)
- if ( len(api.ApiRelPath) == 0 || path == api.ApiRelPath) {
- whisk.Debug(whisk.DbgInfo, "getLargestActionNameSize: relpath matches\n")
- for op, opv := range resultApi.Swagger.Paths[path] {
- whisk.Debug(whisk.DbgInfo, "getLargestActionNameSize: comparing operation: '%s'\n", op)
- if ( len(api.ApiVerb) == 0 || strings.ToLower(op) == strings.ToLower(api.ApiVerb)) {
- whisk.Debug(whisk.DbgInfo, "getLargestActionNameSize: operation matches: %#v\n", opv)
- var fullActionName = "/"+opv.XOpenWhisk.Namespace+"/"+opv.XOpenWhisk.ActionName
- if (len(fullActionName) > maxNameSize) {
- maxNameSize = len(fullActionName)
- }
- }
- }
- }
- }
- }
- }
- return maxNameSize
-}
-
-func getLargestApiNameSize(retApiArray *whisk.RetApiArray, api *whisk.ApiOptions) int {
- var maxNameSize = 0
- for i:=0; i<len(retApiArray.Apis); i++ {
- var resultApi = retApiArray.Apis[i].ApiValue
- apiName := resultApi.Swagger.Info.Title
- if (resultApi.Swagger != nil && resultApi.Swagger.Paths != nil) {
- for path, _ := range resultApi.Swagger.Paths {
- whisk.Debug(whisk.DbgInfo, "getLargestActionNameSize: comparing api relpath: %s\n", path)
- if ( len(api.ApiRelPath) == 0 || path == api.ApiRelPath) {
- whisk.Debug(whisk.DbgInfo, "getLargestActionNameSize: relpath matches\n")
- for op, opv := range resultApi.Swagger.Paths[path] {
- whisk.Debug(whisk.DbgInfo, "getLargestActionNameSize: comparing operation: '%s'\n", op)
- if ( len(api.ApiVerb) == 0 || strings.ToLower(op) == strings.ToLower(api.ApiVerb)) {
- whisk.Debug(whisk.DbgInfo, "getLargestActionNameSize: operation matches: %#v\n", opv)
- if (len(apiName) > maxNameSize) {
- maxNameSize = len(apiName)
- }
- }
- }
- }
- }
- }
- }
- return maxNameSize
-}
-
-/*
- * if # args = 4
- * args[0] = API base path
- * args[0] = API relative path
- * args[1] = API verb
- * args[2] = Optional. Action name (may or may not be qualified with namespace and package name)
- *
- * if # args = 3
- * args[0] = API relative path
- * args[1] = API verb
- * args[2] = Optional. Action name (may or may not be qualified with namespace and package name)
- */
-func parseApi(cmd *cobra.Command, args []string) (*whisk.Api, error) {
- var err error
- var basepath string = "/"
- var apiname string
- var basepathArgIsApiName = false;
-
- api := new(whisk.Api)
-
- if (len(args) > 3) {
- // Is the argument a basepath (must start with /) or an API name
- if _, ok := isValidBasepath(args[0]); !ok {
- whisk.Debug(whisk.DbgInfo, "Treating '%s' as an API name; as it does not begin with '/'\n", args[0])
- basepathArgIsApiName = true;
- }
- basepath = args[0]
-
- // Shift the args so the remaining code works with or without the explicit base path arg
- args = args[1:]
- }
-
- // Is the API path valid?
- if (len(args) > 0) {
- if whiskErr, ok := isValidRelpath(args[0]); !ok {
- return nil, whiskErr
- }
- api.GatewayRelPath = args[0] // Maintain case as URLs may be case-sensitive
- }
-
- // Is the API verb valid?
- if (len(args) > 1) {
- if whiskErr, ok := IsValidApiVerb(args[1]); !ok {
- return nil, whiskErr
- }
- api.GatewayMethod = strings.ToUpper(args[1])
- }
-
- // Is the specified action name valid?
- var qualifiedName QualifiedName
- if (len(args) == 3) {
- if qualifiedName, err = parseQualifiedName(args[2]); err != nil {
- return nil, parseQualifiedNameError(args[2], err)
- }
-
- if (qualifiedName.entityName == "") {
- whisk.Debug(whisk.DbgError, "Action name '%s' is invalid\n", args[2])
- errMsg := wski18n.T("'{{.name}}' is not a valid action name.", map[string]interface{}{"name": args[2]})
- whiskErr := whisk.MakeWskErrorFromWskError(errors.New(errMsg), err, whisk.EXITCODE_ERR_GENERAL,
- whisk.DISPLAY_MSG, whisk.DISPLAY_USAGE)
- return nil, whiskErr
- }
- }
-
- if ( len(Flags.api.apiname) > 0 ) {
- if (basepathArgIsApiName) {
- // Specifying API name as argument AND as a --apiname option value is invalid
- whisk.Debug(whisk.DbgError, "API is specified as an argument '%s' and as a flag '%s'\n", basepath, Flags.api.apiname)
- errMsg := wski18n.T("An API name can only be specified once.")
- whiskErr := whisk.MakeWskError(errors.New(errMsg), whisk.EXITCODE_ERR_GENERAL,
- whisk.DISPLAY_MSG, whisk.DISPLAY_USAGE)
- return nil, whiskErr
- }
- apiname = Flags.api.apiname
- }
-
- api.Namespace = client.Config.Namespace
- api.Action = new(whisk.ApiAction)
- api.Action.BackendUrl = "https://" + client.Config.Host + "/api/v1/namespaces/" + qualifiedName.namespace + "/actions/" + qualifiedName.entityName
- api.Action.BackendMethod = "POST"
- api.Action.Name = qualifiedName.entityName
- api.Action.Namespace = qualifiedName.namespace
- api.Action.Auth = client.Config.AuthToken
- api.ApiName = apiname
- api.GatewayBasePath = basepath
- if (!basepathArgIsApiName) { api.Id = "API:"+api.Namespace+":"+api.GatewayBasePath }
-
- whisk.Debug(whisk.DbgInfo, "Parsed api struct: %#v\n", api)
- return api, nil
+var apiCmd = &cobra.Command{
+ Use: "api",
+ Short: wski18n.T("work with APIs"),
}
-func parseSwaggerApi() (*whisk.Api, error) {
- // Test is for completeness, but this situation should only arise due to an internal error
- if ( len(Flags.api.configfile) == 0 ) {
- whisk.Debug(whisk.DbgError, "No swagger file is specified\n")
- errMsg := wski18n.T("A configuration file was not specified.")
- whiskErr := whisk.MakeWskError(errors.New(errMsg),whisk.EXITCODE_ERR_GENERAL,
- whisk.DISPLAY_MSG, whisk.DISPLAY_USAGE)
- return nil, whiskErr
- }
-
- swagger, err:= ReadFile(Flags.api.configfile)
- if ( err != nil ) {
- whisk.Debug(whisk.DbgError, "ReadFile(%s) error: %s\n", Flags.api.configfile, err)
- errMsg := wski18n.T("Error reading swagger file '{{.name}}': {{.err}}",
- map[string]interface{}{"name": Flags.api.configfile, "err": err})
- whiskErr := whisk.MakeWskErrorFromWskError(errors.New(errMsg), err, whisk.EXITCODE_ERR_GENERAL,
- whisk.DISPLAY_MSG, whisk.DISPLAY_USAGE)
- return nil, whiskErr
- }
-
- // Parse the JSON into a swagger object
- swaggerObj := new(whisk.ApiSwagger)
- err = json.Unmarshal([]byte(swagger), swaggerObj)
- if ( err != nil ) {
- whisk.Debug(whisk.DbgError, "JSON parse of `%s' error: %s\n", Flags.api.configfile, err)
- errMsg := wski18n.T("Error parsing swagger file '{{.name}}': {{.err}}",
- map[string]interface{}{"name": Flags.api.configfile, "err": err})
- whiskErr := whisk.MakeWskErrorFromWskError(errors.New(errMsg), err, whisk.EXITCODE_ERR_GENERAL,
- whisk.DISPLAY_MSG, whisk.DISPLAY_USAGE)
- return nil, whiskErr
- }
- if (swaggerObj.BasePath == "" || swaggerObj.SwaggerName == "" || swaggerObj.Info == nil || swaggerObj.Paths == nil) {
- whisk.Debug(whisk.DbgError, "Swagger file is invalid.\n", Flags.api.configfile, err)
- errMsg := wski18n.T("Swagger file is invalid (missing basePath, info, paths, or swagger fields)")
- whiskErr := whisk.MakeWskError(errors.New(errMsg), whisk.EXITCODE_ERR_GENERAL,
- whisk.DISPLAY_MSG, whisk.DISPLAY_USAGE)
- return nil, whiskErr
- }
- if _, ok := isValidBasepath(swaggerObj.BasePath); !ok {
- whisk.Debug(whisk.DbgError, "Swagger file basePath is invalid.\n", Flags.api.configfile, err)
- errMsg := wski18n.T("Swagger file basePath must start with a leading slash (/)")
- whiskErr := whisk.MakeWskError(errors.New(errMsg), whisk.EXITCODE_ERR_GENERAL,
- whisk.DISPLAY_MSG, whisk.DISPLAY_USAGE)
- return nil, whiskErr
- }
-
- api := new(whisk.Api)
- api.Namespace = client.Config.Namespace
- api.Swagger = swagger
-
- return api, nil
-}
+var fmtString = "%-30s %7s %20s %s\n"
func IsValidApiVerb(verb string) (error, bool) {
// Is the API verb valid?
@@ -768,10 +116,10 @@ func getManagedUrl(api *whisk.RetApi, relpath string, operation string) (url str
return url
}
-/////////////
-// V2 Cmds //
-/////////////
-var apiCreateCmdV2 = &cobra.Command{
+//////////////
+// Commands //
+//////////////
+var apiCreateCmd = &cobra.Command{
Use: "create ([BASE_PATH] API_PATH API_VERB ACTION] | --config-file CFG_FILE) ",
Short: wski18n.T("create a new API"),
SilenceUsage: true,
@@ -789,7 +137,7 @@ var apiCreateCmdV2 = &cobra.Command{
whisk.DISPLAY_MSG, whisk.DISPLAY_USAGE)
return whiskErr
} else if (len(args) == 0 && Flags.api.configfile != "") {
- api, err = parseSwaggerApiV2()
+ api, err = parseSwaggerApi()
if err != nil {
whisk.Debug(whisk.DbgError, "parseSwaggerApi() error: %s\n", err)
errMsg := wski18n.T("Unable to parse swagger file: {{.err}}", map[string]interface{}{"err": err})
@@ -802,9 +150,9 @@ var apiCreateCmdV2 = &cobra.Command{
wski18n.T("Specify a swagger file or specify an API base path with an API path, an API verb, and an action name.")); whiskErr != nil {
return whiskErr
}
- api, qname, err = parseApiV2(cmd, args)
+ api, qname, err = parseApi(cmd, args)
if err != nil {
- whisk.Debug(whisk.DbgError, "parseApiV2(%s, %s) error: %s\n", cmd, args, err)
+ whisk.Debug(whisk.DbgError, "parseApi(%s, %s) error: %s\n", cmd, args, err)
errMsg := wski18n.T("Unable to parse api command arguments: {{.err}}",
map[string]interface{}{"err": err})
whiskErr := whisk.MakeWskErrorFromWskError(errors.New(errMsg), err, whisk.EXITCODE_ERR_GENERAL,
@@ -835,9 +183,9 @@ var apiCreateCmdV2 = &cobra.Command{
whisk.Debug(whisk.DbgInfo, "AccessToken: %s\nSpaceGuid: %s\nResponsType: %s",
apiCreateReqOptions.AccessToken, apiCreateReqOptions.SpaceGuid, apiCreateReqOptions.ResponseType)
- retApi, _, err := client.Apis.InsertV2(apiCreateReq, apiCreateReqOptions, whisk.DoNotOverwrite)
+ retApi, _, err := client.Apis.Insert(apiCreateReq, apiCreateReqOptions, whisk.DoNotOverwrite)
if err != nil {
- whisk.Debug(whisk.DbgError, "client.Apis.InsertV2(%#v, false) error: %s\n", api, err)
+ whisk.Debug(whisk.DbgError, "client.Apis.Insert(%#v, false) error: %s\n", api, err)
errMsg := wski18n.T("Unable to create API: {{.err}}", map[string]interface{}{"err": err})
whiskErr := whisk.MakeWskError(errors.New(errMsg), whisk.EXITCODE_ERR_GENERAL,
whisk.DISPLAY_MSG, whisk.NO_DISPLAY_USAGE)
@@ -901,7 +249,7 @@ var apiCreateCmdV2 = &cobra.Command{
},
}
-var apiGetCmdV2 = &cobra.Command{
+var apiGetCmd = &cobra.Command{
Use: "get BASE_PATH | API_NAME",
Short: wski18n.T("get API details"),
SilenceUsage: true,
@@ -935,15 +283,15 @@ var apiGetCmdV2 = &cobra.Command{
return err
}
- retApi, _, err := client.Apis.GetV2(apiGetReq, apiGetReqOptions)
+ retApi, _, err := client.Apis.Get(apiGetReq, apiGetReqOptions)
if err != nil {
- whisk.Debug(whisk.DbgError, "client.Apis.GetV2(%#v, %#v) error: %s\n", apiGetReq, apiGetReqOptions, err)
+ whisk.Debug(whisk.DbgError, "client.Apis.Get(%#v, %#v) error: %s\n", apiGetReq, apiGetReqOptions, err)
errMsg := wski18n.T("Unable to get API '{{.name}}': {{.err}}", map[string]interface{}{"name": args[0], "err": err})
whiskErr := whisk.MakeWskError(errors.New(errMsg), whisk.EXITCODE_ERR_GENERAL,
whisk.DISPLAY_MSG, whisk.NO_DISPLAY_USAGE)
return whiskErr
}
- whisk.Debug(whisk.DbgInfo, "client.Apis.GetV2 returned: %#v\n", retApi)
+ whisk.Debug(whisk.DbgInfo, "client.Apis.Get returned: %#v\n", retApi)
var displayResult interface{} = nil
if (Flags.common.detail) {
@@ -999,7 +347,7 @@ var apiGetCmdV2 = &cobra.Command{
},
}
-var apiDeleteCmdV2 = &cobra.Command{
+var apiDeleteCmd = &cobra.Command{
Use: "delete BASE_PATH | API_NAME [API_PATH [API_VERB]]",
Short: wski18n.T("delete an API"),
SilenceUsage: true,
@@ -1045,9 +393,9 @@ var apiDeleteCmdV2 = &cobra.Command{
apiDeleteReqOptions.ApiVerb = strings.ToUpper(args[2])
}
- _, err = client.Apis.DeleteV2(apiDeleteReq, apiDeleteReqOptions)
+ _, err = client.Apis.Delete(apiDeleteReq, apiDeleteReqOptions)
if err != nil {
- whisk.Debug(whisk.DbgError, "client.Apis.DeleteV2(%#v, %#v) error: %s\n", apiDeleteReq, apiDeleteReqOptions, err)
+ whisk.Debug(whisk.DbgError, "client.Apis.Delete(%#v, %#v) error: %s\n", apiDeleteReq, apiDeleteReqOptions, err)
errMsg := wski18n.T("Unable to delete API: {{.err}}", map[string]interface{}{"err": err})
whiskErr := whisk.MakeWskError(errors.New(errMsg), whisk.EXITCODE_ERR_GENERAL,
whisk.DISPLAY_MSG, whisk.NO_DISPLAY_USAGE)
@@ -1084,7 +432,7 @@ var apiDeleteCmdV2 = &cobra.Command{
},
}
-var apiListCmdV2 = &cobra.Command{
+var apiListCmd = &cobra.Command{
Use: "list [[BASE_PATH | API_NAME] [API_PATH [API_VERB]]",
Short: wski18n.T("list APIs"),
SilenceUsage: true,
@@ -1092,9 +440,9 @@ var apiListCmdV2 = &cobra.Command{
PreRunE: setupClientConfig,
RunE: func(cmd *cobra.Command, args []string) error {
var err error
- var retApiList *whisk.ApiListResponseV2
- var retApi *whisk.ApiGetResponseV2
- var retApiArray *whisk.RetApiArrayV2
+ var retApiList *whisk.ApiListResponse
+ var retApi *whisk.ApiGetResponse
+ var retApiArray *whisk.RetApiArray
var apiPath string
var apiVerb string
@@ -1115,17 +463,17 @@ var apiListCmdV2 = &cobra.Command{
return err
}
- retApiList, _, err = client.Apis.ListV2(apiListReqOptions)
+ retApiList, _, err = client.Apis.List(apiListReqOptions)
if err != nil {
- whisk.Debug(whisk.DbgError, "client.Apis.ListV2(%#v) error: %s\n", apiListReqOptions, err)
+ whisk.Debug(whisk.DbgError, "client.Apis.List(%#v) error: %s\n", apiListReqOptions, err)
errMsg := wski18n.T("Unable to obtain the API list: {{.err}}", map[string]interface{}{"err": err})
whiskErr := whisk.MakeWskError(errors.New(errMsg), whisk.EXITCODE_ERR_GENERAL,
whisk.DISPLAY_MSG, whisk.NO_DISPLAY_USAGE)
return whiskErr
}
- whisk.Debug(whisk.DbgInfo, "client.Apis.ListV2 returned: %#v (%+v)\n", retApiList, retApiList)
+ whisk.Debug(whisk.DbgInfo, "client.Apis.List returned: %#v (%+v)\n", retApiList, retApiList)
// Cast to a common type to allow for code to print out apilist response or apiget response
- retApiArray = (*whisk.RetApiArrayV2)(retApiList)
+ retApiArray = (*whisk.RetApiArray)(retApiList)
} else {
// Get API request body
apiGetReq := new(whisk.ApiGetRequest)
@@ -1158,17 +506,17 @@ var apiListCmdV2 = &cobra.Command{
apiGetReqOptions.ApiVerb = apiVerb
}
- retApi, _, err = client.Apis.GetV2(apiGetReq, apiGetReqOptions)
+ retApi, _, err = client.Apis.Get(apiGetReq, apiGetReqOptions)
if err != nil {
- whisk.Debug(whisk.DbgError, "client.Apis.GetV2(%#v, %#v) error: %s\n", apiGetReq, apiGetReqOptions, err)
+ whisk.Debug(whisk.DbgError, "client.Apis.Get(%#v, %#v) error: %s\n", apiGetReq, apiGetReqOptions, err)
errMsg := wski18n.T("Unable to obtain the API list: {{.err}}", map[string]interface{}{"err": err})
whiskErr := whisk.MakeWskErrorFromWskError(errors.New(errMsg), err, whisk.EXITCODE_ERR_GENERAL,
whisk.DISPLAY_MSG, whisk.NO_DISPLAY_USAGE)
return whiskErr
}
- whisk.Debug(whisk.DbgInfo, "client.Apis.GetV2 returned: %#v\n", retApi)
+ whisk.Debug(whisk.DbgInfo, "client.Apis.Get returned: %#v\n", retApi)
// Cast to a common type to allow for code to print out apilist response or apiget response
- retApiArray = (*whisk.RetApiArrayV2)(retApi)
+ retApiArray = (*whisk.RetApiArray)(retApi)
}
// Display the APIs - applying any specified filtering
@@ -1180,14 +528,14 @@ var apiListCmdV2 = &cobra.Command{
}))
for i:=0; i<len(retApiArray.Apis); i++ {
- printFilteredListApiV2(retApiArray.Apis[i].ApiValue, apiPath, apiVerb)
+ printFilteredListApi(retApiArray.Apis[i].ApiValue, apiPath, apiVerb)
}
} else {
if (len(retApiArray.Apis) > 0) {
// Dynamically create the output format string based on the maximum size of the
// fully qualified action name and the API Name.
- maxActionNameSize := min(40, max(len("Action"), getLargestActionNameSizeV2(retApiArray, apiPath, apiVerb)))
- maxApiNameSize := min(30, max(len("API Name"), getLargestApiNameSizeV2(retApiArray, apiPath, apiVerb)))
+ maxActionNameSize := min(40, max(len("Action"), getLargestActionNameSize(retApiArray, apiPath, apiVerb)))
+ maxApiNameSize := min(30, max(len("API Name"), getLargestApiNameSize(retApiArray, apiPath, apiVerb)))
fmtString = "%-"+strconv.Itoa(maxActionNameSize)+"s %7s %"+strconv.Itoa(maxApiNameSize+1)+"s %s\n"
fmt.Fprintf(color.Output,
wski18n.T("{{.ok}} APIs\n",
@@ -1196,7 +544,7 @@ var apiListCmdV2 = &cobra.Command{
}))
fmt.Printf(fmtString, "Action", "Verb", "API Name", "URL")
for i:=0; i<len(retApiArray.Apis); i++ {
- printFilteredListRowV2(retApiArray.Apis[i].ApiValue, apiPath, apiVerb, maxActionNameSize, maxApiNameSize)
+ printFilteredListRow(retApiArray.Apis[i].ApiValue, apiPath, apiVerb, maxActionNameSize, maxApiNameSize)
}
} else {
fmt.Fprintf(color.Output,
@@ -1217,19 +565,19 @@ var apiListCmdV2 = &cobra.Command{
* and some filtering configuration. For each API endpoint matching the filtering criteria, display
* each endpoint's configuration - one line per configuration property (action name, verb, api name, api gw url)
*/
-func printFilteredListApiV2(resultApi *whisk.RetApiV2, apiPath string, apiVerb string) {
+func printFilteredListApi(resultApi *whisk.RetApi, apiPath string, apiVerb string) {
baseUrl := strings.TrimSuffix(resultApi.BaseUrl, "/")
apiName := resultApi.Swagger.Info.Title
basePath := resultApi.Swagger.BasePath
if (resultApi.Swagger != nil && resultApi.Swagger.Paths != nil) {
for path, _ := range resultApi.Swagger.Paths {
- whisk.Debug(whisk.DbgInfo, "printFilteredListApiV2: comparing api relpath: %s\n", path)
+ whisk.Debug(whisk.DbgInfo, "printFilteredListApi: comparing api relpath: %s\n", path)
if ( len(apiPath) == 0 || path == apiPath) {
- whisk.Debug(whisk.DbgInfo, "printFilteredListApiV2: relpath matches\n")
+ whisk.Debug(whisk.DbgInfo, "printFilteredListApi: relpath matches\n")
for op, opv := range resultApi.Swagger.Paths[path] {
- whisk.Debug(whisk.DbgInfo, "printFilteredListApiV2: comparing operation: '%s'\n", op)
+ whisk.Debug(whisk.DbgInfo, "printFilteredListApi: comparing operation: '%s'\n", op)
if ( len(apiVerb) == 0 || strings.ToLower(op) == strings.ToLower(apiVerb)) {
- whisk.Debug(whisk.DbgInfo, "printFilteredListApiV2: operation matches: %#v\n", opv)
+ whisk.Debug(whisk.DbgInfo, "printFilteredListApi: operation matches: %#v\n", opv)
var actionName string
if (opv.XOpenWhisk == nil) {
actionName = ""
@@ -1258,18 +606,18 @@ func printFilteredListApiV2(resultApi *whisk.RetApiV2, apiPath string, apiVerb s
*
* NOTE: Large action name and api name value will be truncated by their associated max size parameters.
*/
-func printFilteredListRowV2(resultApi *whisk.RetApiV2, apiPath string, apiVerb string, maxActionNameSize int, maxApiNameSize int) {
+func printFilteredListRow(resultApi *whisk.RetApi, apiPath string, apiVerb string, maxActionNameSize int, maxApiNameSize int) {
baseUrl := strings.TrimSuffix(resultApi.BaseUrl, "/")
apiName := resultApi.Swagger.Info.Title
if (resultApi.Swagger != nil && resultApi.Swagger.Paths != nil) {
for path, _ := range resultApi.Swagger.Paths {
- whisk.Debug(whisk.DbgInfo, "printFilteredListRowV2: comparing api relpath: %s\n", path)
+ whisk.Debug(whisk.DbgInfo, "printFilteredListRow: comparing api relpath: %s\n", path)
if ( len(apiPath) == 0 || path == apiPath) {
- whisk.Debug(whisk.DbgInfo, "printFilteredListRowV2: relpath matches\n")
+ whisk.Debug(whisk.DbgInfo, "printFilteredListRow: relpath matches\n")
for op, opv := range resultApi.Swagger.Paths[path] {
- whisk.Debug(whisk.DbgInfo, "printFilteredListRowV2: comparing operation: '%s'\n", op)
+ whisk.Debug(whisk.DbgInfo, "printFilteredListRow: comparing operation: '%s'\n", op)
if ( len(apiVerb) == 0 || strings.ToLower(op) == strings.ToLower(apiVerb)) {
- whisk.Debug(whisk.DbgInfo, "printFilteredListRowV2: operation matches: %#v\n", opv)
+ whisk.Debug(whisk.DbgInfo, "printFilteredListRow: operation matches: %#v\n", opv)
var actionName string
if (opv.XOpenWhisk == nil) {
actionName = ""
@@ -1290,7 +638,7 @@ func printFilteredListRowV2(resultApi *whisk.RetApiV2, apiPath string, apiVerb s
}
}
-func getLargestActionNameSizeV2(retApiArray *whisk.RetApiArrayV2, apiPath string, apiVerb string) int {
+func getLargestActionNameSize(retApiArray *whisk.RetApiArray, apiPath string, apiVerb string) int {
var maxNameSize = 0
for i:=0; i<len(retApiArray.Apis); i++ {
var resultApi = retApiArray.Apis[i].ApiValue
@@ -1323,7 +671,7 @@ func getLargestActionNameSizeV2(retApiArray *whisk.RetApiArrayV2, apiPath string
return maxNameSize
}
-func getLargestApiNameSizeV2(retApiArray *whisk.RetApiArrayV2, apiPath string, apiVerb string) int {
+func getLargestApiNameSize(retApiArray *whisk.RetApiArray, apiPath string, apiVerb string) int {
var maxNameSize = 0
for i:=0; i<len(retApiArray.Apis); i++ {
var resultApi = retApiArray.Apis[i].ApiValue
@@ -1361,7 +709,7 @@ func getLargestApiNameSizeV2(retApiArray *whisk.RetApiArrayV2, apiPath string, a
* args[1] = API verb
* args[2] = Optional. Action name (may or may not be qualified with namespace and package name)
*/
-func parseApiV2(cmd *cobra.Command, args []string) (*whisk.Api, *QualifiedName, error) {
+func parseApi(cmd *cobra.Command, args []string) (*whisk.Api, *QualifiedName, error) {
var err error
var basepath string = "/"
var apiname string
@@ -1452,7 +800,7 @@ func parseApiV2(cmd *cobra.Command, args []string) (*whisk.Api, *QualifiedName,
return api, &qName, nil
}
-func parseSwaggerApiV2() (*whisk.Api, error) {
+func parseSwaggerApi() (*whisk.Api, error) {
// Test is for completeness, but this situation should only arise due to an internal error
if ( len(Flags.api.configfile) == 0 ) {
whisk.Debug(whisk.DbgError, "No swagger file is specified\n")
@@ -1488,7 +836,7 @@ func parseSwaggerApiV2() (*whisk.Api, error) {
}
// Parse the JSON into a swagger object
- swaggerObj := new(whisk.ApiSwaggerV2)
+ swaggerObj := new(whisk.ApiSwagger)
err = json.Unmarshal([]byte(swagger), swaggerObj)
if ( err != nil ) {
whisk.Debug(whisk.DbgError, "JSON parse of `%s' error: %s\n", Flags.api.configfile, err)
@@ -1565,35 +913,19 @@ func getUserContextId() (string, error) {
///////////
func init() {
+
apiCreateCmd.Flags().StringVarP(&Flags.api.apiname, "apiname", "n", "", wski18n.T("Friendly name of the API; ignored when CFG_FILE is specified (default BASE_PATH)"))
apiCreateCmd.Flags().StringVarP(&Flags.api.configfile, "config-file", "c", "", wski18n.T("`CFG_FILE` containing API configuration in swagger JSON format"))
- //apiUpdateCmd.Flags().StringVarP(&Flags.api.action, "action", "a", "", wski18n.T("`ACTION` to invoke when API is called"))
- //apiUpdateCmd.Flags().StringVarP(&Flags.api.path, "path", "p", "", wski18n.T("relative `PATH` of API"))
- //apiUpdateCmd.Flags().StringVarP(&Flags.api.verb, "method", "m", "", wski18n.T("API `VERB`"))
+ apiCreateCmd.Flags().StringVar(&Flags.api.resptype, "response-type", "json", wski18n.T("Set the web action response `TYPE`. Possible values are html, http, json, text, svg"))
apiGetCmd.Flags().BoolVarP(&Flags.common.detail, "full", "f", false, wski18n.T("display full API configuration details"))
+ apiGetCmd.Flags().StringVarP(&Flags.common.format, "format", "", formatOptionJson, wski18n.T("Specify the API output `TYPE`, either json or yaml"))
apiListCmd.Flags().IntVarP(&Flags.common.skip, "skip", "s", 0, wski18n.T("exclude the first `SKIP` number of actions from the result"))
apiListCmd.Flags().IntVarP(&Flags.common.limit, "limit", "l", 30, wski18n.T("only return `LIMIT` number of actions from the collection"))
apiListCmd.Flags().BoolVarP(&Flags.common.full, "full", "f", false, wski18n.T("display full description of each API"))
- apiExperimentalCmd.AddCommand(
+ apiCmd.AddCommand(
apiCreateCmd,
- //apiUpdateCmd,
apiGetCmd,
apiDeleteCmd,
apiListCmd,
)
-
- apiCreateCmdV2.Flags().StringVarP(&Flags.api.apiname, "apiname", "n", "", wski18n.T("Friendly name of the API; ignored when CFG_FILE is specified (default BASE_PATH)"))
- apiCreateCmdV2.Flags().StringVarP(&Flags.api.configfile, "config-file", "c", "", wski18n.T("`CFG_FILE` containing API configuration in swagger JSON format"))
- apiCreateCmdV2.Flags().StringVar(&Flags.api.resptype, "response-type", "json", wski18n.T("Set the web action response `TYPE`. Possible values are html, http, json, text, svg"))
- apiGetCmdV2.Flags().BoolVarP(&Flags.common.detail, "full", "f", false, wski18n.T("display full API configuration details"))
- apiGetCmdV2.Flags().StringVarP(&Flags.common.format, "format", "", formatOptionJson, wski18n.T("Specify the API output `TYPE`, either json or yaml"))
- apiListCmdV2.Flags().IntVarP(&Flags.common.skip, "skip", "s", 0, wski18n.T("exclude the first `SKIP` number of actions from the result"))
- apiListCmdV2.Flags().IntVarP(&Flags.common.limit, "limit", "l", 30, wski18n.T("only return `LIMIT` number of actions from the collection"))
- apiListCmdV2.Flags().BoolVarP(&Flags.common.full, "full", "f", false, wski18n.T("display full description of each API"))
- apiCmd.AddCommand(
- apiCreateCmdV2,
- apiGetCmdV2,
- apiDeleteCmdV2,
- apiListCmdV2,
- )
}
diff --git a/commands/wsk.go b/commands/wsk.go
index 62ac850..f7f209b 100644
--- a/commands/wsk.go
+++ b/commands/wsk.go
@@ -54,7 +54,6 @@ func init() {
propertyCmd,
namespaceCmd,
listCmd,
- apiExperimentalCmd,
apiCmd,
)
diff --git a/wski18n/resources/en_US.all.json b/wski18n/resources/en_US.all.json
index 5608728..2140b9e 100644
--- a/wski18n/resources/en_US.all.json
+++ b/wski18n/resources/en_US.all.json
@@ -1300,18 +1300,6 @@
"translation": "'{{.verb}}' is not a valid API verb. Valid values are: {{.verbs}}"
},
{
- "id": "`ACTION` to invoke when API is called",
- "translation": "`ACTION` to invoke when API is called"
- },
- {
- "id": "relative `API_PATH` of API",
- "translation": "relative `API_PATH` of API"
- },
- {
- "id": "API `API_VERB`",
- "translation": "API `API_VERB`"
- },
- {
"id": "API collection `NAME` (default NAMESPACE)",
"translation": "API collection `NAME` (default NAMESPACE)"
},
--
To stop receiving notification emails like this one, please contact
"commits@openwhisk.apache.org" <co...@openwhisk.apache.org>.