From c3d77eea54011aed255d43fe48583ddb7b432e19 Mon Sep 17 00:00:00 2001 From: Zhenguo Niu Date: Fri, 15 Dec 2017 15:20:13 +0800 Subject: [PATCH] Abstract cmd valid args get behind the factory --- pkg/kubectl/cmd/annotate.go | 15 ++------------- pkg/kubectl/cmd/apply_edit_last_applied.go | 15 ++------------- pkg/kubectl/cmd/delete.go | 15 ++------------- pkg/kubectl/cmd/edit.go | 15 ++------------- pkg/kubectl/cmd/expose.go | 5 ++--- pkg/kubectl/cmd/label.go | 15 ++------------- pkg/kubectl/cmd/patch.go | 15 ++------------- pkg/kubectl/cmd/resource/get.go | 16 ++-------------- pkg/kubectl/cmd/util/printing.go | 16 ++++++++++++++++ 9 files changed, 32 insertions(+), 95 deletions(-) diff --git a/pkg/kubectl/cmd/annotate.go b/pkg/kubectl/cmd/annotate.go index 09541ea0e24..836cd0df06b 100644 --- a/pkg/kubectl/cmd/annotate.go +++ b/pkg/kubectl/cmd/annotate.go @@ -36,7 +36,6 @@ import ( cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/resource" "k8s.io/kubernetes/pkg/kubectl/util/i18n" - "k8s.io/kubernetes/pkg/printers" ) // AnnotateOptions have the data required to perform the annotate operation @@ -100,17 +99,7 @@ var ( func NewCmdAnnotate(f cmdutil.Factory, out io.Writer) *cobra.Command { options := &AnnotateOptions{} - - // retrieve a list of handled resources from printer as valid args - validArgs, argAliases := []string{}, []string{} - p, err := f.Printer(nil, printers.PrintOptions{ - ColumnLabels: []string{}, - }) - cmdutil.CheckErr(err) - if p != nil { - validArgs = p.HandledResources() - argAliases = kubectl.ResourceAliases(validArgs) - } + validArgs := cmdutil.ValidArgList(f) cmd := &cobra.Command{ Use: "annotate [--overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--resource-version=version]", @@ -127,7 +116,7 @@ func NewCmdAnnotate(f cmdutil.Factory, out io.Writer) *cobra.Command { cmdutil.CheckErr(options.RunAnnotate(f, cmd)) }, ValidArgs: validArgs, - ArgAliases: argAliases, + ArgAliases: kubectl.ResourceAliases(validArgs), } cmdutil.AddPrinterFlags(cmd) cmdutil.AddIncludeUninitializedFlag(cmd) diff --git a/pkg/kubectl/cmd/apply_edit_last_applied.go b/pkg/kubectl/cmd/apply_edit_last_applied.go index ca4868fa5b8..b106af26491 100644 --- a/pkg/kubectl/cmd/apply_edit_last_applied.go +++ b/pkg/kubectl/cmd/apply_edit_last_applied.go @@ -26,7 +26,6 @@ import ( "k8s.io/kubernetes/pkg/kubectl/cmd/templates" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/cmd/util/editor" - "k8s.io/kubernetes/pkg/printers" ) var ( @@ -63,17 +62,7 @@ func NewCmdApplyEditLastApplied(f cmdutil.Factory, out, errOut io.Writer) *cobra options := &editor.EditOptions{ EditMode: editor.ApplyEditMode, } - - // retrieve a list of handled resources from printer as valid args - validArgs, argAliases := []string{}, []string{} - p, err := f.Printer(nil, printers.PrintOptions{ - ColumnLabels: []string{}, - }) - cmdutil.CheckErr(err) - if p != nil { - validArgs = p.HandledResources() - argAliases = kubectl.ResourceAliases(validArgs) - } + validArgs := cmdutil.ValidArgList(f) cmd := &cobra.Command{ Use: "edit-last-applied (RESOURCE/NAME | -f FILENAME)", @@ -90,7 +79,7 @@ func NewCmdApplyEditLastApplied(f cmdutil.Factory, out, errOut io.Writer) *cobra } }, ValidArgs: validArgs, - ArgAliases: argAliases, + ArgAliases: kubectl.ResourceAliases(validArgs), } usage := "to use to edit the resource" diff --git a/pkg/kubectl/cmd/delete.go b/pkg/kubectl/cmd/delete.go index 80a9bd49920..2298230fe53 100644 --- a/pkg/kubectl/cmd/delete.go +++ b/pkg/kubectl/cmd/delete.go @@ -32,7 +32,6 @@ import ( cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/resource" "k8s.io/kubernetes/pkg/kubectl/util/i18n" - "k8s.io/kubernetes/pkg/printers" ) var ( @@ -114,17 +113,7 @@ type DeleteOptions struct { func NewCmdDelete(f cmdutil.Factory, out, errOut io.Writer) *cobra.Command { options := &DeleteOptions{} - - // retrieve a list of handled resources from printer as valid args - validArgs, argAliases := []string{}, []string{} - p, err := f.Printer(nil, printers.PrintOptions{ - ColumnLabels: []string{}, - }) - cmdutil.CheckErr(err) - if p != nil { - validArgs = p.HandledResources() - argAliases = kubectl.ResourceAliases(validArgs) - } + validArgs := cmdutil.ValidArgList(f) cmd := &cobra.Command{ Use: "delete ([-f FILENAME] | TYPE [(NAME | -l label | --all)])", @@ -145,7 +134,7 @@ func NewCmdDelete(f cmdutil.Factory, out, errOut io.Writer) *cobra.Command { }, SuggestFor: []string{"rm"}, ValidArgs: validArgs, - ArgAliases: argAliases, + ArgAliases: kubectl.ResourceAliases(validArgs), } usage := "containing the resource to delete." cmdutil.AddFilenameOptionFlags(cmd, &options.FilenameOptions, usage) diff --git a/pkg/kubectl/cmd/edit.go b/pkg/kubectl/cmd/edit.go index 11ef23c6bd5..3f591b7ff7f 100644 --- a/pkg/kubectl/cmd/edit.go +++ b/pkg/kubectl/cmd/edit.go @@ -28,7 +28,6 @@ import ( cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/cmd/util/editor" "k8s.io/kubernetes/pkg/kubectl/util/i18n" - "k8s.io/kubernetes/pkg/printers" ) var ( @@ -74,17 +73,7 @@ func NewCmdEdit(f cmdutil.Factory, out, errOut io.Writer) *cobra.Command { options := &editor.EditOptions{ EditMode: editor.NormalEditMode, } - - // retrieve a list of handled resources from printer as valid args - validArgs, argAliases := []string{}, []string{} - p, err := f.Printer(nil, printers.PrintOptions{ - ColumnLabels: []string{}, - }) - cmdutil.CheckErr(err) - if p != nil { - validArgs = p.HandledResources() - argAliases = kubectl.ResourceAliases(validArgs) - } + validArgs := cmdutil.ValidArgList(f) cmd := &cobra.Command{ Use: "edit (RESOURCE/NAME | -f FILENAME)", @@ -101,7 +90,7 @@ func NewCmdEdit(f cmdutil.Factory, out, errOut io.Writer) *cobra.Command { } }, ValidArgs: validArgs, - ArgAliases: argAliases, + ArgAliases: kubectl.ResourceAliases(validArgs), } usage := "to use to edit the resource" cmdutil.AddFilenameOptionFlags(cmd, &options.FilenameOptions, usage) diff --git a/pkg/kubectl/cmd/expose.go b/pkg/kubectl/cmd/expose.go index ed84c1d76b7..ab83d2197a0 100644 --- a/pkg/kubectl/cmd/expose.go +++ b/pkg/kubectl/cmd/expose.go @@ -75,11 +75,10 @@ var ( func NewCmdExposeService(f cmdutil.Factory, out io.Writer) *cobra.Command { options := &resource.FilenameOptions{} - validArgs, argAliases := []string{}, []string{} + validArgs := []string{} resources := regexp.MustCompile(`\s*,`).Split(exposeResources, -1) for _, r := range resources { validArgs = append(validArgs, strings.Fields(r)[0]) - argAliases = kubectl.ResourceAliases(validArgs) } cmd := &cobra.Command{ @@ -92,7 +91,7 @@ func NewCmdExposeService(f cmdutil.Factory, out io.Writer) *cobra.Command { cmdutil.CheckErr(err) }, ValidArgs: validArgs, - ArgAliases: argAliases, + ArgAliases: kubectl.ResourceAliases(validArgs), } cmdutil.AddPrinterFlags(cmd) cmd.Flags().String("generator", "service/v2", i18n.T("The name of the API generator to use. There are 2 generators: 'service/v1' and 'service/v2'. The only difference between them is that service port in v1 is named 'default', while it is left unnamed in v2. Default is 'service/v2'.")) diff --git a/pkg/kubectl/cmd/label.go b/pkg/kubectl/cmd/label.go index 786fbe6afcb..d88817f6955 100644 --- a/pkg/kubectl/cmd/label.go +++ b/pkg/kubectl/cmd/label.go @@ -39,7 +39,6 @@ import ( cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/resource" "k8s.io/kubernetes/pkg/kubectl/util/i18n" - "k8s.io/kubernetes/pkg/printers" ) // LabelOptions have the data required to perform the label operation @@ -98,17 +97,7 @@ var ( func NewCmdLabel(f cmdutil.Factory, out io.Writer) *cobra.Command { options := &LabelOptions{} - - // retrieve a list of handled resources from printer as valid args - validArgs, argAliases := []string{}, []string{} - p, err := f.Printer(nil, printers.PrintOptions{ - ColumnLabels: []string{}, - }) - cmdutil.CheckErr(err) - if p != nil { - validArgs = p.HandledResources() - argAliases = kubectl.ResourceAliases(validArgs) - } + validArgs := cmdutil.ValidArgList(f) cmd := &cobra.Command{ Use: "label [--overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--resource-version=version]", @@ -125,7 +114,7 @@ func NewCmdLabel(f cmdutil.Factory, out io.Writer) *cobra.Command { cmdutil.CheckErr(options.RunLabel(f, cmd)) }, ValidArgs: validArgs, - ArgAliases: argAliases, + ArgAliases: kubectl.ResourceAliases(validArgs), } cmdutil.AddPrinterFlags(cmd) cmd.Flags().Bool("overwrite", false, "If true, allow labels to be overwritten, otherwise reject label updates that overwrite existing labels.") diff --git a/pkg/kubectl/cmd/patch.go b/pkg/kubectl/cmd/patch.go index 325c2584722..b3a005e365e 100644 --- a/pkg/kubectl/cmd/patch.go +++ b/pkg/kubectl/cmd/patch.go @@ -40,7 +40,6 @@ import ( "k8s.io/kubernetes/pkg/kubectl/resource" "k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/util/i18n" - "k8s.io/kubernetes/pkg/printers" ) var patchTypes = map[string]types.PatchType{"json": types.JSONPatchType, "merge": types.MergePatchType, "strategic": types.StrategicMergePatchType} @@ -82,17 +81,7 @@ var ( func NewCmdPatch(f cmdutil.Factory, out io.Writer) *cobra.Command { options := &PatchOptions{} - - // retrieve a list of handled resources from printer as valid args - validArgs, argAliases := []string{}, []string{} - p, err := f.Printer(nil, printers.PrintOptions{ - ColumnLabels: []string{}, - }) - cmdutil.CheckErr(err) - if p != nil { - validArgs = p.HandledResources() - argAliases = kubectl.ResourceAliases(validArgs) - } + validArgs := cmdutil.ValidArgList(f) cmd := &cobra.Command{ Use: "patch (-f FILENAME | TYPE NAME) -p PATCH", @@ -105,7 +94,7 @@ func NewCmdPatch(f cmdutil.Factory, out io.Writer) *cobra.Command { cmdutil.CheckErr(err) }, ValidArgs: validArgs, - ArgAliases: argAliases, + ArgAliases: kubectl.ResourceAliases(validArgs), } cmd.Flags().StringP("patch", "p", "", "The patch to be applied to the resource JSON file.") cmd.MarkFlagRequired("patch") diff --git a/pkg/kubectl/cmd/resource/get.go b/pkg/kubectl/cmd/resource/get.go index b3cd8eb2580..a8f741ac4e6 100644 --- a/pkg/kubectl/cmd/resource/get.go +++ b/pkg/kubectl/cmd/resource/get.go @@ -124,19 +124,7 @@ func NewCmdGet(f cmdutil.Factory, out io.Writer, errOut io.Writer) *cobra.Comman Out: out, ErrOut: errOut, } - - // TODO: this needs to be abstracted behind the factory like ValidResourceTypeList - // and use discovery - // retrieve a list of handled resources from printer as valid args - validArgs, argAliases := []string{}, []string{} - p, err := f.Printer(nil, printers.PrintOptions{ - ColumnLabels: []string{}, - }) - cmdutil.CheckErr(err) - if p != nil { - validArgs = p.HandledResources() - argAliases = kubectl.ResourceAliases(validArgs) - } + validArgs := cmdutil.ValidArgList(f) cmd := &cobra.Command{ Use: "get [(-o|--output=)json|yaml|wide|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=...] (TYPE [NAME | -l label] | TYPE/NAME ...) [flags]", @@ -150,7 +138,7 @@ func NewCmdGet(f cmdutil.Factory, out io.Writer, errOut io.Writer) *cobra.Comman }, SuggestFor: []string{"list", "ps"}, ValidArgs: validArgs, - ArgAliases: argAliases, + ArgAliases: kubectl.ResourceAliases(validArgs), } cmd.Flags().StringVar(&options.Raw, "raw", options.Raw, "Raw URI to request from the server. Uses the transport specified by the kubeconfig file.") diff --git a/pkg/kubectl/cmd/util/printing.go b/pkg/kubectl/cmd/util/printing.go index d978b9ef96c..bfa83b98951 100644 --- a/pkg/kubectl/cmd/util/printing.go +++ b/pkg/kubectl/cmd/util/printing.go @@ -223,3 +223,19 @@ func ValidResourceTypeList(f ClientAccessFactory) string { `) } + +// Retrieve a list of handled resources from printer as valid args +// TODO: This function implementation should be replaced with a real implementation from the +// discovery service. +func ValidArgList(f ClientAccessFactory) []string { + validArgs := []string{} + p, err := f.Printer(nil, printers.PrintOptions{ + ColumnLabels: []string{}, + }) + CheckErr(err) + if p != nil { + validArgs = p.HandledResources() + } + + return validArgs +}