mirror of https://github.com/knative/func.git
Add shell completion for bash and zsh
This commit is contained in:
parent
a0e9fcb11c
commit
acbaf48c0b
|
@ -0,0 +1,174 @@
|
||||||
|
package cmd
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"github.com/spf13/cobra"
|
||||||
|
"os"
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
root.AddCommand(completionCmd)
|
||||||
|
}
|
||||||
|
|
||||||
|
// completionCmd represents the completion command
|
||||||
|
var completionCmd = &cobra.Command{
|
||||||
|
Use: "completion",
|
||||||
|
Short: "Generates bash completion scripts",
|
||||||
|
Long: `To load completion run
|
||||||
|
|
||||||
|
source <(faas completion zsh)
|
||||||
|
|
||||||
|
`,
|
||||||
|
ValidArgs: []string{"bash", "zsh"},
|
||||||
|
Args: cobra.ExactArgs(1),
|
||||||
|
RunE: func(cmd *cobra.Command, args []string) (err error) {
|
||||||
|
if len(args) < 1 {
|
||||||
|
return errors.New("missing argument")
|
||||||
|
}
|
||||||
|
if args[0] == "bash" {
|
||||||
|
root.GenBashCompletion(os.Stdout)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
if args[0] == "zsh" {
|
||||||
|
// manually edited script based on `root.GenBashCompletion(os.Stdout)`
|
||||||
|
// unfortunately it doesn't support completion so well as for bash
|
||||||
|
// some manual edits had to be done
|
||||||
|
os.Stdout.WriteString(`
|
||||||
|
|
||||||
|
#compdef _faas faas
|
||||||
|
|
||||||
|
|
||||||
|
function _faas {
|
||||||
|
local -a commands
|
||||||
|
|
||||||
|
_arguments -C \
|
||||||
|
'--config[config file path]:' \
|
||||||
|
'(-v --verbose)'{-v,--verbose}'[print verbose logs]' \
|
||||||
|
"1: :->cmnds" \
|
||||||
|
"*::arg:->args"
|
||||||
|
|
||||||
|
case $state in
|
||||||
|
cmnds)
|
||||||
|
commands=(
|
||||||
|
"completion:Generates bash completion scripts"
|
||||||
|
"create:Create a Service Function"
|
||||||
|
"delete:Delete deployed Service Function"
|
||||||
|
"describe:Describe Service Function"
|
||||||
|
"help:Help about any command"
|
||||||
|
"list:Lists deployed Service Functions"
|
||||||
|
"run:Run Service Function locally"
|
||||||
|
"update:Update or create a deployed Service Function"
|
||||||
|
"version:Print version"
|
||||||
|
)
|
||||||
|
_describe "command" commands
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
case "$words[1]" in
|
||||||
|
completion)
|
||||||
|
_faas_completion
|
||||||
|
;;
|
||||||
|
create)
|
||||||
|
_faas_create
|
||||||
|
;;
|
||||||
|
delete)
|
||||||
|
_faas_delete
|
||||||
|
;;
|
||||||
|
describe)
|
||||||
|
_faas_describe
|
||||||
|
;;
|
||||||
|
help)
|
||||||
|
_faas_help
|
||||||
|
;;
|
||||||
|
list)
|
||||||
|
_faas_list
|
||||||
|
;;
|
||||||
|
run)
|
||||||
|
_faas_run
|
||||||
|
;;
|
||||||
|
update)
|
||||||
|
_faas_update
|
||||||
|
;;
|
||||||
|
version)
|
||||||
|
_faas_version
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
function _list_funs() {
|
||||||
|
compadd $(faas list 2> /dev/null)
|
||||||
|
}
|
||||||
|
|
||||||
|
function _list_langs() {
|
||||||
|
compadd js go java
|
||||||
|
}
|
||||||
|
|
||||||
|
function _list_fmts() {
|
||||||
|
compadd yaml xml json
|
||||||
|
}
|
||||||
|
|
||||||
|
function _faas_create {
|
||||||
|
_arguments \
|
||||||
|
'1:string:_list_langs' \
|
||||||
|
'(-i --internal)'{-i,--internal}'[Create a cluster-local service without a publicly accessible route. $FAAS_INTERNAL]' \
|
||||||
|
'(-l --local)'{-l,--local}'[create the service function locally only.]' \
|
||||||
|
'(-n --name)'{-n,--name}'[optionally specify an explicit name for the serive, overriding path-derivation. $FAAS_NAME]:' \
|
||||||
|
'(-s --namespace)'{-s,--namespace}'[namespace at image registry (usually username or org name). $FAAS_NAMESPACE]:' \
|
||||||
|
'(-r --registry)'{-r,--registry}'[image registry (ex: quay.io). $FAAS_REGISTRY]:' \
|
||||||
|
'--config[config file path]:' \
|
||||||
|
'(-v --verbose)'{-v,--verbose}'[print verbose logs]'
|
||||||
|
}
|
||||||
|
|
||||||
|
function _faas_delete {
|
||||||
|
_arguments \
|
||||||
|
'(-n --name)'{-n,--name}'[optionally specify an explicit name to remove, overriding path-derivation. $FAAS_NAME]:string:_list_funs' \
|
||||||
|
'--config[config file path]:' \
|
||||||
|
'(-v --verbose)'{-v,--verbose}'[print verbose logs]'
|
||||||
|
}
|
||||||
|
|
||||||
|
function _faas_describe {
|
||||||
|
_arguments \
|
||||||
|
'1:string:_list_funs' \
|
||||||
|
'(-n --name)'{-n,--name}'[optionally specify an explicit name for the serive, overriding path-derivation. $FAAS_NAME]:string:_list_funs' \
|
||||||
|
'(-o --output)'{-o,--output}'[optionally specify output format (yaml,xml,json).]:string:_list_fmts' \
|
||||||
|
'--config[config file path]:' \
|
||||||
|
'(-v --verbose)'{-v,--verbose}'[print verbose logs]'
|
||||||
|
}
|
||||||
|
|
||||||
|
function _faas_help {
|
||||||
|
_arguments \
|
||||||
|
'--config[config file path]:' \
|
||||||
|
'(-v --verbose)'{-v,--verbose}'[print verbose logs]'
|
||||||
|
}
|
||||||
|
|
||||||
|
function _faas_list {
|
||||||
|
_arguments \
|
||||||
|
'--config[config file path]:' \
|
||||||
|
'(-v --verbose)'{-v,--verbose}'[print verbose logs]'
|
||||||
|
}
|
||||||
|
|
||||||
|
function _faas_run {
|
||||||
|
_arguments \
|
||||||
|
'--config[config file path]:' \
|
||||||
|
'(-v --verbose)'{-v,--verbose}'[print verbose logs]'
|
||||||
|
}
|
||||||
|
|
||||||
|
function _faas_update {
|
||||||
|
_arguments \
|
||||||
|
'--config[config file path]:' \
|
||||||
|
'(-v --verbose)'{-v,--verbose}'[print verbose logs]'
|
||||||
|
}
|
||||||
|
|
||||||
|
function _faas_version {
|
||||||
|
_arguments \
|
||||||
|
'--config[config file path]:' \
|
||||||
|
'(-v --verbose)'{-v,--verbose}'[print verbose logs]'
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
`)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return errors.New("unknown shell, only bash and zsh are supported")
|
||||||
|
},
|
||||||
|
}
|
|
@ -31,6 +31,8 @@ var createCmd = &cobra.Command{
|
||||||
Use: "create <language>",
|
Use: "create <language>",
|
||||||
Short: "Create a Service Function",
|
Short: "Create a Service Function",
|
||||||
SuggestFor: []string{"init", "new"},
|
SuggestFor: []string{"init", "new"},
|
||||||
|
ValidArgs: []string {"java", "go", "js"},
|
||||||
|
Args: cobra.ExactArgs(1),
|
||||||
RunE: create,
|
RunE: create,
|
||||||
PreRun: func(cmd *cobra.Command, args []string) {
|
PreRun: func(cmd *cobra.Command, args []string) {
|
||||||
viper.BindPFlag("local", cmd.Flags().Lookup("local"))
|
viper.BindPFlag("local", cmd.Flags().Lookup("local"))
|
||||||
|
|
|
@ -2,6 +2,7 @@ package cmd
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/boson-project/faas"
|
"github.com/boson-project/faas"
|
||||||
|
"github.com/boson-project/faas/knative"
|
||||||
"github.com/boson-project/faas/kubectl"
|
"github.com/boson-project/faas/kubectl"
|
||||||
"github.com/ory/viper"
|
"github.com/ory/viper"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
@ -10,6 +11,21 @@ import (
|
||||||
func init() {
|
func init() {
|
||||||
root.AddCommand(deleteCmd)
|
root.AddCommand(deleteCmd)
|
||||||
deleteCmd.Flags().StringP("name", "n", "", "optionally specify an explicit name to remove, overriding path-derivation. $FAAS_NAME")
|
deleteCmd.Flags().StringP("name", "n", "", "optionally specify an explicit name to remove, overriding path-derivation. $FAAS_NAME")
|
||||||
|
deleteCmd.RegisterFlagCompletionFunc("name", func(cmd *cobra.Command, args []string, toComplete string) (strings []string, directive cobra.ShellCompDirective) {
|
||||||
|
lister, err := knative.NewLister(faas.DefaultNamespace)
|
||||||
|
if err != nil {
|
||||||
|
directive = cobra.ShellCompDirectiveError
|
||||||
|
return
|
||||||
|
}
|
||||||
|
s, err := lister.List()
|
||||||
|
if err != nil {
|
||||||
|
directive = cobra.ShellCompDirectiveError
|
||||||
|
return
|
||||||
|
}
|
||||||
|
strings = s
|
||||||
|
directive = cobra.ShellCompDirectiveDefault
|
||||||
|
return
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
var deleteCmd = &cobra.Command{
|
var deleteCmd = &cobra.Command{
|
||||||
|
|
|
@ -20,6 +20,28 @@ func init() {
|
||||||
describeCmd.Flags().StringP("output", "o", "yaml", "optionally specify output format (yaml,xml,json).")
|
describeCmd.Flags().StringP("output", "o", "yaml", "optionally specify output format (yaml,xml,json).")
|
||||||
|
|
||||||
describeCmd.Flags().StringP("name", "n", "", "optionally specify an explicit name for the serive, overriding path-derivation. $FAAS_NAME")
|
describeCmd.Flags().StringP("name", "n", "", "optionally specify an explicit name for the serive, overriding path-derivation. $FAAS_NAME")
|
||||||
|
|
||||||
|
describeCmd.RegisterFlagCompletionFunc("name", func(cmd *cobra.Command, args []string, toComplete string) (strings []string, directive cobra.ShellCompDirective) {
|
||||||
|
lister, err := knative.NewLister(faas.DefaultNamespace)
|
||||||
|
if err != nil {
|
||||||
|
directive = cobra.ShellCompDirectiveError
|
||||||
|
return
|
||||||
|
}
|
||||||
|
s, err := lister.List()
|
||||||
|
if err != nil {
|
||||||
|
directive = cobra.ShellCompDirectiveError
|
||||||
|
return
|
||||||
|
}
|
||||||
|
strings = s
|
||||||
|
directive = cobra.ShellCompDirectiveDefault
|
||||||
|
return
|
||||||
|
})
|
||||||
|
|
||||||
|
describeCmd.RegisterFlagCompletionFunc("output", func(cmd *cobra.Command, args []string, toComplete string) (strings []string, directive cobra.ShellCompDirective) {
|
||||||
|
directive = cobra.ShellCompDirectiveDefault
|
||||||
|
strings = []string{"yaml", "xml", "json"}
|
||||||
|
return
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
var describeCmd = &cobra.Command{
|
var describeCmd = &cobra.Command{
|
||||||
|
@ -27,6 +49,22 @@ var describeCmd = &cobra.Command{
|
||||||
Short: "Describe Service Function",
|
Short: "Describe Service Function",
|
||||||
Long: `Describe Service Function`,
|
Long: `Describe Service Function`,
|
||||||
SuggestFor: []string{"desc"},
|
SuggestFor: []string{"desc"},
|
||||||
|
ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) (strings []string, directive cobra.ShellCompDirective) {
|
||||||
|
lister, err := knative.NewLister(faas.DefaultNamespace)
|
||||||
|
if err != nil {
|
||||||
|
directive = cobra.ShellCompDirectiveError
|
||||||
|
return
|
||||||
|
}
|
||||||
|
s, err := lister.List()
|
||||||
|
if err != nil {
|
||||||
|
directive = cobra.ShellCompDirectiveError
|
||||||
|
return
|
||||||
|
}
|
||||||
|
strings = s
|
||||||
|
directive = cobra.ShellCompDirectiveDefault
|
||||||
|
return
|
||||||
|
},
|
||||||
|
Args: cobra.ExactArgs(1),
|
||||||
RunE: describe,
|
RunE: describe,
|
||||||
PreRun: func(cmd *cobra.Command, args []string) {
|
PreRun: func(cmd *cobra.Command, args []string) {
|
||||||
viper.BindPFlag("output", cmd.Flags().Lookup("output"))
|
viper.BindPFlag("output", cmd.Flags().Lookup("output"))
|
||||||
|
|
Loading…
Reference in New Issue