Skip to content

Commit f7d2ecd

Browse files
authored
Merge pull request kubernetes#96087 from VilledeMontreal/feat/goComp
Move all bash custom completions to Go
2 parents 7498c28 + 77bb053 commit f7d2ecd

37 files changed

+599
-393
lines changed

staging/src/k8s.io/kubectl/pkg/cmd/annotate/annotate.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ import (
3838
cmdutil "k8s.io/kubectl/pkg/cmd/util"
3939
"k8s.io/kubectl/pkg/polymorphichelpers"
4040
"k8s.io/kubectl/pkg/scheme"
41+
"k8s.io/kubectl/pkg/util"
4142
"k8s.io/kubectl/pkg/util/i18n"
4243
"k8s.io/kubectl/pkg/util/templates"
4344
)
@@ -134,6 +135,7 @@ func NewCmdAnnotate(parent string, f cmdutil.Factory, ioStreams genericclioption
134135
Short: i18n.T("Update the annotations on a resource"),
135136
Long: annotateLong + "\n\n" + cmdutil.SuggestAPIResources(parent),
136137
Example: annotateExample,
138+
ValidArgsFunction: util.ResourceTypeAndNameCompletionFunc(f),
137139
Run: func(cmd *cobra.Command, args []string) {
138140
cmdutil.CheckErr(o.Complete(f, cmd, args))
139141
cmdutil.CheckErr(o.Validate())

staging/src/k8s.io/kubectl/pkg/cmd/apiresources/apiresources.go

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,11 @@ limitations under the License.
1717
package apiresources
1818

1919
import (
20+
"bytes"
2021
"fmt"
2122
"io"
23+
"io/ioutil"
24+
"os"
2225
"sort"
2326
"strings"
2427

@@ -275,3 +278,38 @@ func (s sortableResource) compareValues(i, j int) (string, string) {
275278
}
276279
return s.resources[i].APIGroup, s.resources[j].APIGroup
277280
}
281+
282+
// CompGetResourceList returns the list of api resources which begin with `toComplete`.
283+
func CompGetResourceList(f cmdutil.Factory, cmd *cobra.Command, toComplete string) []string {
284+
buf := new(bytes.Buffer)
285+
streams := genericclioptions.IOStreams{In: os.Stdin, Out: buf, ErrOut: ioutil.Discard}
286+
o := NewAPIResourceOptions(streams)
287+
288+
// Get the list of resources
289+
o.Output = "name"
290+
o.Cached = true
291+
o.Verbs = []string{"get"}
292+
// TODO:Should set --request-timeout=5s
293+
294+
// Ignore errors as the output may still be valid
295+
o.RunAPIResources(cmd, f)
296+
297+
// Resources can be a comma-separated list. The last element is then
298+
// the one we should complete. For example if toComplete=="pods,secre"
299+
// we should return "pods,secrets"
300+
prefix := ""
301+
suffix := toComplete
302+
lastIdx := strings.LastIndex(toComplete, ",")
303+
if lastIdx != -1 {
304+
prefix = toComplete[0 : lastIdx+1]
305+
suffix = toComplete[lastIdx+1:]
306+
}
307+
var comps []string
308+
resources := strings.Split(buf.String(), "\n")
309+
for _, res := range resources {
310+
if res != "" && strings.HasPrefix(res, suffix) {
311+
comps = append(comps, fmt.Sprintf("%s%s", prefix, res))
312+
}
313+
}
314+
return comps
315+
}

staging/src/k8s.io/kubectl/pkg/cmd/apply/apply_edit_last_applied.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222
"k8s.io/cli-runtime/pkg/genericclioptions"
2323
cmdutil "k8s.io/kubectl/pkg/cmd/util"
2424
"k8s.io/kubectl/pkg/cmd/util/editor"
25+
"k8s.io/kubectl/pkg/util"
2526
"k8s.io/kubectl/pkg/util/i18n"
2627
"k8s.io/kubectl/pkg/util/templates"
2728
)
@@ -66,6 +67,7 @@ func NewCmdApplyEditLastApplied(f cmdutil.Factory, ioStreams genericclioptions.I
6667
Short: i18n.T("Edit latest last-applied-configuration annotations of a resource/object"),
6768
Long: applyEditLastAppliedLong,
6869
Example: applyEditLastAppliedExample,
70+
ValidArgsFunction: util.ResourceTypeAndNameCompletionFunc(f),
6971
Run: func(cmd *cobra.Command, args []string) {
7072
cmdutil.CheckErr(o.Complete(f, args, cmd))
7173
cmdutil.CheckErr(o.Run())

staging/src/k8s.io/kubectl/pkg/cmd/apply/apply_view_last_applied.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ func NewCmdApplyViewLastApplied(f cmdutil.Factory, ioStreams genericclioptions.I
7777
Short: i18n.T("View latest last-applied-configuration annotations of a resource/object"),
7878
Long: applyViewLastAppliedLong,
7979
Example: applyViewLastAppliedExample,
80+
ValidArgsFunction: util.ResourceTypeAndNameCompletionFunc(f),
8081
Run: func(cmd *cobra.Command, args []string) {
8182
cmdutil.CheckErr(options.Complete(cmd, f, args))
8283
cmdutil.CheckErr(options.Validate(cmd))

staging/src/k8s.io/kubectl/pkg/cmd/attach/attach.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import (
3535
"k8s.io/kubectl/pkg/cmd/util/podcmd"
3636
"k8s.io/kubectl/pkg/polymorphichelpers"
3737
"k8s.io/kubectl/pkg/scheme"
38+
"k8s.io/kubectl/pkg/util"
3839
"k8s.io/kubectl/pkg/util/i18n"
3940
"k8s.io/kubectl/pkg/util/templates"
4041
)
@@ -104,6 +105,7 @@ func NewCmdAttach(f cmdutil.Factory, streams genericclioptions.IOStreams) *cobra
104105
Short: i18n.T("Attach to a running container"),
105106
Long: i18n.T("Attach to a process that is already running inside an existing container."),
106107
Example: attachExample,
108+
ValidArgsFunction: util.ResourceNameCompletionFunc(f, "pod"),
107109
Run: func(cmd *cobra.Command, args []string) {
108110
cmdutil.CheckErr(o.Complete(f, cmd, args))
109111
cmdutil.CheckErr(o.Validate())

staging/src/k8s.io/kubectl/pkg/cmd/autoscale/autoscale.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,12 +107,12 @@ func NewCmdAutoscale(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *
107107
Short: i18n.T("Auto-scale a Deployment, ReplicaSet, StatefulSet, or ReplicationController"),
108108
Long: autoscaleLong,
109109
Example: autoscaleExample,
110+
ValidArgsFunction: util.SpecifiedResourceTypeAndNameCompletionFunc(f, validArgs),
110111
Run: func(cmd *cobra.Command, args []string) {
111112
cmdutil.CheckErr(o.Complete(f, cmd, args))
112113
cmdutil.CheckErr(o.Validate())
113114
cmdutil.CheckErr(o.Run())
114115
},
115-
ValidArgs: validArgs,
116116
}
117117

118118
// bind flag structs

0 commit comments

Comments
 (0)