Skip to content

Commit

Permalink
add --env flag to pass env vars
Browse files Browse the repository at this point in the history
  • Loading branch information
giusdp committed Apr 22, 2023
1 parent b1ca4bc commit 0598584
Show file tree
Hide file tree
Showing 8 changed files with 192 additions and 128 deletions.
37 changes: 33 additions & 4 deletions commands/action.go
Original file line number Diff line number Diff line change
Expand Up @@ -401,8 +401,10 @@ func parseAction(cmd *cobra.Command, args []string, update bool) (*whisk.Action,
var existingAction *whisk.Action
var paramArgs []string
var annotArgs []string
var envArgs []string
var parameters interface{}
var annotations interface{}
var environment interface{}

var qualifiedName = new(QualifiedName)

Expand All @@ -426,6 +428,7 @@ func parseAction(cmd *cobra.Command, args []string, update bool) (*whisk.Action,

paramArgs = Flags.common.param
annotArgs = Flags.common.annotation
envArgs = Flags.common.env

if len(paramArgs) > 0 {
if parameters, err = getJSONFromStrings(paramArgs, true); err != nil {
Expand All @@ -443,6 +446,14 @@ func parseAction(cmd *cobra.Command, args []string, update bool) (*whisk.Action,
action.Annotations = annotations.(whisk.KeyValueArr)
}

if len(envArgs) > 0 {
if environment, err = getJSONFromStrings(envArgs, true); err != nil {
return nil, getJSONFromStringsEnvError(envArgs, true, err)
}

action.Env = environment.(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)
Expand All @@ -465,6 +476,7 @@ func parseAction(cmd *cobra.Command, args []string, update bool) (*whisk.Action,
action.Exec = existingAction.Exec
action.Parameters = append(action.Parameters, existingAction.Parameters...)
action.Annotations = append(action.Annotations, existingAction.Annotations...)
action.Env = append(action.Env, existingAction.Env...)
} else if Flags.action.sequence {
if len(args) == 2 {
action.Exec = new(whisk.Exec)
Expand Down Expand Up @@ -895,11 +907,11 @@ func updateWebSecureAnnotation(websecure string, annotations whisk.KeyValueArr)
return annotations
}

//
// Generate a secret according to the --web-secure setting
// true: return a random int64
// false: return false, meaning no secret was returned
// string: return the same string
//
// true: return a random int64
// false: return false, meaning no secret was returned
// string: return the same string
func webSecureSecret(webSecureMode string) interface{} {
switch strings.ToLower(webSecureMode) {
case "true":
Expand Down Expand Up @@ -1005,6 +1017,19 @@ func getJSONFromStringsAnnotError(annots []string, keyValueFormat bool, err erro
return nestedError(errMsg, err)
}

func getJSONFromStringsEnvError(envs []string, keyValueFormat bool, err error) error {
whisk.Debug(whisk.DbgError, "getJSONFromStrings(%#v, %t) failed: %s\n", envs, keyValueFormat, err)

errMsg := wski18n.T(
"Invalid annotation argument '{{.annotation}}': {{.err}}",
map[string]interface{}{
"env": fmt.Sprintf("%#v", envs),
"err": err,
})

return nestedError(errMsg, err)
}

func invalidFieldFilterError(field string) error {
errMsg := wski18n.T(
"Invalid field filter '{{.arg}}'.",
Expand Down Expand Up @@ -1304,6 +1329,8 @@ func init() {
actionCreateCmd.Flags().StringVarP(&Flags.common.paramFile, "param-file", "P", "", wski18n.T("`FILE` containing parameter values in JSON format"))
actionCreateCmd.Flags().StringVar(&Flags.action.web, WEB_FLAG, "", wski18n.T("treat ACTION as a web action, a raw HTTP web action, or as a standard action; yes | true = web action, raw = raw HTTP web action, no | false = standard action"))
actionCreateCmd.Flags().StringVar(&Flags.action.websecure, WEB_SECURE_FLAG, "", wski18n.T("secure the web action. where `SECRET` is true, false, or any string. Only valid when the ACTION is a web action"))
actionCreateCmd.Flags().StringSliceVarP(&Flags.common.env, "env", "e", nil, wski18n.T("environment variables in `KEY VALUE` format"))
actionCreateCmd.Flags().StringVarP(&Flags.common.envFile, "env-file", "E", "", wski18n.T("`FILE` containing environment variables in JSON format"))

actionUpdateCmd.Flags().BoolVar(&Flags.action.native, "native", false, wski18n.T("treat ACTION as native action (zip file provides a compatible executable to run)"))
actionUpdateCmd.Flags().StringVar(&Flags.action.docker, "docker", "", wski18n.T("use provided docker image (a path on DockerHub) to run the action"))
Expand All @@ -1322,6 +1349,8 @@ func init() {
actionUpdateCmd.Flags().StringVar(&Flags.action.web, WEB_FLAG, "", wski18n.T("treat ACTION as a web action, a raw HTTP web action, or as a standard action; yes | true = web action, raw = raw HTTP web action, no | false = standard action"))
actionUpdateCmd.Flags().StringVar(&Flags.action.websecure, WEB_SECURE_FLAG, "", wski18n.T("secure the web action. where `SECRET` is true, false, or any string. Only valid when the ACTION is a web action"))
actionUpdateCmd.Flags().StringArrayVar(&Flags.action.delAnnotation, "del-annotation", []string{}, wski18n.T("the list of annotations to be deleted from the action, e.g. --del-annotation key1 --del-annotation key2"))
actionUpdateCmd.Flags().StringSliceVarP(&Flags.common.env, "env", "e", nil, wski18n.T("environment variables in `KEY VALUE` format"))
actionUpdateCmd.Flags().StringVarP(&Flags.common.envFile, "env-file", "E", "", wski18n.T("`FILE` containing environment variables in JSON format"))

actionInvokeCmd.Flags().StringSliceVarP(&Flags.common.param, "param", "p", []string{}, wski18n.T("parameter values in `KEY VALUE` format"))
actionInvokeCmd.Flags().StringVarP(&Flags.common.paramFile, "param-file", "P", "", wski18n.T("`FILE` containing parameter values in JSON format"))
Expand Down
51 changes: 40 additions & 11 deletions commands/commands.go
Original file line number Diff line number Diff line change
Expand Up @@ -131,9 +131,10 @@ func getValueFromArgs(args []string, argIndex int, parsedArgs []string) ([]strin
return parsedArgs, args, whiskErr
}

func parseArgs(args []string) ([]string, []string, []string, []string, []string, error) {
func parseArgs(args []string) ([]string, []string, []string, []string, []string, []string, error) {
var paramArgs []string
var annotArgs []string
var envArgs []string
var feedParamArgs []string
var triggerParamArgs []string
var whiskErr error
Expand All @@ -149,14 +150,14 @@ func parseArgs(args []string) ([]string, []string, []string, []string, []string,
map[string]interface{}{"err": whiskErr})
whiskErr = whisk.MakeWskError(errors.New(errMsg), whisk.EXIT_CODE_ERR_GENERAL, whisk.DISPLAY_MSG,
whisk.DISPLAY_USAGE)
return nil, nil, nil, nil, nil, whiskErr
return nil, nil, nil, nil, nil, nil, whiskErr
}

filename := paramArgs[len(paramArgs)-1]
paramArgs[len(paramArgs)-1], whiskErr = ReadFile(filename)
if whiskErr != nil {
whisk.Debug(whisk.DbgError, "readFile(%s) error: %s\n", filename, whiskErr)
return nil, nil, nil, nil, nil, whiskErr
return nil, nil, nil, nil, nil, nil, whiskErr
}
} else if args[i] == "-A" || args[i] == "--annotation-file" {
annotArgs, args, whiskErr = getValueFromArgs(args, i, annotArgs)
Expand All @@ -166,14 +167,14 @@ func parseArgs(args []string) ([]string, []string, []string, []string, []string,
map[string]interface{}{"err": whiskErr})
whiskErr = whisk.MakeWskError(errors.New(errMsg), whisk.EXIT_CODE_ERR_GENERAL, whisk.DISPLAY_MSG,
whisk.DISPLAY_USAGE)
return nil, nil, nil, nil, nil, whiskErr
return nil, nil, nil, nil, nil, nil, whiskErr
}

filename := annotArgs[len(annotArgs)-1]
annotArgs[len(annotArgs)-1], whiskErr = ReadFile(filename)
if whiskErr != nil {
whisk.Debug(whisk.DbgError, "readFile(%s) error: %s\n", filename, whiskErr)
return nil, nil, nil, nil, nil, whiskErr
return nil, nil, nil, nil, nil, nil, whiskErr
}
} else if args[i] == "-p" || args[i] == "--param" {
paramArgs, args, whiskErr = getKeyValueArgs(args, i, paramArgs)
Expand All @@ -183,7 +184,7 @@ func parseArgs(args []string) ([]string, []string, []string, []string, []string,
map[string]interface{}{"err": whiskErr})
whiskErr = whisk.MakeWskError(errors.New(errMsg), whisk.EXIT_CODE_ERR_GENERAL, whisk.DISPLAY_MSG,
whisk.DISPLAY_USAGE)
return nil, nil, nil, nil, nil, whiskErr
return nil, nil, nil, nil, nil, nil, whiskErr
}
} else if args[i] == "-a" || args[i] == "--annotation" {
annotArgs, args, whiskErr = getKeyValueArgs(args, i, annotArgs)
Expand All @@ -193,23 +194,50 @@ func parseArgs(args []string) ([]string, []string, []string, []string, []string,
map[string]interface{}{"err": whiskErr})
whiskErr = whisk.MakeWskError(errors.New(errMsg), whisk.EXIT_CODE_ERR_GENERAL, whisk.DISPLAY_MSG,
whisk.DISPLAY_USAGE)
return nil, nil, nil, nil, nil, whiskErr
return nil, nil, nil, nil, nil, nil, whiskErr
}
} else if args[i] == "-F" || args[i] == "--feed-param" {
feedParamArgs, args, whiskErr = getKeyValueArgs(args, i, feedParamArgs)
if whiskErr != nil {
whisk.Debug(whisk.DbgError, "getKeyValueArgs(%#v, %d) failed: %s\n", args, i, whiskErr)
whiskErr = whisk.MakeWskError(whiskErr, whisk.EXIT_CODE_ERR_GENERAL, whisk.DISPLAY_MSG,
whisk.DISPLAY_USAGE)
return nil, nil, nil, nil, nil, whiskErr
return nil, nil, nil, nil, nil, nil, whiskErr
}
} else if args[i] == "-T" || args[i] == "--trigger-param" {
triggerParamArgs, args, whiskErr = getKeyValueArgs(args, i, triggerParamArgs)
if whiskErr != nil {
whisk.Debug(whisk.DbgError, "getKeyValueArgs(%#v, %d) failed: %s\n", args, i, whiskErr)
whiskErr = whisk.MakeWskError(whiskErr, whisk.EXIT_CODE_ERR_GENERAL, whisk.DISPLAY_MSG,
whisk.DISPLAY_USAGE)
return nil, nil, nil, nil, nil, whiskErr
return nil, nil, nil, nil, nil, nil, whiskErr
}
} else if args[i] == "-E" || args[i] == "--env-file" {
envArgs, args, whiskErr = getValueFromArgs(args, i, envArgs)
if whiskErr != nil {
whisk.Debug(whisk.DbgError, "getValueFromArgs(%#v, %d) failed: %s\n", args, i, whiskErr)
errMsg := wski18n.T("The environment variable arguments are invalid: {{.err}}",
map[string]interface{}{"err": whiskErr})
whiskErr = whisk.MakeWskError(errors.New(errMsg), whisk.EXIT_CODE_ERR_GENERAL, whisk.DISPLAY_MSG,
whisk.DISPLAY_USAGE)
return nil, nil, nil, nil, nil, nil, whiskErr
}

filename := envArgs[len(envArgs)-1]
envArgs[len(envArgs)-1], whiskErr = ReadFile(filename)
if whiskErr != nil {
whisk.Debug(whisk.DbgError, "readFile(%s) error: %s\n", filename, whiskErr)
return nil, nil, nil, nil, nil, nil, whiskErr
}
} else if args[i] == "-e" || args[i] == "--env" {
envArgs, args, whiskErr = getKeyValueArgs(args, i, envArgs)
if whiskErr != nil {
whisk.Debug(whisk.DbgError, "getKeyValueArgs(%#v, %d) failed: %s\n", args, i, whiskErr)
errMsg := wski18n.T("The environment variable arguments are invalid: {{.err}}",
map[string]interface{}{"err": whiskErr})
whiskErr = whisk.MakeWskError(errors.New(errMsg), whisk.EXIT_CODE_ERR_GENERAL, whisk.DISPLAY_MSG,
whisk.DISPLAY_USAGE)
return nil, nil, nil, nil, nil, nil, whiskErr
}
} else {
i++
Expand All @@ -221,15 +249,16 @@ func parseArgs(args []string) ([]string, []string, []string, []string, []string,
whisk.Debug(whisk.DbgInfo, "Found feed param args '%s'.\n", feedParamArgs)
whisk.Debug(whisk.DbgInfo, "Found trigger param args '%s'.\n", triggerParamArgs)
whisk.Debug(whisk.DbgInfo, "Arguments with param args removed '%s'.\n", args)
whisk.Debug(whisk.DbgInfo, "Found env args '%s'.\n", envArgs)

return args, paramArgs, annotArgs, feedParamArgs, triggerParamArgs, nil
return args, paramArgs, annotArgs, feedParamArgs, triggerParamArgs, envArgs, nil
}

func Execute() error {
var err error

whisk.Debug(whisk.DbgInfo, "wsk args: %#v\n", os.Args)
os.Args, Flags.common.param, Flags.common.annotation, Flags.trigger.feedParam, Flags.trigger.triggerParam, err = parseArgs(os.Args)
os.Args, Flags.common.param, Flags.common.annotation, Flags.trigger.feedParam, Flags.trigger.triggerParam, Flags.common.env, err = parseArgs(os.Args)

if err != nil {
whisk.Debug(whisk.DbgError, "parseParams(%s) failed: %s\n", os.Args, err)
Expand Down
2 changes: 2 additions & 0 deletions commands/flags.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,8 @@ type FlagsStruct struct {
format string
nameSort bool // sorts list alphabetically by entity name
overwrite bool
env []string
envFile string
}

property struct {
Expand Down
9 changes: 1 addition & 8 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -3,25 +3,18 @@ module github.com/apache/openwhisk-cli
go 1.15

require (
github.com/apache/openwhisk-client-go v0.0.0-20220811044404-a6921af2f086
github.com/apache/openwhisk-client-go v0.0.0-20230421081559-13fc65f65684
github.com/apache/openwhisk-wskdeploy v0.0.0-20220815044620-520cbbbffb6e
github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6 // indirect
github.com/cloudfoundry/jibber_jabber v0.0.0-20151120183258-bcc4c8345a21
github.com/fatih/color v1.10.0
github.com/ghodss/yaml v1.0.1-0.20190212211648-25d852aebe32
github.com/google/go-querystring v1.1.0 // indirect
github.com/jteeuwen/go-bindata v3.0.7+incompatible // indirect
github.com/mattn/go-colorable v0.1.8
github.com/mitchellh/go-homedir v1.1.0
github.com/nicksnyder/go-i18n v1.10.1
github.com/onsi/ginkgo v1.15.0
github.com/onsi/gomega v1.10.5
github.com/pelletier/go-buffruneio v0.1.0 // indirect
github.com/spf13/cobra v1.1.3
github.com/spf13/pflag v1.0.5 // indirect
github.com/stretchr/testify v1.6.1
github.com/ugorji/go v1.1.4 // indirect
github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77 // indirect
golang.org/x/sys v0.0.0-20210324051608-47abb6519492 // indirect
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
)
Loading

0 comments on commit 0598584

Please sign in to comment.