mirror of https://github.com/knative/func.git
161 lines
3.7 KiB
Go
161 lines
3.7 KiB
Go
package cmd
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"os"
|
|
"os/user"
|
|
"path"
|
|
"strings"
|
|
|
|
"github.com/spf13/cobra"
|
|
|
|
fn "knative.dev/func/pkg/functions"
|
|
"knative.dev/func/pkg/knative"
|
|
)
|
|
|
|
func CompleteFunctionList(cmd *cobra.Command, args []string, toComplete string) (strings []string, directive cobra.ShellCompDirective) {
|
|
lister := knative.NewLister(false)
|
|
|
|
list, err := lister.List(cmd.Context(), "")
|
|
if err != nil {
|
|
directive = cobra.ShellCompDirectiveError
|
|
return
|
|
}
|
|
|
|
for _, item := range list {
|
|
strings = append(strings, item.Name)
|
|
}
|
|
directive = cobra.ShellCompDirectiveDefault
|
|
return
|
|
}
|
|
|
|
func CompleteRuntimeList(cmd *cobra.Command, args []string, toComplete string, client *fn.Client) (matches []string, directive cobra.ShellCompDirective) {
|
|
runtimes, err := client.Runtimes()
|
|
if err != nil {
|
|
fmt.Fprintf(os.Stderr, "error listing runtimes for flag completion: %v", err)
|
|
return
|
|
}
|
|
for _, runtime := range runtimes {
|
|
if strings.HasPrefix(runtime, toComplete) {
|
|
matches = append(matches, runtime)
|
|
}
|
|
}
|
|
return
|
|
}
|
|
|
|
func CompleteTemplateList(cmd *cobra.Command, args []string, toComplete string, client *fn.Client) (matches []string, directive cobra.ShellCompDirective) {
|
|
directive = cobra.ShellCompDirectiveError
|
|
|
|
lang, err := cmd.Flags().GetString("language")
|
|
if err != nil {
|
|
fmt.Fprintf(os.Stderr, "cannot list templates: %v", err)
|
|
return
|
|
}
|
|
if lang == "" {
|
|
fmt.Fprintln(os.Stderr, "cannot list templates: language not specified")
|
|
return
|
|
}
|
|
|
|
templates, err := client.Templates().List(lang)
|
|
if err != nil {
|
|
fmt.Fprintf(os.Stderr, "cannot list templates: %v", err)
|
|
return
|
|
}
|
|
|
|
directive = cobra.ShellCompDirectiveDefault
|
|
for _, t := range templates {
|
|
if strings.HasPrefix(t, toComplete) {
|
|
matches = append(matches, t)
|
|
}
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func CompleteOutputFormatList(cmd *cobra.Command, args []string, toComplete string) (strings []string, directive cobra.ShellCompDirective) {
|
|
directive = cobra.ShellCompDirectiveDefault
|
|
strings = []string{"plain", "yaml", "xml", "json"}
|
|
return
|
|
}
|
|
|
|
func CompleteRegistryList(cmd *cobra.Command, args []string, toComplete string) (strings []string, directive cobra.ShellCompDirective) {
|
|
directive = cobra.ShellCompDirectiveError
|
|
u, err := user.Current()
|
|
if err != nil {
|
|
return
|
|
}
|
|
file, err := os.Open(path.Join(u.HomeDir, ".docker", "config.json"))
|
|
if err != nil {
|
|
return
|
|
}
|
|
decoder := json.NewDecoder(file)
|
|
var data map[string]interface{}
|
|
err = decoder.Decode(&data)
|
|
if err != nil {
|
|
return
|
|
}
|
|
auth, ok := data["auths"].(map[string]interface{})
|
|
if !ok {
|
|
return
|
|
}
|
|
strings = make([]string, len(auth))
|
|
for reg := range auth {
|
|
strings = append(strings, reg)
|
|
}
|
|
directive = cobra.ShellCompDirectiveDefault
|
|
return
|
|
}
|
|
|
|
func CompleteBuilderImageList(cmd *cobra.Command, args []string, complete string) (builderImages []string, directive cobra.ShellCompDirective) {
|
|
directive = cobra.ShellCompDirectiveError
|
|
|
|
var (
|
|
err error
|
|
path string
|
|
f fn.Function
|
|
)
|
|
|
|
path, err = cmd.Flags().GetString("path")
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
f, err = fn.NewFunction(path)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
builderImages = make([]string, 0, len(f.Build.BuilderImages))
|
|
for name := range f.Build.BuilderImages {
|
|
if len(complete) == 0 {
|
|
builderImages = append(builderImages, name)
|
|
continue
|
|
}
|
|
if strings.HasPrefix(name, complete) {
|
|
builderImages = append(builderImages, name)
|
|
}
|
|
}
|
|
|
|
directive = cobra.ShellCompDirectiveNoFileComp
|
|
return
|
|
}
|
|
|
|
func CompleteBuilderList(cmd *cobra.Command, args []string, complete string) (matches []string, d cobra.ShellCompDirective) {
|
|
d = cobra.ShellCompDirectiveNoFileComp
|
|
matches = []string{}
|
|
|
|
if len(complete) == 0 {
|
|
matches = KnownBuilders()
|
|
return
|
|
}
|
|
|
|
for _, b := range KnownBuilders() {
|
|
if strings.HasPrefix(b, complete) {
|
|
matches = append(matches, b)
|
|
}
|
|
}
|
|
|
|
return
|
|
}
|