in commands/action.go [399:490]
func parseAction(cmd *cobra.Command, args []string, update bool) (*whisk.Action, error) {
var err error
var existingAction *whisk.Action
var paramArgs []string
var annotArgs []string
var parameters interface{}
var annotations interface{}
var qualifiedName = new(QualifiedName)
if qualifiedName, err = NewQualifiedName(args[0]); err != nil {
return nil, NewQualifiedNameError(args[0], err)
}
Client.Namespace = qualifiedName.GetNamespace()
action := new(whisk.Action)
action.Name = qualifiedName.GetEntityName()
action.Namespace = qualifiedName.GetNamespace()
action.Limits = getLimits(
cmd.LocalFlags().Changed(MEMORY_FLAG),
cmd.LocalFlags().Changed(LOG_SIZE_FLAG),
cmd.LocalFlags().Changed(TIMEOUT_FLAG),
cmd.LocalFlags().Changed(CONCURRENCY_FLAG),
Flags.action.memory,
Flags.action.logsize,
Flags.action.timeout,
Flags.action.concurrency)
paramArgs = Flags.common.param
annotArgs = Flags.common.annotation
if len(paramArgs) > 0 {
if parameters, err = getJSONFromStrings(paramArgs, true); err != nil {
return nil, getJSONFromStringsParamError(paramArgs, true, err)
}
action.Parameters = parameters.(whisk.KeyValueArr)
}
if len(annotArgs) > 0 {
if annotations, err = getJSONFromStrings(annotArgs, true); err != nil {
return nil, getJSONFromStringsAnnotError(annotArgs, true, err)
}
action.Annotations = annotations.(whisk.KeyValueArr)
}
if len(Flags.action.kind) > 0 && len(Flags.action.docker) > 0 {
errStr := wski18n.T("Cannot specify both --kind and --docker at the same time.")
return nil, whisk.MakeWskError(errors.New(errStr), whisk.NOT_ALLOWED, whisk.DISPLAY_MSG, whisk.NO_DISPLAY_USAGE)
}
if Flags.action.copy {
var copiedQualifiedName = new(QualifiedName)
if copiedQualifiedName, err = NewQualifiedName(args[1]); err != nil {
return nil, NewQualifiedNameError(args[1], err)
}
Client.Namespace = copiedQualifiedName.GetNamespace()
if existingAction, _, err = Client.Actions.Get(copiedQualifiedName.GetEntityName(), FETCH_CODE); err != nil {
return nil, actionGetError(copiedQualifiedName.GetEntityName(), FETCH_CODE, err)
}
Client.Namespace = qualifiedName.GetNamespace()
action.Exec = existingAction.Exec
action.Parameters = append(action.Parameters, existingAction.Parameters...)
action.Annotations = append(action.Annotations, existingAction.Annotations...)
} else if Flags.action.sequence {
if len(args) == 2 {
action.Exec = new(whisk.Exec)
action.Exec.Kind = SEQUENCE
action.Exec.Components = csvToQualifiedActions(args[1])
} else {
return nil, noArtifactError()
}
} else if len(args) > 1 || len(Flags.action.docker) > 0 {
action.Exec, err = getExec(args, Flags.action)
if err != nil {
return nil, err
}
} else if !update {
return nil, noArtifactError()
}
if update {
action.DelAnnotations = Flags.action.delAnnotation
}
whisk.Debug(whisk.DbgInfo, "Parsed action struct: %#v\n", action)
return action, err
}