diff --git a/contrib/completions/bash/kubectl b/contrib/completions/bash/kubectl index bf31f29158d..8944f93bacc 100644 --- a/contrib/completions/bash/kubectl +++ b/contrib/completions/bash/kubectl @@ -1328,7 +1328,74 @@ _kubectl_edit() must_have_one_flag=() must_have_one_noun=() + must_have_one_noun+=("componentstatus") + must_have_one_noun+=("configmap") + must_have_one_noun+=("daemonset") + must_have_one_noun+=("deployment") + must_have_one_noun+=("endpoints") + must_have_one_noun+=("event") + must_have_one_noun+=("horizontalpodautoscaler") + must_have_one_noun+=("ingress") + must_have_one_noun+=("job") + must_have_one_noun+=("limitrange") + must_have_one_noun+=("namespace") + must_have_one_noun+=("node") + must_have_one_noun+=("persistentvolume") + must_have_one_noun+=("persistentvolumeclaim") + must_have_one_noun+=("pod") + must_have_one_noun+=("podsecuritypolicy") + must_have_one_noun+=("podtemplate") + must_have_one_noun+=("replicaset") + must_have_one_noun+=("replicationcontroller") + must_have_one_noun+=("resourcequota") + must_have_one_noun+=("secret") + must_have_one_noun+=("service") + must_have_one_noun+=("serviceaccount") + must_have_one_noun+=("thirdpartyresource") + must_have_one_noun+=("thirdpartyresourcedata") noun_aliases=() + noun_aliases+=("componentstatuses") + noun_aliases+=("configmaps") + noun_aliases+=("cs") + noun_aliases+=("daemonsets") + noun_aliases+=("deployments") + noun_aliases+=("ds") + noun_aliases+=("endpoints") + noun_aliases+=("ep") + noun_aliases+=("ev") + noun_aliases+=("events") + noun_aliases+=("horizontalpodautoscalers") + noun_aliases+=("hpa") + noun_aliases+=("ing") + noun_aliases+=("ingresses") + noun_aliases+=("jobs") + noun_aliases+=("limitranges") + noun_aliases+=("limits") + noun_aliases+=("namespaces") + noun_aliases+=("no") + noun_aliases+=("nodes") + noun_aliases+=("ns") + noun_aliases+=("persistentvolumeclaims") + noun_aliases+=("persistentvolumes") + noun_aliases+=("po") + noun_aliases+=("pods") + noun_aliases+=("podsecuritypolicies") + noun_aliases+=("podtemplates") + noun_aliases+=("pv") + noun_aliases+=("pvc") + noun_aliases+=("quota") + noun_aliases+=("rc") + noun_aliases+=("replicasets") + noun_aliases+=("replicationcontrollers") + noun_aliases+=("resourcequotas") + noun_aliases+=("rs") + noun_aliases+=("sa") + noun_aliases+=("secrets") + noun_aliases+=("serviceaccounts") + noun_aliases+=("services") + noun_aliases+=("svc") + noun_aliases+=("thirdpartyresourcedatas") + noun_aliases+=("thirdpartyresources") } _kubectl_apply() diff --git a/pkg/kubectl/cmd/cmd.go b/pkg/kubectl/cmd/cmd.go index 3b716f2be98..477ac6112d3 100644 --- a/pkg/kubectl/cmd/cmd.go +++ b/pkg/kubectl/cmd/cmd.go @@ -124,7 +124,7 @@ __kubectl_require_pod_and_container() __custom_func() { case ${last_command} in - kubectl_get | kubectl_describe | kubectl_delete | kubectl_label | kubectl_stop) + kubectl_get | kubectl_describe | kubectl_delete | kubectl_label | kubectl_stop | kubectl_edit) __kubectl_get_resource return ;; diff --git a/pkg/kubectl/cmd/edit.go b/pkg/kubectl/cmd/edit.go index abfa32b00b8..e9fe583658a 100644 --- a/pkg/kubectl/cmd/edit.go +++ b/pkg/kubectl/cmd/edit.go @@ -86,6 +86,15 @@ var errExit = fmt.Errorf("exit directly") func NewCmdEdit(f *cmdutil.Factory, out, errOut io.Writer) *cobra.Command { options := &EditOptions{} + // retrieve a list of handled resources from printer as valid args + validArgs, argAliases := []string{}, []string{} + p, err := f.Printer(nil, false, false, false, false, false, false, []string{}) + cmdutil.CheckErr(err) + if p != nil { + validArgs = p.HandledResources() + argAliases = kubectl.ResourceAliases(validArgs) + } + cmd := &cobra.Command{ Use: "edit (RESOURCE/NAME | -f FILENAME)", Short: "Edit a resource on the server", @@ -98,6 +107,8 @@ func NewCmdEdit(f *cmdutil.Factory, out, errOut io.Writer) *cobra.Command { } cmdutil.CheckErr(err) }, + ValidArgs: validArgs, + ArgAliases: argAliases, } usage := "Filename, directory, or URL to file to use to edit the resource" kubectl.AddJsonFilenameFlag(cmd, &options.Filenames, usage)