You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by nf...@apache.org on 2018/09/18 11:25:38 UTC
[camel-k] branch master updated: chore(cobra): add autocompletion
for configmap and secrets
This is an automated email from the ASF dual-hosted git repository.
nferraro pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-k.git
The following commit(s) were added to refs/heads/master by this push:
new cced8e2 chore(cobra): add autocompletion for configmap and secrets
cced8e2 is described below
commit cced8e2d94edb21a6c833149cdb00dab2bea0383
Author: lburgazzoli <lb...@gmail.com>
AuthorDate: Tue Sep 18 13:06:03 2018 +0200
chore(cobra): add autocompletion for configmap and secrets
---
pkg/client/cmd/completion.go | 48 ++-------
pkg/client/cmd/completion_bash.go | 107 +++++++++++++++++++++
.../cmd/{completion.go => completion_zsh.go} | 43 +++------
pkg/client/cmd/context_create.go | 3 +
pkg/client/cmd/root.go | 17 +++-
pkg/client/cmd/run.go | 3 +
6 files changed, 149 insertions(+), 72 deletions(-)
diff --git a/pkg/client/cmd/completion.go b/pkg/client/cmd/completion.go
index e172df0..e26444d 100644
--- a/pkg/client/cmd/completion.go
+++ b/pkg/client/cmd/completion.go
@@ -18,54 +18,22 @@ limitations under the License.
package cmd
import (
- "os"
-
"github.com/spf13/cobra"
)
-const bashCompletionCmdLongDescription = `
-To load completion run
-
-. <(kamel completion)
-
-To configure your bash shell to load completions for each session add to your bashrc
-
-# ~/.bashrc or ~/.profile
-. <(kamel completion)
-`
-
-const zshCompletionCmdLongDescription = `
-To configure your zsh shell to load completions for each session add to your zshrc
-
-if [ $commands[kamel] ]; then
- source <(kamel completion zsh)
-fi
-`
-
-// NewCmdCompletion --
-func NewCmdCompletion(root *cobra.Command) *cobra.Command {
+func newCmdCompletion(root *cobra.Command) *cobra.Command {
completion := cobra.Command{
Use: "completion",
Short: "Generates completion scripts",
}
- completion.AddCommand(&cobra.Command{
- Use: "bash",
- Short: "Generates bash completion scripts",
- Long: bashCompletionCmdLongDescription,
- Run: func(cmd *cobra.Command, args []string) {
- root.GenBashCompletion(os.Stdout)
- },
- })
-
- completion.AddCommand(&cobra.Command{
- Use: "zsh",
- Short: "Generates zsh completion scripts",
- Long: zshCompletionCmdLongDescription,
- Run: func(cmd *cobra.Command, args []string) {
- root.GenZshCompletion(os.Stdout)
- },
- })
+ completion.AddCommand(newCmdCompletionBash(root))
+ completion.AddCommand(newCmdCompletionZsh(root))
return &completion
}
+
+func configureKnownCompletions(command *cobra.Command) {
+ configureKnownBashCompletions(command)
+ configureKnownZshCompletions(command)
+}
diff --git a/pkg/client/cmd/completion_bash.go b/pkg/client/cmd/completion_bash.go
new file mode 100644
index 0000000..34aad56
--- /dev/null
+++ b/pkg/client/cmd/completion_bash.go
@@ -0,0 +1,107 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package cmd
+
+import (
+ "os"
+
+ "github.com/spf13/cobra"
+)
+
+// ******************************
+//
+//
+//
+// ******************************
+
+const bashCompletionCmdLongDescription = `
+To load completion run
+
+. <(kamel completion bash)
+
+To configure your bash shell to load completions for each session add to your bashrc
+
+# ~/.bashrc or ~/.profile
+. <(kamel completion bash)
+`
+
+const bashCompletionFunction = `
+__kamel_dependency_type() {
+ COMPREPLY=( $( compgen -W "camel: mvn: file:" -- "$cur") )
+ compopt -o nospace
+}
+
+__kamel_kubectl_get_configmap() {
+ local template
+ local kubectl_out
+
+ template="{{ range .items }}{{ .metadata.name }} {{ end }}"
+
+ if kubectl_out=$(kubectl get -o template --template="${template}" configmap 2>/dev/null); then
+ COMPREPLY=( $( compgen -W "${kubectl_out}" -- "$cur" ) )
+ fi
+}
+
+__kamel_kubectl_get_secret() {
+ local template
+ local kubectl_out
+
+ template="{{ range .items }}{{ .metadata.name }} {{ end }}"
+
+ if kubectl_out=$(kubectl get -o template --template="${template}" secret 2>/dev/null); then
+ COMPREPLY=( $( compgen -W "${kubectl_out}" -- "$cur" ) )
+ fi
+}
+`
+
+// ******************************
+//
+// COMMAND
+//
+// ******************************
+
+func newCmdCompletionBash(root *cobra.Command) *cobra.Command {
+ return &cobra.Command{
+ Use: "bash",
+ Short: "Generates bash completion scripts",
+ Long: bashCompletionCmdLongDescription,
+ Run: func(cmd *cobra.Command, args []string) {
+ root.GenBashCompletion(os.Stdout)
+ },
+ }
+}
+
+func configureKnownBashCompletions(command *cobra.Command) {
+ // completion support
+ dependencyFlag := command.Flag("dependency")
+ if dependencyFlag != nil {
+ dependencyFlag.Annotations = map[string][]string{
+ cobra.BashCompCustom: {"__kamel_dependency_type"},
+ }
+ }
+
+ configMapFlag := command.Flag("configmap")
+ configMapFlag.Annotations = map[string][]string{
+ cobra.BashCompCustom: {"__kamel_kubectl_get_configmap"},
+ }
+
+ secretFlag := command.Flag("secret")
+ secretFlag.Annotations = map[string][]string{
+ cobra.BashCompCustom: {"__kamel_kubectl_get_secret"},
+ }
+}
diff --git a/pkg/client/cmd/completion.go b/pkg/client/cmd/completion_zsh.go
similarity index 63%
copy from pkg/client/cmd/completion.go
copy to pkg/client/cmd/completion_zsh.go
index e172df0..5217b8e 100644
--- a/pkg/client/cmd/completion.go
+++ b/pkg/client/cmd/completion_zsh.go
@@ -23,16 +23,11 @@ import (
"github.com/spf13/cobra"
)
-const bashCompletionCmdLongDescription = `
-To load completion run
-
-. <(kamel completion)
-
-To configure your bash shell to load completions for each session add to your bashrc
-
-# ~/.bashrc or ~/.profile
-. <(kamel completion)
-`
+// ******************************
+//
+//
+//
+// ******************************
const zshCompletionCmdLongDescription = `
To configure your zsh shell to load completions for each session add to your zshrc
@@ -42,30 +37,22 @@ if [ $commands[kamel] ]; then
fi
`
-// NewCmdCompletion --
-func NewCmdCompletion(root *cobra.Command) *cobra.Command {
- completion := cobra.Command{
- Use: "completion",
- Short: "Generates completion scripts",
- }
-
- completion.AddCommand(&cobra.Command{
- Use: "bash",
- Short: "Generates bash completion scripts",
- Long: bashCompletionCmdLongDescription,
- Run: func(cmd *cobra.Command, args []string) {
- root.GenBashCompletion(os.Stdout)
- },
- })
+// ******************************
+//
+// COMMAND
+//
+// ******************************
- completion.AddCommand(&cobra.Command{
+func newCmdCompletionZsh(root *cobra.Command) *cobra.Command {
+ return &cobra.Command{
Use: "zsh",
Short: "Generates zsh completion scripts",
Long: zshCompletionCmdLongDescription,
Run: func(cmd *cobra.Command, args []string) {
root.GenZshCompletion(os.Stdout)
},
- })
+ }
+}
- return &completion
+func configureKnownZshCompletions(command *cobra.Command) {
}
diff --git a/pkg/client/cmd/context_create.go b/pkg/client/cmd/context_create.go
index 224f1e0..2120d30 100644
--- a/pkg/client/cmd/context_create.go
+++ b/pkg/client/cmd/context_create.go
@@ -50,6 +50,9 @@ func newContextCreateCmd(rootCmdOptions *RootCmdOptions) *cobra.Command {
cmd.Flags().StringSliceVar(&impl.configmaps, "configmap", nil, "Add a ConfigMap")
cmd.Flags().StringSliceVar(&impl.secrets, "secret", nil, "Add a Secret")
+ // completion support
+ configureKnownCompletions(&cmd)
+
return &cmd
}
diff --git a/pkg/client/cmd/root.go b/pkg/client/cmd/root.go
index 3168cc2..dfbbfd9 100644
--- a/pkg/client/cmd/root.go
+++ b/pkg/client/cmd/root.go
@@ -27,20 +27,29 @@ import (
"github.com/spf13/cobra"
)
+const kamelCommandLongDescription = `
+Long: "Apache Camel K (a.k.a. Kamel) is a lightweight integration framework
+built from Apache Camel that runs natively on Kubernetes and is
+specifically designed for serverless and microservice architectures.",,
+`
+
+// RootCmdOptions --
type RootCmdOptions struct {
Context context.Context
KubeConfig string
Namespace string
}
+// NewKamelCommand --
func NewKamelCommand(ctx context.Context) (*cobra.Command, error) {
options := RootCmdOptions{
Context: ctx,
}
var cmd = cobra.Command{
- Use: "kamel",
- Short: "Kamel is a awesome client tool for running Apache Camel integrations natively on Kubernetes",
- Long: "Apache Camel K (a.k.a. Kamel) is a lightweight integration framework\nbuilt from Apache Camel that runs natively on Kubernetes and is\nspecifically designed for serverless and microservice architectures.",
+ Use: "kamel",
+ Short: "Kamel is a awesome client tool for running Apache Camel integrations natively on Kubernetes",
+ Long: kamelCommandLongDescription,
+ BashCompletionFunction: bashCompletionFunction,
}
cmd.PersistentFlags().StringVar(&options.KubeConfig, "config", "", "Path to the config file to use for CLI requests")
@@ -63,7 +72,7 @@ func NewKamelCommand(ctx context.Context) (*cobra.Command, error) {
return nil, err
}
- cmd.AddCommand(NewCmdCompletion(&cmd))
+ cmd.AddCommand(newCmdCompletion(&cmd))
cmd.AddCommand(NewCmdVersion())
cmd.AddCommand(NewCmdRun(&options))
cmd.AddCommand(NewCmdGet(&options))
diff --git a/pkg/client/cmd/run.go b/pkg/client/cmd/run.go
index 150dd85..22c0aa4 100644
--- a/pkg/client/cmd/run.go
+++ b/pkg/client/cmd/run.go
@@ -61,6 +61,9 @@ func NewCmdRun(rootCmdOptions *RootCmdOptions) *cobra.Command {
cmd.Flags().StringSliceVar(&options.Secrets, "secret", nil, "Add a Secret")
cmd.Flags().BoolVar(&options.Logs, "logs", false, "Print integration logs")
+ // completion support
+ configureKnownCompletions(&cmd)
+
return &cmd
}