Skip to content

Commit

Permalink
Allow FQN with 3 parts (namespace/package/action) to be input with/wi…
Browse files Browse the repository at this point in the history
…thout leading slash in CLI (apache#2424)
  • Loading branch information
underwoodb-sd-ibm authored and csantanapr committed Aug 17, 2017
1 parent ab4c0a8 commit 9b26034
Show file tree
Hide file tree
Showing 10 changed files with 442 additions and 362 deletions.
110 changes: 55 additions & 55 deletions commands/action.go
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ var actionInvokeCmd = &cobra.Command{
RunE: func(cmd *cobra.Command, args []string) error {
var err error
var parameters interface{}
var qualifiedName QualifiedName
var qualifiedName = new(QualifiedName)
var paramArgs []string

if whiskErr := checkArgs(
Expand All @@ -133,11 +133,11 @@ var actionInvokeCmd = &cobra.Command{
return whiskErr
}

if qualifiedName, err = parseQualifiedName(args[0]); err != nil {
return parseQualifiedNameError(args[0], err)
if qualifiedName, err = NewQualifiedName(args[0]); err != nil {
return NewQualifiedNameError(args[0], err)
}

client.Namespace = qualifiedName.namespace
client.Namespace = qualifiedName.GetNamespace()
paramArgs = Flags.common.param

if len(paramArgs) > 0 {
Expand All @@ -149,12 +149,12 @@ var actionInvokeCmd = &cobra.Command{
Flags.common.blocking = true}

res, _, err := client.Actions.Invoke(
qualifiedName.entityName,
qualifiedName.GetEntityName(),
parameters,
Flags.common.blocking,
Flags.action.result)

return handleInvocationResponse(qualifiedName, parameters, res, err)
return handleInvocationResponse(*qualifiedName, parameters, res, err)
},
}

Expand All @@ -165,29 +165,29 @@ func handleInvocationResponse(
err error) (error) {
if err == nil {
printInvocationMsg(
qualifiedName.namespace,
qualifiedName.entityName,
qualifiedName.GetNamespace(),
qualifiedName.GetEntityName(),
getValueFromJSONResponse(ACTIVATION_ID, result),
result,
color.Output)
} else {
if !Flags.common.blocking {
return handleInvocationError(err, qualifiedName.entityName, parameters)
return handleInvocationError(err, qualifiedName.GetEntityName(), parameters)
} else {
if isBlockingTimeout(err) {
printBlockingTimeoutMsg(
qualifiedName.namespace,
qualifiedName.entityName,
qualifiedName.GetNamespace(),
qualifiedName.GetEntityName(),
getValueFromJSONResponse(ACTIVATION_ID, result))
} else if isApplicationError(err) {
printInvocationMsg(
qualifiedName.namespace,
qualifiedName.entityName,
qualifiedName.GetNamespace(),
qualifiedName.GetEntityName(),
getValueFromJSONResponse(ACTIVATION_ID, result),
result,
colorable.NewColorableStderr())
} else {
return handleInvocationError(err, qualifiedName.entityName, parameters)
return handleInvocationError(err, qualifiedName.GetEntityName(), parameters)
}
}
}
Expand All @@ -205,7 +205,7 @@ var actionGetCmd = &cobra.Command{
var err error
var field string
var action *whisk.Action
var qualifiedName QualifiedName
var qualifiedName = new(QualifiedName)

if whiskErr := checkArgs(args, 1, 2, "Action get", wski18n.T("An action name is required.")); whiskErr != nil {
return whiskErr
Expand All @@ -219,29 +219,29 @@ var actionGetCmd = &cobra.Command{
}
}

if qualifiedName, err = parseQualifiedName(args[0]); err != nil {
return parseQualifiedNameError(args[0], err)
if qualifiedName, err = NewQualifiedName(args[0]); err != nil {
return NewQualifiedNameError(args[0], err)
}

client.Namespace = qualifiedName.namespace
client.Namespace = qualifiedName.GetNamespace()

if action, _, err = client.Actions.Get(qualifiedName.entityName); err != nil {
return actionGetError(qualifiedName.entityName, err)
if action, _, err = client.Actions.Get(qualifiedName.GetEntityName()); err != nil {
return actionGetError(qualifiedName.GetEntityName(), err)
}

if Flags.action.url {
actionURL := action.ActionURL(Properties.APIHost,
DefaultOpenWhiskApiPath,
Properties.APIVersion,
qualifiedName.packageName)
printActionGetWithURL(qualifiedName.entity, actionURL)
} else if Flags.common.summary {
qualifiedName.GetPackageName())
printActionGetWithURL(qualifiedName.GetEntity(), actionURL)
} else if flags.common.summary {
printSummary(action)
} else {
if len(field) > 0 {
printActionGetWithField(qualifiedName.entityName, field, action)
printActionGetWithField(qualifiedName.GetEntityName(), field, action)
} else {
printActionGet(qualifiedName.entityName, action)
printActionGet(qualifiedName.GetEntityName(), action)
}
}

Expand All @@ -256,7 +256,7 @@ var actionDeleteCmd = &cobra.Command{
SilenceErrors: true,
PreRunE: setupClientConfig,
RunE: func(cmd *cobra.Command, args []string) error {
var qualifiedName QualifiedName
var qualifiedName = new(QualifiedName)
var err error

if whiskErr := checkArgs(
Expand All @@ -268,17 +268,17 @@ var actionDeleteCmd = &cobra.Command{
return whiskErr
}

if qualifiedName, err = parseQualifiedName(args[0]); err != nil {
return parseQualifiedNameError(args[0], err)
if qualifiedName, err = NewQualifiedName(args[0]); err != nil {
return NewQualifiedNameError(args[0], err)
}

client.Namespace = qualifiedName.namespace
client.Namespace = qualifiedName.GetNamespace()

if _, err = client.Actions.Delete(qualifiedName.entityName); err != nil {
return actionDeleteError(qualifiedName.entityName, err)
if _, err = client.Actions.Delete(qualifiedName.GetEntityName()); err != nil {
return actionDeleteError(qualifiedName.GetEntityName(), err)
}

printActionDeleted(qualifiedName.entityName)
printActionDeleted(qualifiedName.GetEntityName())

return nil
},
Expand All @@ -291,7 +291,7 @@ var actionListCmd = &cobra.Command{
SilenceErrors: true,
PreRunE: setupClientConfig,
RunE: func(cmd *cobra.Command, args []string) error {
var qualifiedName QualifiedName
var qualifiedName = new(QualifiedName)
var actions []whisk.Action
var err error

Expand All @@ -305,20 +305,20 @@ var actionListCmd = &cobra.Command{
}

if len(args) == 1 {
if qualifiedName, err = parseQualifiedName(args[0]); err != nil {
return parseQualifiedNameError(args[0], err)
if qualifiedName, err = NewQualifiedName(args[0]); err != nil {
return NewQualifiedNameError(args[0], err)
}

client.Namespace = qualifiedName.namespace
client.Namespace = qualifiedName.GetNamespace()
}

options := &whisk.ActionListOptions{
Skip: Flags.common.skip,
Limit: Flags.common.limit,
}

if actions, _, err = client.Actions.List(qualifiedName.entityName, options); err != nil {
return actionListError(qualifiedName.entityName, options, err)
if actions, _, err = client.Actions.List(qualifiedName.GetEntityName(), options); err != nil {
return actionListError(qualifiedName.GetEntityName(), options, err)
}

printList(actions)
Expand All @@ -335,16 +335,16 @@ func parseAction(cmd *cobra.Command, args []string, update bool) (*whisk.Action,
var parameters interface{}
var annotations interface{}

qualifiedName := QualifiedName{}
var qualifiedName = new(QualifiedName)

if qualifiedName, err = parseQualifiedName(args[0]); err != nil {
return nil, parseQualifiedNameError(args[0], err)
if qualifiedName, err = NewQualifiedName(args[0]); err != nil {
return nil, NewQualifiedNameError(args[0], err)
}

client.Namespace = qualifiedName.namespace
client.Namespace = qualifiedName.GetNamespace()
action := new(whisk.Action)
action.Name = qualifiedName.entityName
action.Namespace = qualifiedName.namespace
action.Name = qualifiedName.GetEntityName()
action.Namespace = qualifiedName.GetNamespace()
action.Limits = getLimits(
cmd.LocalFlags().Changed(MEMORY_FLAG),
cmd.LocalFlags().Changed(LOG_SIZE_FLAG),
Expand Down Expand Up @@ -373,19 +373,19 @@ func parseAction(cmd *cobra.Command, args []string, update bool) (*whisk.Action,
}

if Flags.action.copy {
copiedQualifiedName := QualifiedName{}
var copiedQualifiedName = new(QualifiedName)

if copiedQualifiedName, err = parseQualifiedName(args[1]); err != nil {
return nil, parseQualifiedNameError(args[1], err)
if copiedQualifiedName, err = NewQualifiedName(args[1]); err != nil {
return nil, NewQualifiedNameError(args[1], err)
}

client.Namespace = copiedQualifiedName.namespace
client.Namespace = copiedQualifiedName.GetNamespace()

if existingAction, _, err = client.Actions.Get(copiedQualifiedName.entityName); err != nil {
return nil, actionGetError(copiedQualifiedName.entityName, err)
if existingAction, _, err = client.Actions.Get(copiedQualifiedName.GetEntityName()); err != nil {
return nil, actionGetError(copiedQualifiedName.GetEntityName(), err)
}

client.Namespace = qualifiedName.namespace
client.Namespace = qualifiedName.GetNamespace()
action.Exec = existingAction.Exec
action.Parameters = append(action.Parameters, existingAction.Parameters...)
action.Annotations = append(action.Annotations, existingAction.Annotations...)
Expand All @@ -408,7 +408,7 @@ func parseAction(cmd *cobra.Command, args []string, update bool) (*whisk.Action,

if cmd.LocalFlags().Changed(WEB_FLAG) {
preserveAnnotations := action.Annotations == nil
action.Annotations, err = webAction(Flags.action.web, action.Annotations, qualifiedName.entityName, preserveAnnotations)
action.Annotations, err = webAction(Flags.action.web, action.Annotations, qualifiedName.GetEntityName(), preserveAnnotations)
}

whisk.Debug(whisk.DbgInfo, "Parsed action struct: %#v\n", action)
Expand Down Expand Up @@ -875,10 +875,10 @@ func isWebAction(client *whisk.Client, qname QualifiedName) (error) {
var err error = nil

savedNs := client.Namespace
client.Namespace = qname.namespace
fullActionName := "/" + qname.namespace + "/" + qname.entityName
client.Namespace = qname.GetNamespace()
fullActionName := "/" + qname.GetNamespace() + "/" + qname.GetEntityName()

action, _, err := client.Actions.Get(qname.entityName)
action, _, err := client.Actions.Get(qname.GetEntityName())

if err != nil {
whisk.Debug(whisk.DbgError, "client.Actions.Get(%s) error: %s\n", fullActionName, err)
Expand Down
10 changes: 5 additions & 5 deletions commands/activation.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ var activationListCmd = &cobra.Command{
PreRunE: setupClientConfig,
RunE: func(cmd *cobra.Command, args []string) error {
var err error
var qualifiedName QualifiedName
var qualifiedName = new(QualifiedName)

if whiskErr := checkArgs(args, 0, 1, "Activation list",
wski18n.T("An optional namespace is the only valid argument.")); whiskErr != nil {
Expand All @@ -63,15 +63,15 @@ var activationListCmd = &cobra.Command{
if len(args) == 1 {
whisk.Debug(whisk.DbgInfo, "Activation item name filter '%s' provided\n", args[0])

if qualifiedName, err = parseQualifiedName(args[0]); err != nil {
return parseQualifiedNameError(args[0], err)
if qualifiedName, err = NewQualifiedName(args[0]); err != nil {
return NewQualifiedNameError(args[0], err)
}

client.Namespace = qualifiedName.namespace
client.Namespace = qualifiedName.GetNamespace()
}

options := &whisk.ActivationListOptions{
Name: qualifiedName.entityName,
Name: qualifiedName.GetEntityName(),
Limit: Flags.common.limit,
Skip: Flags.common.skip,
Upto: Flags.activation.upto,
Expand Down
23 changes: 11 additions & 12 deletions commands/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ var apiCreateCmd = &cobra.Command{
RunE: func(cmd *cobra.Command, args []string) error {
var api *whisk.Api
var err error
var qname *QualifiedName
var qname = new(QualifiedName)

if (len(args) == 0 && Flags.api.configfile == "") {
whisk.Debug(whisk.DbgError, "No swagger file and no arguments\n")
Expand Down Expand Up @@ -746,19 +746,18 @@ func parseApi(cmd *cobra.Command, args []string) (*whisk.Api, *QualifiedName, er
}

// Is the specified action name valid?
var qName QualifiedName
var qName = new(QualifiedName)
if (len(args) == 3) {
qName = QualifiedName{}
qName, err = parseQualifiedName(args[2])
qName, err = NewQualifiedName(args[2])
if err != nil {
whisk.Debug(whisk.DbgError, "parseQualifiedName(%s) failed: %s\n", args[2], err)
whisk.Debug(whisk.DbgError, "NewQualifiedName(%s) failed: %s\n", args[2], err)
errMsg := wski18n.T("'{{.name}}' is not a valid action name: {{.err}}",
map[string]interface{}{"name": args[2], "err": err})
whiskErr := whisk.MakeWskErrorFromWskError(errors.New(errMsg), err, whisk.EXIT_CODE_ERR_GENERAL,
whisk.DISPLAY_MSG, whisk.DISPLAY_USAGE)
return nil, nil, whiskErr
}
if (qName.entityName == "") {
if (qName.GetEntityName() == "") {
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.EXIT_CODE_ERR_GENERAL,
Expand All @@ -782,22 +781,22 @@ func parseApi(cmd *cobra.Command, args []string) (*whisk.Api, *QualifiedName, er
api.Namespace = client.Config.Namespace
api.Action = new(whisk.ApiAction)
var urlActionPackage string
if (len(qName.packageName) > 0) {
urlActionPackage = qName.packageName
if (len(qName.GetPackageName()) > 0) {
urlActionPackage = qName.GetPackageName()
} else {
urlActionPackage = "default"
}
api.Action.BackendUrl = "https://" + client.Config.Host + "/api/v1/web/" + qName.namespace + "/" + urlActionPackage + "/" + qName.entity + ".http"
api.Action.BackendUrl = "https://" + client.Config.Host + "/api/v1/web/" + qName.GetNamespace() + "/" + urlActionPackage + "/" + qName.GetEntity() + ".http"
api.Action.BackendMethod = api.GatewayMethod
api.Action.Name = qName.entityName
api.Action.Namespace = qName.namespace
api.Action.Name = qName.GetEntityName()
api.Action.Namespace = qName.GetNamespace()
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, &qName, nil
return api, qName, nil
}

func parseSwaggerApi() (*whisk.Api, error) {
Expand Down
12 changes: 6 additions & 6 deletions commands/namespace.go
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ var namespaceGetCmd = &cobra.Command{
SilenceErrors: true,
PreRunE: setupClientConfig,
RunE: func(cmd *cobra.Command, args []string) error {
var qualifiedName QualifiedName
var qualifiedName = new(QualifiedName)
var err error

if whiskErr := checkArgs(args, 0, 1, "Namespace get",
Expand All @@ -77,16 +77,16 @@ var namespaceGetCmd = &cobra.Command{

// Namespace argument is optional; defaults to configured property namespace
if len(args) == 1 {
if qualifiedName, err = parseQualifiedName(args[0]); err != nil {
return parseQualifiedNameError(args[0], err)
if qualifiedName, err = NewQualifiedName(args[0]); err != nil {
return NewQualifiedNameError(args[0], err)
}

if len(qualifiedName.entityName) > 0 {
return entityNameError(qualifiedName.entityName)
if len(qualifiedName.GetEntityName()) > 0 {
return entityNameError(qualifiedName.GetEntityName())
}
}

namespace, _, err := client.Namespaces.Get(qualifiedName.namespace)
namespace, _, err := client.Namespaces.Get(qualifiedName.GetNamespace())

if err != nil {
whisk.Debug(whisk.DbgError, "client.Namespaces.Get(%s) error: %s\n", getClientNamespace(), err)
Expand Down
Loading

0 comments on commit 9b26034

Please sign in to comment.