From d1603c9560389a66312d4a743d22cb5159c63036 Mon Sep 17 00:00:00 2001 From: juanvallejo Date: Wed, 2 May 2018 15:15:47 -0400 Subject: [PATCH] move PrintOptions to genericclioptions --- hack/.golint_failures | 2 + hack/import-restrictions.yaml | 1 + pkg/kubectl/cmd/BUILD | 2 + pkg/kubectl/cmd/annotate.go | 6 +- pkg/kubectl/cmd/apply.go | 18 +++--- pkg/kubectl/cmd/apply_set_last_applied.go | 6 +- pkg/kubectl/cmd/auth/BUILD | 2 +- pkg/kubectl/cmd/auth/reconcile.go | 6 +- pkg/kubectl/cmd/autoscale.go | 17 ++---- pkg/kubectl/cmd/certificates.go | 8 +-- pkg/kubectl/cmd/clusterinfo_dump.go | 6 +- pkg/kubectl/cmd/cmd_printing_test.go | 12 ++-- pkg/kubectl/cmd/config/BUILD | 1 + pkg/kubectl/cmd/config/flags.go | 22 +++---- pkg/kubectl/cmd/convert.go | 6 +- pkg/kubectl/cmd/create/BUILD | 1 + pkg/kubectl/cmd/create/flags.go | 22 +++---- pkg/kubectl/cmd/drain.go | 35 +++++------ pkg/kubectl/cmd/drain_test.go | 4 +- pkg/kubectl/cmd/expose.go | 6 +- pkg/kubectl/cmd/get/BUILD | 1 - pkg/kubectl/cmd/get/get.go | 2 +- pkg/kubectl/cmd/get/get_flags.go | 25 ++++---- pkg/kubectl/cmd/get/humanreadable_flags.go | 3 +- .../cmd/get/humanreadable_flags_test.go | 6 +- pkg/kubectl/cmd/label.go | 16 ++--- pkg/kubectl/cmd/patch.go | 16 ++--- pkg/kubectl/cmd/replace.go | 7 +-- pkg/kubectl/cmd/rollingupdate.go | 17 ++---- pkg/kubectl/cmd/rollout/BUILD | 2 +- pkg/kubectl/cmd/rollout/rollout_pause.go | 17 ++---- pkg/kubectl/cmd/rollout/rollout_resume.go | 17 ++---- pkg/kubectl/cmd/rollout/rollout_undo.go | 18 +++--- pkg/kubectl/cmd/run.go | 9 ++- pkg/kubectl/cmd/run_test.go | 5 +- pkg/kubectl/cmd/scale.go | 8 +-- pkg/kubectl/cmd/set/BUILD | 3 +- pkg/kubectl/cmd/set/set_env.go | 6 +- pkg/kubectl/cmd/set/set_env_test.go | 7 +-- pkg/kubectl/cmd/set/set_image.go | 6 +- pkg/kubectl/cmd/set/set_image_test.go | 9 ++- pkg/kubectl/cmd/set/set_resources.go | 7 +-- pkg/kubectl/cmd/set/set_resources_test.go | 8 +-- pkg/kubectl/cmd/set/set_selector.go | 7 +-- pkg/kubectl/cmd/set/set_serviceaccount.go | 7 +-- .../cmd/set/set_serviceaccount_test.go | 10 ++-- pkg/kubectl/cmd/set/set_subject.go | 6 +- pkg/kubectl/cmd/taint.go | 17 ++---- pkg/kubectl/cmd/util/editor/BUILD | 2 +- pkg/kubectl/cmd/util/editor/editoptions.go | 16 ++--- pkg/kubectl/genericclioptions/BUILD | 20 ++++++- .../genericclioptions}/json_yaml_flags.go | 12 ++-- .../json_yaml_flags_test.go | 9 ++- .../genericclioptions}/name_flags.go | 8 ++- .../genericclioptions}/name_flags_test.go | 9 ++- .../genericclioptions/print_flags.go} | 49 ++------------- pkg/kubectl/genericclioptions/printers/BUILD | 41 +++++++++++++ .../genericclioptions/printers/interface.go | 32 ++++++++++ .../genericclioptions}/printers/json.go | 8 +-- .../genericclioptions}/printers/name.go | 4 +- .../printers/sourcechecker.go | 60 +++++++++++++++++++ .../printers/sourcechecker_test.go} | 0 .../genericclioptions}/printers/typesetter.go | 0 pkg/printers/BUILD | 36 +++-------- pkg/printers/customcolumn.go | 5 +- pkg/printers/customcolumn_flags.go | 8 +-- pkg/printers/customcolumn_flags_test.go | 10 ++-- pkg/printers/customcolumn_test.go | 37 ++++++------ pkg/printers/internalversion/BUILD | 2 + pkg/printers/internalversion/printers_test.go | 13 ++-- pkg/printers/jsonpath.go | 5 +- pkg/printers/jsonpath_flags.go | 6 +- pkg/printers/jsonpath_flags_test.go | 14 ++--- pkg/printers/kube_template_flags.go | 8 ++- pkg/printers/template.go | 5 +- pkg/printers/template_flags.go | 6 +- pkg/printers/template_flags_test.go | 14 ++--- 77 files changed, 475 insertions(+), 409 deletions(-) rename pkg/{printers => kubectl/genericclioptions}/json_yaml_flags.go (85%) rename pkg/{printers => kubectl/genericclioptions}/json_yaml_flags_test.go (91%) rename pkg/{printers => kubectl/genericclioptions}/name_flags.go (90%) rename pkg/{printers => kubectl/genericclioptions}/name_flags_test.go (93%) rename pkg/{printers/flags.go => kubectl/genericclioptions/print_flags.go} (72%) create mode 100644 pkg/kubectl/genericclioptions/printers/BUILD create mode 100644 pkg/kubectl/genericclioptions/printers/interface.go rename pkg/{ => kubectl/genericclioptions}/printers/json.go (93%) rename pkg/{ => kubectl/genericclioptions}/printers/name.go (97%) create mode 100644 pkg/kubectl/genericclioptions/printers/sourcechecker.go rename pkg/{printers/flags_test.go => kubectl/genericclioptions/printers/sourcechecker_test.go} (100%) rename pkg/{ => kubectl/genericclioptions}/printers/typesetter.go (100%) diff --git a/hack/.golint_failures b/hack/.golint_failures index dfb01b7005..4b17f4efbf 100644 --- a/hack/.golint_failures +++ b/hack/.golint_failures @@ -152,6 +152,7 @@ pkg/kubectl/cmd/util/editor pkg/kubectl/cmd/util/jsonmerge pkg/kubectl/cmd/util/sanity pkg/kubectl/genericclioptions +pkg/kubectl/genericclioptions/printers pkg/kubectl/genericclioptions/resource pkg/kubectl/metricsutil pkg/kubectl/util @@ -222,6 +223,7 @@ pkg/kubemark pkg/master pkg/master/controller/crdregistration pkg/master/tunneler +pkg/printers pkg/printers/internalversion pkg/printers/storage pkg/probe diff --git a/hack/import-restrictions.yaml b/hack/import-restrictions.yaml index 35645ea7eb..c053eb4525 100644 --- a/hack/import-restrictions.yaml +++ b/hack/import-restrictions.yaml @@ -23,6 +23,7 @@ - k8s.io/client-go # TODO this one should be tightened. We depend on it for testing, but we should instead create our own scheme - k8s.io/api/core/v1 + - k8s.io/kubernetes/pkg/kubectl/genericclioptions/printers - baseImportPath: "./vendor/k8s.io/apimachinery/" allowedImports: diff --git a/pkg/kubectl/cmd/BUILD b/pkg/kubectl/cmd/BUILD index fb3a23883c..44c1e63bc5 100644 --- a/pkg/kubectl/cmd/BUILD +++ b/pkg/kubectl/cmd/BUILD @@ -79,6 +79,7 @@ go_library( "//pkg/kubectl/cmd/util/openapi:go_default_library", "//pkg/kubectl/explain:go_default_library", "//pkg/kubectl/genericclioptions:go_default_library", + "//pkg/kubectl/genericclioptions/printers:go_default_library", "//pkg/kubectl/genericclioptions/resource:go_default_library", "//pkg/kubectl/metricsutil:go_default_library", "//pkg/kubectl/plugins:go_default_library", @@ -201,6 +202,7 @@ go_test( "//pkg/kubectl/cmd/util:go_default_library", "//pkg/kubectl/cmd/util/openapi:go_default_library", "//pkg/kubectl/genericclioptions:go_default_library", + "//pkg/kubectl/genericclioptions/printers:go_default_library", "//pkg/kubectl/genericclioptions/resource:go_default_library", "//pkg/kubectl/plugins:go_default_library", "//pkg/kubectl/polymorphichelpers:go_default_library", diff --git a/pkg/kubectl/cmd/annotate.go b/pkg/kubectl/cmd/annotate.go index 755a4d7956..608398d20f 100644 --- a/pkg/kubectl/cmd/annotate.go +++ b/pkg/kubectl/cmd/annotate.go @@ -35,15 +35,15 @@ import ( "k8s.io/kubernetes/pkg/kubectl/cmd/templates" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/genericclioptions" + "k8s.io/kubernetes/pkg/kubectl/genericclioptions/printers" "k8s.io/kubernetes/pkg/kubectl/genericclioptions/resource" "k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/util/i18n" - "k8s.io/kubernetes/pkg/printers" ) // AnnotateOptions have the data required to perform the annotate operation type AnnotateOptions struct { - PrintFlags *printers.PrintFlags + PrintFlags *genericclioptions.PrintFlags PrintObj printers.ResourcePrinterFunc // Filename options @@ -111,7 +111,7 @@ var ( func NewAnnotateOptions(ioStreams genericclioptions.IOStreams) *AnnotateOptions { return &AnnotateOptions{ - PrintFlags: printers.NewPrintFlags("annotated").WithTypeSetter(scheme.Scheme), + PrintFlags: genericclioptions.NewPrintFlags("annotated").WithTypeSetter(scheme.Scheme), RecordFlags: genericclioptions.NewRecordFlags(), Recorder: genericclioptions.NoopRecorder{}, diff --git a/pkg/kubectl/cmd/apply.go b/pkg/kubectl/cmd/apply.go index e93caf5372..bf112f3db3 100644 --- a/pkg/kubectl/cmd/apply.go +++ b/pkg/kubectl/cmd/apply.go @@ -49,19 +49,19 @@ import ( cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/cmd/util/openapi" "k8s.io/kubernetes/pkg/kubectl/genericclioptions" + "k8s.io/kubernetes/pkg/kubectl/genericclioptions/printers" "k8s.io/kubernetes/pkg/kubectl/genericclioptions/resource" "k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/util/i18n" "k8s.io/kubernetes/pkg/kubectl/validation" - "k8s.io/kubernetes/pkg/printers" ) type ApplyOptions struct { RecordFlags *genericclioptions.RecordFlags Recorder genericclioptions.Recorder - PrintFlags *printers.PrintFlags - ToPrinter func(string) (printers.ResourcePrinterFunc, error) + PrintFlags *genericclioptions.PrintFlags + ToPrinter func(string) (printers.ResourcePrinter, error) DeleteFlags *DeleteFlags DeleteOptions *DeleteOptions @@ -131,7 +131,7 @@ func NewApplyOptions(ioStreams genericclioptions.IOStreams) *ApplyOptions { return &ApplyOptions{ RecordFlags: genericclioptions.NewRecordFlags(), DeleteFlags: NewDeleteFlags("that contains the configuration to apply"), - PrintFlags: printers.NewPrintFlags("created").WithTypeSetter(scheme.Scheme), + PrintFlags: genericclioptions.NewPrintFlags("created").WithTypeSetter(scheme.Scheme), Overwrite: true, OpenApiPatch: true, @@ -191,17 +191,13 @@ func (o *ApplyOptions) Complete(f cmdutil.Factory, cmd *cobra.Command) error { o.DryRun = cmdutil.GetDryRunFlag(cmd) // allow for a success message operation to be specified at print time - o.ToPrinter = func(operation string) (printers.ResourcePrinterFunc, error) { + o.ToPrinter = func(operation string) (printers.ResourcePrinter, error) { o.PrintFlags.NamePrintFlags.Operation = operation if o.DryRun { o.PrintFlags.Complete("%s (dry run)") } - printer, err := o.PrintFlags.ToPrinter() - if err != nil { - return nil, err - } - return printer.PrintObj, nil + return o.PrintFlags.ToPrinter() } var err error @@ -592,7 +588,7 @@ type pruner struct { scaler scaleclient.ScalesGetter - toPrinter func(string) (printers.ResourcePrinterFunc, error) + toPrinter func(string) (printers.ResourcePrinter, error) out io.Writer } diff --git a/pkg/kubectl/cmd/apply_set_last_applied.go b/pkg/kubectl/cmd/apply_set_last_applied.go index c6643af2da..8b39bfd2b6 100644 --- a/pkg/kubectl/cmd/apply_set_last_applied.go +++ b/pkg/kubectl/cmd/apply_set_last_applied.go @@ -31,16 +31,16 @@ import ( cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/cmd/util/editor" "k8s.io/kubernetes/pkg/kubectl/genericclioptions" + "k8s.io/kubernetes/pkg/kubectl/genericclioptions/printers" "k8s.io/kubernetes/pkg/kubectl/genericclioptions/resource" "k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/util/i18n" - "k8s.io/kubernetes/pkg/printers" ) type SetLastAppliedOptions struct { CreateAnnotation bool - PrintFlags *printers.PrintFlags + PrintFlags *genericclioptions.PrintFlags PrintObj printers.ResourcePrinterFunc FilenameOptions resource.FilenameOptions @@ -83,7 +83,7 @@ var ( func NewSetLastAppliedOptions(ioStreams genericclioptions.IOStreams) *SetLastAppliedOptions { return &SetLastAppliedOptions{ - PrintFlags: printers.NewPrintFlags("configured").WithTypeSetter(scheme.Scheme), + PrintFlags: genericclioptions.NewPrintFlags("configured").WithTypeSetter(scheme.Scheme), IOStreams: ioStreams, } } diff --git a/pkg/kubectl/cmd/auth/BUILD b/pkg/kubectl/cmd/auth/BUILD index a56b7c5c59..7ab08d3d16 100644 --- a/pkg/kubectl/cmd/auth/BUILD +++ b/pkg/kubectl/cmd/auth/BUILD @@ -25,9 +25,9 @@ go_library( "//pkg/kubectl/cmd/templates:go_default_library", "//pkg/kubectl/cmd/util:go_default_library", "//pkg/kubectl/genericclioptions:go_default_library", + "//pkg/kubectl/genericclioptions/printers:go_default_library", "//pkg/kubectl/genericclioptions/resource:go_default_library", "//pkg/kubectl/scheme:go_default_library", - "//pkg/printers:go_default_library", "//pkg/registry/rbac/reconciliation:go_default_library", "//vendor/github.com/golang/glog:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library", diff --git a/pkg/kubectl/cmd/auth/reconcile.go b/pkg/kubectl/cmd/auth/reconcile.go index fd82e2ccdc..2b189637f9 100644 --- a/pkg/kubectl/cmd/auth/reconcile.go +++ b/pkg/kubectl/cmd/auth/reconcile.go @@ -29,16 +29,16 @@ import ( "k8s.io/kubernetes/pkg/kubectl/cmd/templates" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/genericclioptions" + "k8s.io/kubernetes/pkg/kubectl/genericclioptions/printers" "k8s.io/kubernetes/pkg/kubectl/genericclioptions/resource" "k8s.io/kubernetes/pkg/kubectl/scheme" - "k8s.io/kubernetes/pkg/printers" "k8s.io/kubernetes/pkg/registry/rbac/reconciliation" ) // ReconcileOptions is the start of the data required to perform the operation. As new fields are added, add them here instead of // referencing the cmd.Flags() type ReconcileOptions struct { - PrintFlags *printers.PrintFlags + PrintFlags *genericclioptions.PrintFlags FilenameOptions *resource.FilenameOptions Visitor resource.Visitor @@ -64,7 +64,7 @@ var ( func NewReconcileOptions(ioStreams genericclioptions.IOStreams) *ReconcileOptions { return &ReconcileOptions{ FilenameOptions: &resource.FilenameOptions{}, - PrintFlags: printers.NewPrintFlags("reconciled").WithTypeSetter(scheme.Scheme), + PrintFlags: genericclioptions.NewPrintFlags("reconciled").WithTypeSetter(scheme.Scheme), IOStreams: ioStreams, } } diff --git a/pkg/kubectl/cmd/autoscale.go b/pkg/kubectl/cmd/autoscale.go index e9c0708ca5..eb0054dfbf 100644 --- a/pkg/kubectl/cmd/autoscale.go +++ b/pkg/kubectl/cmd/autoscale.go @@ -31,10 +31,10 @@ import ( "k8s.io/kubernetes/pkg/kubectl/cmd/templates" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/genericclioptions" + "k8s.io/kubernetes/pkg/kubectl/genericclioptions/printers" "k8s.io/kubernetes/pkg/kubectl/genericclioptions/resource" "k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/util/i18n" - "k8s.io/kubernetes/pkg/printers" ) var ( @@ -58,8 +58,8 @@ type AutoscaleOptions struct { RecordFlags *genericclioptions.RecordFlags Recorder genericclioptions.Recorder - PrintFlags *printers.PrintFlags - ToPrinter func(string) (printers.ResourcePrinterFunc, error) + PrintFlags *genericclioptions.PrintFlags + ToPrinter func(string) (printers.ResourcePrinter, error) Name string Generator string @@ -83,7 +83,7 @@ type AutoscaleOptions struct { func NewAutoscaleOptions(ioStreams genericclioptions.IOStreams) *AutoscaleOptions { return &AutoscaleOptions{ - PrintFlags: printers.NewPrintFlags("autoscaled").WithTypeSetter(scheme.Scheme), + PrintFlags: genericclioptions.NewPrintFlags("autoscaled").WithTypeSetter(scheme.Scheme), FilenameOptions: &resource.FilenameOptions{}, RecordFlags: genericclioptions.NewRecordFlags(), Recorder: genericclioptions.NoopRecorder{}, @@ -170,18 +170,13 @@ func (o *AutoscaleOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args return err } - o.ToPrinter = func(operation string) (printers.ResourcePrinterFunc, error) { + o.ToPrinter = func(operation string) (printers.ResourcePrinter, error) { o.PrintFlags.NamePrintFlags.Operation = operation if o.dryRun { o.PrintFlags.Complete("%s (dry run)") } - printer, err := o.PrintFlags.ToPrinter() - if err != nil { - return nil, err - } - - return printer.PrintObj, nil + return o.PrintFlags.ToPrinter() } return nil diff --git a/pkg/kubectl/cmd/certificates.go b/pkg/kubectl/cmd/certificates.go index 08648ee850..36c0ff6935 100644 --- a/pkg/kubectl/cmd/certificates.go +++ b/pkg/kubectl/cmd/certificates.go @@ -29,10 +29,10 @@ import ( "k8s.io/kubernetes/pkg/kubectl/cmd/templates" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/genericclioptions" + "k8s.io/kubernetes/pkg/kubectl/genericclioptions/printers" "k8s.io/kubernetes/pkg/kubectl/genericclioptions/resource" "k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/util/i18n" - "k8s.io/kubernetes/pkg/printers" "github.com/spf13/cobra" ) @@ -57,7 +57,7 @@ func NewCmdCertificate(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) type CertificateOptions struct { resource.FilenameOptions - PrintFlags *printers.PrintFlags + PrintFlags *genericclioptions.PrintFlags PrintObj printers.ResourcePrinterFunc csrNames []string @@ -100,7 +100,7 @@ func (o *CertificateOptions) Validate() error { func NewCmdCertificateApprove(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *cobra.Command { options := CertificateOptions{ - PrintFlags: printers.NewPrintFlags("approved").WithTypeSetter(scheme.Scheme), + PrintFlags: genericclioptions.NewPrintFlags("approved").WithTypeSetter(scheme.Scheme), IOStreams: ioStreams, } cmd := &cobra.Command{ @@ -157,7 +157,7 @@ func (o *CertificateOptions) RunCertificateApprove(force bool) error { func NewCmdCertificateDeny(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *cobra.Command { options := CertificateOptions{ - PrintFlags: printers.NewPrintFlags("denied").WithTypeSetter(scheme.Scheme), + PrintFlags: genericclioptions.NewPrintFlags("denied").WithTypeSetter(scheme.Scheme), IOStreams: ioStreams, } cmd := &cobra.Command{ diff --git a/pkg/kubectl/cmd/clusterinfo_dump.go b/pkg/kubectl/cmd/clusterinfo_dump.go index 11efb49fd9..0c3af8d497 100644 --- a/pkg/kubectl/cmd/clusterinfo_dump.go +++ b/pkg/kubectl/cmd/clusterinfo_dump.go @@ -31,14 +31,14 @@ import ( "k8s.io/kubernetes/pkg/kubectl/cmd/templates" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/genericclioptions" + "k8s.io/kubernetes/pkg/kubectl/genericclioptions/printers" "k8s.io/kubernetes/pkg/kubectl/polymorphichelpers" "k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/util/i18n" - "k8s.io/kubernetes/pkg/printers" ) type ClusterInfoDumpOptions struct { - PrintFlags *printers.PrintFlags + PrintFlags *genericclioptions.PrintFlags PrintObj printers.ResourcePrinterFunc OutputDir string @@ -57,7 +57,7 @@ type ClusterInfoDumpOptions struct { // NewCmdCreateSecret groups subcommands to create various types of secrets func NewCmdClusterInfoDump(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *cobra.Command { o := &ClusterInfoDumpOptions{ - PrintFlags: printers.NewPrintFlags("").WithTypeSetter(scheme.Scheme), + PrintFlags: genericclioptions.NewPrintFlags("").WithTypeSetter(scheme.Scheme), IOStreams: ioStreams, } diff --git a/pkg/kubectl/cmd/cmd_printing_test.go b/pkg/kubectl/cmd/cmd_printing_test.go index 4f0948b0d8..7c0b4d3768 100644 --- a/pkg/kubectl/cmd/cmd_printing_test.go +++ b/pkg/kubectl/cmd/cmd_printing_test.go @@ -24,6 +24,8 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" api "k8s.io/kubernetes/pkg/apis/core" + "k8s.io/kubernetes/pkg/kubectl/genericclioptions" + genericprinters "k8s.io/kubernetes/pkg/kubectl/genericclioptions/printers" "k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/printers" ) @@ -81,7 +83,7 @@ func TestIllegalPackageSourceCheckerThroughPrintFlags(t *testing.T) { } for _, tc := range testCases { - printFlags := printers.NewPrintFlags("succeeded").WithTypeSetter(scheme.Scheme) + printFlags := genericclioptions.NewPrintFlags("succeeded").WithTypeSetter(scheme.Scheme) printFlags.OutputFormat = &tc.output printer, err := printFlags.ToPrinter() @@ -97,7 +99,7 @@ func TestIllegalPackageSourceCheckerThroughPrintFlags(t *testing.T) { t.Fatalf("unexpected error %v", err) } - if !printers.IsInternalObjectError(err) { + if !genericprinters.IsInternalObjectError(err) { t.Fatalf("unexpected error - expecting internal object printer error, got %q", err) } continue @@ -143,13 +145,13 @@ func TestIllegalPackageSourceCheckerDirectlyThroughPrinters(t *testing.T) { { name: "json printer: object containing package path beginning with forbidden prefix is rejected", expectInternalObjErr: true, - printer: &printers.JSONPrinter{}, + printer: &genericprinters.JSONPrinter{}, obj: internalPod(), }, { name: "yaml printer: object containing package path beginning with forbidden prefix is rejected", expectInternalObjErr: true, - printer: &printers.YAMLPrinter{}, + printer: &genericprinters.YAMLPrinter{}, obj: internalPod(), }, { @@ -187,7 +189,7 @@ func TestIllegalPackageSourceCheckerDirectlyThroughPrinters(t *testing.T) { t.Fatalf("unexpected error %v", err) } - if !printers.IsInternalObjectError(err) { + if !genericprinters.IsInternalObjectError(err) { t.Fatalf("unexpected error - expecting internal object printer error, got %q", err) } continue diff --git a/pkg/kubectl/cmd/config/BUILD b/pkg/kubectl/cmd/config/BUILD index 494c871890..84f82ab1b4 100644 --- a/pkg/kubectl/cmd/config/BUILD +++ b/pkg/kubectl/cmd/config/BUILD @@ -33,6 +33,7 @@ go_library( "//pkg/kubectl/cmd/templates:go_default_library", "//pkg/kubectl/cmd/util:go_default_library", "//pkg/kubectl/genericclioptions:go_default_library", + "//pkg/kubectl/genericclioptions/printers:go_default_library", "//pkg/kubectl/util/i18n:go_default_library", "//pkg/printers:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library", diff --git a/pkg/kubectl/cmd/config/flags.go b/pkg/kubectl/cmd/config/flags.go index d9ed0b8bd2..cf8b00cd6a 100644 --- a/pkg/kubectl/cmd/config/flags.go +++ b/pkg/kubectl/cmd/config/flags.go @@ -20,6 +20,8 @@ import ( "github.com/spf13/cobra" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/kubernetes/pkg/kubectl/genericclioptions" + genericprinters "k8s.io/kubernetes/pkg/kubectl/genericclioptions/printers" "k8s.io/kubernetes/pkg/printers" ) @@ -27,11 +29,11 @@ import ( // used across all config commands, and provides a method // of retrieving a known printer based on flag values provided. type kubectlConfigPrintFlags struct { - JSONYamlPrintFlags *printers.JSONYamlPrintFlags - NamePrintFlags *printers.NamePrintFlags + JSONYamlPrintFlags *genericclioptions.JSONYamlPrintFlags + NamePrintFlags *genericclioptions.NamePrintFlags TemplateFlags *printers.KubeTemplatePrintFlags - TypeSetter *printers.TypeSetterPrinter + TypeSetter *genericprinters.TypeSetterPrinter OutputFormat *string } @@ -46,19 +48,19 @@ func (f *kubectlConfigPrintFlags) ToPrinter() (printers.ResourcePrinter, error) outputFormat = *f.OutputFormat } - if p, err := f.JSONYamlPrintFlags.ToPrinter(outputFormat); !printers.IsNoCompatiblePrinterError(err) { + if p, err := f.JSONYamlPrintFlags.ToPrinter(outputFormat); !genericclioptions.IsNoCompatiblePrinterError(err) { return f.TypeSetter.WrapToPrinter(p, err) } - if p, err := f.NamePrintFlags.ToPrinter(outputFormat); !printers.IsNoCompatiblePrinterError(err) { + if p, err := f.NamePrintFlags.ToPrinter(outputFormat); !genericclioptions.IsNoCompatiblePrinterError(err) { return f.TypeSetter.WrapToPrinter(p, err) } - if p, err := f.TemplateFlags.ToPrinter(outputFormat); !printers.IsNoCompatiblePrinterError(err) { + if p, err := f.TemplateFlags.ToPrinter(outputFormat); !genericclioptions.IsNoCompatiblePrinterError(err) { return f.TypeSetter.WrapToPrinter(p, err) } - return nil, printers.NoCompatiblePrinterError{Options: f} + return nil, genericclioptions.NoCompatiblePrinterError{Options: f} } func (f *kubectlConfigPrintFlags) AddFlags(cmd *cobra.Command) { @@ -83,10 +85,10 @@ func newKubeConfigPrintFlags(scheme runtime.ObjectTyper) *kubectlConfigPrintFlag return &kubectlConfigPrintFlags{ OutputFormat: &outputFormat, - JSONYamlPrintFlags: printers.NewJSONYamlPrintFlags(), - NamePrintFlags: printers.NewNamePrintFlags(""), + JSONYamlPrintFlags: genericclioptions.NewJSONYamlPrintFlags(), + NamePrintFlags: genericclioptions.NewNamePrintFlags(""), TemplateFlags: printers.NewKubeTemplatePrintFlags(), - TypeSetter: printers.NewTypeSetter(scheme), + TypeSetter: genericprinters.NewTypeSetter(scheme), } } diff --git a/pkg/kubectl/cmd/convert.go b/pkg/kubectl/cmd/convert.go index c6148c3394..ec29cdca15 100644 --- a/pkg/kubectl/cmd/convert.go +++ b/pkg/kubectl/cmd/convert.go @@ -27,9 +27,9 @@ import ( "k8s.io/kubernetes/pkg/kubectl/cmd/templates" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/genericclioptions" + "k8s.io/kubernetes/pkg/kubectl/genericclioptions/printers" "k8s.io/kubernetes/pkg/kubectl/genericclioptions/resource" "k8s.io/kubernetes/pkg/kubectl/util/i18n" - "k8s.io/kubernetes/pkg/printers" "github.com/golang/glog" "github.com/spf13/cobra" @@ -89,7 +89,7 @@ func NewCmdConvert(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *co // ConvertOptions have the data required to perform the convert operation type ConvertOptions struct { - PrintFlags *printers.PrintFlags + PrintFlags *genericclioptions.PrintFlags PrintObj printers.ResourcePrinterFunc resource.FilenameOptions @@ -103,7 +103,7 @@ type ConvertOptions struct { func NewConvertOptions(ioStreams genericclioptions.IOStreams) *ConvertOptions { return &ConvertOptions{ - PrintFlags: printers.NewPrintFlags("converted").WithTypeSetter(scheme.Scheme).WithDefaultOutput("yaml"), + PrintFlags: genericclioptions.NewPrintFlags("converted").WithTypeSetter(scheme.Scheme).WithDefaultOutput("yaml"), local: true, IOStreams: ioStreams, } diff --git a/pkg/kubectl/cmd/create/BUILD b/pkg/kubectl/cmd/create/BUILD index 131dc94981..964ae18910 100644 --- a/pkg/kubectl/cmd/create/BUILD +++ b/pkg/kubectl/cmd/create/BUILD @@ -29,6 +29,7 @@ go_library( "//pkg/kubectl/cmd/util:go_default_library", "//pkg/kubectl/cmd/util/editor:go_default_library", "//pkg/kubectl/genericclioptions:go_default_library", + "//pkg/kubectl/genericclioptions/printers:go_default_library", "//pkg/kubectl/genericclioptions/resource:go_default_library", "//pkg/kubectl/scheme:go_default_library", "//pkg/kubectl/util/i18n:go_default_library", diff --git a/pkg/kubectl/cmd/create/flags.go b/pkg/kubectl/cmd/create/flags.go index f0ee0c608f..7c7540c9bd 100644 --- a/pkg/kubectl/cmd/create/flags.go +++ b/pkg/kubectl/cmd/create/flags.go @@ -18,8 +18,10 @@ package create import ( "github.com/spf13/cobra" + "k8s.io/kubernetes/pkg/kubectl/genericclioptions" "k8s.io/apimachinery/pkg/runtime" + genericprinters "k8s.io/kubernetes/pkg/kubectl/genericclioptions/printers" "k8s.io/kubernetes/pkg/printers" ) @@ -27,11 +29,11 @@ import ( // used across all create commands, and provides a method // of retrieving a known printer based on flag values provided. type PrintFlags struct { - JSONYamlPrintFlags *printers.JSONYamlPrintFlags - NamePrintFlags *printers.NamePrintFlags + JSONYamlPrintFlags *genericclioptions.JSONYamlPrintFlags + NamePrintFlags *genericclioptions.NamePrintFlags TemplateFlags *printers.KubeTemplatePrintFlags - TypeSetter *printers.TypeSetterPrinter + TypeSetter *genericprinters.TypeSetterPrinter OutputFormat *string } @@ -46,19 +48,19 @@ func (f *PrintFlags) ToPrinter() (printers.ResourcePrinter, error) { outputFormat = *f.OutputFormat } - if p, err := f.JSONYamlPrintFlags.ToPrinter(outputFormat); !printers.IsNoCompatiblePrinterError(err) { + if p, err := f.JSONYamlPrintFlags.ToPrinter(outputFormat); !genericclioptions.IsNoCompatiblePrinterError(err) { return f.TypeSetter.WrapToPrinter(p, err) } - if p, err := f.NamePrintFlags.ToPrinter(outputFormat); !printers.IsNoCompatiblePrinterError(err) { + if p, err := f.NamePrintFlags.ToPrinter(outputFormat); !genericclioptions.IsNoCompatiblePrinterError(err) { return f.TypeSetter.WrapToPrinter(p, err) } - if p, err := f.TemplateFlags.ToPrinter(outputFormat); !printers.IsNoCompatiblePrinterError(err) { + if p, err := f.TemplateFlags.ToPrinter(outputFormat); !genericclioptions.IsNoCompatiblePrinterError(err) { return f.TypeSetter.WrapToPrinter(p, err) } - return nil, printers.NoCompatiblePrinterError{Options: f} + return nil, genericclioptions.NoCompatiblePrinterError{Options: f} } func (f *PrintFlags) AddFlags(cmd *cobra.Command) { @@ -77,10 +79,10 @@ func NewPrintFlags(operation string, scheme runtime.ObjectTyper) *PrintFlags { return &PrintFlags{ OutputFormat: &outputFormat, - JSONYamlPrintFlags: printers.NewJSONYamlPrintFlags(), - NamePrintFlags: printers.NewNamePrintFlags(operation), + JSONYamlPrintFlags: genericclioptions.NewJSONYamlPrintFlags(), + NamePrintFlags: genericclioptions.NewNamePrintFlags(operation), TemplateFlags: printers.NewKubeTemplatePrintFlags(), - TypeSetter: printers.NewTypeSetter(scheme), + TypeSetter: genericprinters.NewTypeSetter(scheme), } } diff --git a/pkg/kubectl/cmd/drain.go b/pkg/kubectl/cmd/drain.go index e895bf4dfe..60c3442a48 100644 --- a/pkg/kubectl/cmd/drain.go +++ b/pkg/kubectl/cmd/drain.go @@ -40,21 +40,21 @@ import ( "k8s.io/apimachinery/pkg/util/wait" "k8s.io/client-go/kubernetes" restclient "k8s.io/client-go/rest" - "k8s.io/kubernetes/pkg/kubectl/genericclioptions" - "k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/kubernetes/pkg/api/legacyscheme" "k8s.io/kubernetes/pkg/kubectl" "k8s.io/kubernetes/pkg/kubectl/cmd/templates" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" + "k8s.io/kubernetes/pkg/kubectl/genericclioptions" + "k8s.io/kubernetes/pkg/kubectl/genericclioptions/printers" "k8s.io/kubernetes/pkg/kubectl/genericclioptions/resource" + "k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/util/i18n" - "k8s.io/kubernetes/pkg/printers" ) type DrainOptions struct { - PrintFlags *printers.PrintFlags + PrintFlags *genericclioptions.PrintFlags ToPrinter func(string) (printers.ResourcePrinterFunc, error) Namespace string @@ -108,7 +108,7 @@ var ( func NewCmdCordon(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *cobra.Command { options := &DrainOptions{ - PrintFlags: printers.NewPrintFlags("cordoned").WithTypeSetter(scheme.Scheme), + PrintFlags: genericclioptions.NewPrintFlags("cordoned").WithTypeSetter(scheme.Scheme), IOStreams: ioStreams, } @@ -140,7 +140,7 @@ var ( func NewCmdUncordon(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *cobra.Command { options := &DrainOptions{ - PrintFlags: printers.NewPrintFlags("uncordoned").WithTypeSetter(scheme.Scheme), + PrintFlags: genericclioptions.NewPrintFlags("uncordoned").WithTypeSetter(scheme.Scheme), IOStreams: ioStreams, } @@ -196,7 +196,7 @@ var ( func NewDrainOptions(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *DrainOptions { return &DrainOptions{ - PrintFlags: printers.NewPrintFlags("drained").WithTypeSetter(scheme.Scheme), + PrintFlags: genericclioptions.NewPrintFlags("drained").WithTypeSetter(scheme.Scheme), IOStreams: ioStreams, backOff: clockwork.NewRealClock(), @@ -279,6 +279,7 @@ func (o *DrainOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []st if err != nil { return nil, err } + return printer.PrintObj, nil } @@ -319,7 +320,7 @@ func (o *DrainOptions) RunDrain() error { return err } - printer, err := o.ToPrinter("drained") + printObj, err := o.ToPrinter("drained") if err != nil { return err } @@ -334,7 +335,7 @@ func (o *DrainOptions) RunDrain() error { } if err == nil || o.DryRun { drainedNodes.Insert(info.Name) - printer.PrintObj(info.Object, o.Out) + printObj(info.Object, o.Out) } else { fmt.Fprintf(o.ErrOut, "error: unable to drain node %q, aborting command...\n\n", info.Name) remainingNodes := []string{} @@ -650,7 +651,7 @@ func (o *DrainOptions) waitForDelete(pods []corev1.Pod, interval, timeout time.D } else { verbStr = "deleted" } - printer, err := o.ToPrinter(verbStr) + printObj, err := o.ToPrinter(verbStr) if err != nil { return pods, err } @@ -660,7 +661,7 @@ func (o *DrainOptions) waitForDelete(pods []corev1.Pod, interval, timeout time.D for i, pod := range pods { p, err := getPodFn(pod.Namespace, pod.Name) if apierrors.IsNotFound(err) || (p != nil && p.ObjectMeta.UID != pod.ObjectMeta.UID) { - printer.PrintObj(&pod, o.Out) + printObj(&pod, o.Out) continue } else if err != nil { return false, err @@ -736,12 +737,12 @@ func (o *DrainOptions) RunCordonOrUncordon(desired bool) error { } unsched := node.Spec.Unschedulable if unsched == desired { - printer, err := o.ToPrinter(already(desired)) + printObj, err := o.ToPrinter(already(desired)) if err != nil { fmt.Printf("error: %v", err) continue } - printer.PrintObj(cmdutil.AsDefaultVersionedOrOriginal(nodeInfo.Object, nodeInfo.Mapping), o.Out) + printObj(cmdutil.AsDefaultVersionedOrOriginal(nodeInfo.Object, nodeInfo.Mapping), o.Out) } else { if !o.DryRun { helper := resource.NewHelper(o.restClient, nodeInfo.Mapping) @@ -762,20 +763,20 @@ func (o *DrainOptions) RunCordonOrUncordon(desired bool) error { continue } } - printer, err := o.ToPrinter(changed(desired)) + printObj, err := o.ToPrinter(changed(desired)) if err != nil { fmt.Fprintf(o.ErrOut, "%v", err) continue } - printer.PrintObj(cmdutil.AsDefaultVersionedOrOriginal(nodeInfo.Object, nodeInfo.Mapping), o.Out) + printObj(cmdutil.AsDefaultVersionedOrOriginal(nodeInfo.Object, nodeInfo.Mapping), o.Out) } } else { - printer, err := o.ToPrinter("skipped") + printObj, err := o.ToPrinter("skipped") if err != nil { fmt.Fprintf(o.ErrOut, "%v", err) continue } - printer.PrintObj(cmdutil.AsDefaultVersionedOrOriginal(nodeInfo.Object, nodeInfo.Mapping), o.Out) + printObj(cmdutil.AsDefaultVersionedOrOriginal(nodeInfo.Object, nodeInfo.Mapping), o.Out) } } diff --git a/pkg/kubectl/cmd/drain_test.go b/pkg/kubectl/cmd/drain_test.go index 80bf4cb10f..6b602ed87e 100644 --- a/pkg/kubectl/cmd/drain_test.go +++ b/pkg/kubectl/cmd/drain_test.go @@ -50,8 +50,8 @@ import ( "k8s.io/kubernetes/pkg/apis/extensions" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" + "k8s.io/kubernetes/pkg/kubectl/genericclioptions/printers" "k8s.io/kubernetes/pkg/kubectl/scheme" - "k8s.io/kubernetes/pkg/printers" ) const ( @@ -834,7 +834,7 @@ func TestDeletePods(t *testing.T) { defer tf.Cleanup() o := DrainOptions{ - PrintFlags: printers.NewPrintFlags("drained").WithTypeSetter(scheme.Scheme), + PrintFlags: genericclioptions.NewPrintFlags("drained").WithTypeSetter(scheme.Scheme), } o.Out = os.Stdout diff --git a/pkg/kubectl/cmd/expose.go b/pkg/kubectl/cmd/expose.go index b35ceba428..cae2a6e208 100644 --- a/pkg/kubectl/cmd/expose.go +++ b/pkg/kubectl/cmd/expose.go @@ -35,10 +35,10 @@ import ( "k8s.io/kubernetes/pkg/kubectl/cmd/templates" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/genericclioptions" + "k8s.io/kubernetes/pkg/kubectl/genericclioptions/printers" "k8s.io/kubernetes/pkg/kubectl/genericclioptions/resource" "k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/util/i18n" - "k8s.io/kubernetes/pkg/printers" ) var ( @@ -84,7 +84,7 @@ var ( type ExposeServiceOptions struct { FilenameOptions resource.FilenameOptions RecordFlags *genericclioptions.RecordFlags - PrintFlags *printers.PrintFlags + PrintFlags *genericclioptions.PrintFlags PrintObj printers.ResourcePrinterFunc DryRun bool @@ -111,7 +111,7 @@ type ExposeServiceOptions struct { func NewExposeServiceOptions(ioStreams genericclioptions.IOStreams) *ExposeServiceOptions { return &ExposeServiceOptions{ RecordFlags: genericclioptions.NewRecordFlags(), - PrintFlags: printers.NewPrintFlags("exposed").WithTypeSetter(scheme.Scheme), + PrintFlags: genericclioptions.NewPrintFlags("exposed").WithTypeSetter(scheme.Scheme), Recorder: genericclioptions.NoopRecorder{}, IOStreams: ioStreams, diff --git a/pkg/kubectl/cmd/get/BUILD b/pkg/kubectl/cmd/get/BUILD index db904110bd..37aded20c5 100644 --- a/pkg/kubectl/cmd/get/BUILD +++ b/pkg/kubectl/cmd/get/BUILD @@ -77,7 +77,6 @@ go_test( "//pkg/kubectl/genericclioptions:go_default_library", "//pkg/kubectl/genericclioptions/resource:go_default_library", "//pkg/kubectl/scheme:go_default_library", - "//pkg/printers:go_default_library", "//vendor/k8s.io/api/core/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library", diff --git a/pkg/kubectl/cmd/get/get.go b/pkg/kubectl/cmd/get/get.go index 2e18dd16e6..40bebe837f 100644 --- a/pkg/kubectl/cmd/get/get.go +++ b/pkg/kubectl/cmd/get/get.go @@ -133,7 +133,7 @@ const ( // NewGetOptions returns a GetOptions with default chunk size 500. func NewGetOptions(parent string, streams genericclioptions.IOStreams) *GetOptions { return &GetOptions{ - PrintFlags: NewGetPrintFlags(legacyscheme.Scheme), + PrintFlags: NewGetPrintFlags(), CmdParent: parent, IOStreams: streams, diff --git a/pkg/kubectl/cmd/get/get_flags.go b/pkg/kubectl/cmd/get/get_flags.go index 3a7f828b80..4540100b12 100644 --- a/pkg/kubectl/cmd/get/get_flags.go +++ b/pkg/kubectl/cmd/get/get_flags.go @@ -22,17 +22,17 @@ import ( "github.com/spf13/cobra" "k8s.io/apimachinery/pkg/api/meta" - "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/kubernetes/pkg/kubectl/cmd/util/openapi" + "k8s.io/kubernetes/pkg/kubectl/genericclioptions" "k8s.io/kubernetes/pkg/printers" ) // PrintFlags composes common printer flag structs // used in the Get command. type PrintFlags struct { - JSONYamlPrintFlags *printers.JSONYamlPrintFlags - NamePrintFlags *printers.NamePrintFlags + JSONYamlPrintFlags *genericclioptions.JSONYamlPrintFlags + NamePrintFlags *genericclioptions.NamePrintFlags TemplateFlags *printers.KubeTemplatePrintFlags CustomColumnsFlags *printers.CustomColumnsPrintFlags HumanReadableFlags *HumanPrintFlags @@ -107,27 +107,27 @@ func (f *PrintFlags) ToPrinter() (printers.ResourcePrinter, error) { f.CustomColumnsFlags.TemplateArgument = *f.TemplateFlags.TemplateArgument } - if p, err := f.JSONYamlPrintFlags.ToPrinter(outputFormat); !printers.IsNoCompatiblePrinterError(err) { + if p, err := f.JSONYamlPrintFlags.ToPrinter(outputFormat); !genericclioptions.IsNoCompatiblePrinterError(err) { return p, err } - if p, err := f.HumanReadableFlags.ToPrinter(outputFormat); !printers.IsNoCompatiblePrinterError(err) { + if p, err := f.HumanReadableFlags.ToPrinter(outputFormat); !genericclioptions.IsNoCompatiblePrinterError(err) { return p, err } - if p, err := f.TemplateFlags.ToPrinter(outputFormat); !printers.IsNoCompatiblePrinterError(err) { + if p, err := f.TemplateFlags.ToPrinter(outputFormat); !genericclioptions.IsNoCompatiblePrinterError(err) { return p, err } - if p, err := f.CustomColumnsFlags.ToPrinter(outputFormat); !printers.IsNoCompatiblePrinterError(err) { + if p, err := f.CustomColumnsFlags.ToPrinter(outputFormat); !genericclioptions.IsNoCompatiblePrinterError(err) { return p, err } - if p, err := f.NamePrintFlags.ToPrinter(outputFormat); !printers.IsNoCompatiblePrinterError(err) { + if p, err := f.NamePrintFlags.ToPrinter(outputFormat); !genericclioptions.IsNoCompatiblePrinterError(err) { return p, err } - return nil, printers.NoCompatiblePrinterError{Options: f} + return nil, genericclioptions.NoCompatiblePrinterError{Options: f} } // AddFlags receives a *cobra.Command reference and binds @@ -153,7 +153,7 @@ func (f *PrintFlags) AddFlags(cmd *cobra.Command) { // NewGetPrintFlags returns flags associated with humanreadable, // template, and "name" printing, with default values set. -func NewGetPrintFlags(scheme runtime.ObjectConvertor) *PrintFlags { +func NewGetPrintFlags() *PrintFlags { outputFormat := "" noHeaders := false @@ -161,9 +161,10 @@ func NewGetPrintFlags(scheme runtime.ObjectConvertor) *PrintFlags { OutputFormat: &outputFormat, NoHeaders: &noHeaders, - JSONYamlPrintFlags: printers.NewJSONYamlPrintFlags(), - NamePrintFlags: printers.NewNamePrintFlags(""), + JSONYamlPrintFlags: genericclioptions.NewJSONYamlPrintFlags(), + NamePrintFlags: genericclioptions.NewNamePrintFlags(""), TemplateFlags: printers.NewKubeTemplatePrintFlags(), + HumanReadableFlags: NewHumanPrintFlags(), CustomColumnsFlags: printers.NewCustomColumnsPrintFlags(), } diff --git a/pkg/kubectl/cmd/get/humanreadable_flags.go b/pkg/kubectl/cmd/get/humanreadable_flags.go index d04bf826d9..5a185b8452 100644 --- a/pkg/kubectl/cmd/get/humanreadable_flags.go +++ b/pkg/kubectl/cmd/get/humanreadable_flags.go @@ -18,6 +18,7 @@ package get import ( "github.com/spf13/cobra" + "k8s.io/kubernetes/pkg/kubectl/genericclioptions" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/kubernetes/pkg/kubectl/scheme" @@ -63,7 +64,7 @@ func (f *HumanPrintFlags) EnsureWithNamespace() error { // handling human-readable output. func (f *HumanPrintFlags) ToPrinter(outputFormat string) (printers.ResourcePrinter, error) { if len(outputFormat) > 0 && outputFormat != "wide" { - return nil, printers.NoCompatiblePrinterError{Options: f} + return nil, genericclioptions.NoCompatiblePrinterError{Options: f} } decoder := scheme.Codecs.UniversalDecoder() diff --git a/pkg/kubectl/cmd/get/humanreadable_flags_test.go b/pkg/kubectl/cmd/get/humanreadable_flags_test.go index a9d03d7e3a..e628222954 100644 --- a/pkg/kubectl/cmd/get/humanreadable_flags_test.go +++ b/pkg/kubectl/cmd/get/humanreadable_flags_test.go @@ -25,7 +25,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime/schema" api "k8s.io/kubernetes/pkg/apis/core" - "k8s.io/kubernetes/pkg/printers" + "k8s.io/kubernetes/pkg/kubectl/genericclioptions" ) func TestHumanReadablePrinterSupportsExpectedOptions(t *testing.T) { @@ -119,12 +119,12 @@ func TestHumanReadablePrinterSupportsExpectedOptions(t *testing.T) { p, err := printFlags.ToPrinter(tc.outputFormat) if tc.expectNoMatch { - if !printers.IsNoCompatiblePrinterError(err) { + if !genericclioptions.IsNoCompatiblePrinterError(err) { t.Fatalf("expected no printer matches for output format %q", tc.outputFormat) } return } - if printers.IsNoCompatiblePrinterError(err) { + if genericclioptions.IsNoCompatiblePrinterError(err) { t.Fatalf("expected to match template printer for output format %q", tc.outputFormat) } diff --git a/pkg/kubectl/cmd/label.go b/pkg/kubectl/cmd/label.go index 383c1696f4..58de43af8c 100644 --- a/pkg/kubectl/cmd/label.go +++ b/pkg/kubectl/cmd/label.go @@ -37,10 +37,10 @@ import ( "k8s.io/kubernetes/pkg/kubectl/cmd/templates" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/genericclioptions" + "k8s.io/kubernetes/pkg/kubectl/genericclioptions/printers" "k8s.io/kubernetes/pkg/kubectl/genericclioptions/resource" "k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/util/i18n" - "k8s.io/kubernetes/pkg/printers" ) // LabelOptions have the data required to perform the label operation @@ -49,8 +49,8 @@ type LabelOptions struct { resource.FilenameOptions RecordFlags *genericclioptions.RecordFlags - PrintFlags *printers.PrintFlags - ToPrinter func(string) (printers.ResourcePrinterFunc, error) + PrintFlags *genericclioptions.PrintFlags + ToPrinter func(string) (printers.ResourcePrinter, error) // Common user flags overwrite bool @@ -115,7 +115,7 @@ func NewLabelOptions(ioStreams genericclioptions.IOStreams) *LabelOptions { RecordFlags: genericclioptions.NewRecordFlags(), Recorder: genericclioptions.NoopRecorder{}, - PrintFlags: printers.NewPrintFlags("labeled").WithTypeSetter(scheme.Scheme), + PrintFlags: genericclioptions.NewPrintFlags("labeled").WithTypeSetter(scheme.Scheme), IOStreams: ioStreams, } @@ -168,17 +168,13 @@ func (o *LabelOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []st o.outputFormat = cmdutil.GetFlagString(cmd, "output") o.dryrun = cmdutil.GetDryRunFlag(cmd) - o.ToPrinter = func(operation string) (printers.ResourcePrinterFunc, error) { + o.ToPrinter = func(operation string) (printers.ResourcePrinter, error) { o.PrintFlags.NamePrintFlags.Operation = operation if o.dryrun { o.PrintFlags.Complete("%s (dry run)") } - printer, err := o.PrintFlags.ToPrinter() - if err != nil { - return nil, err - } - return printer.PrintObj, nil + return o.PrintFlags.ToPrinter() } resources, labelArgs, err := cmdutil.GetResourcesAndPairs(args, "label") diff --git a/pkg/kubectl/cmd/patch.go b/pkg/kubectl/cmd/patch.go index c75e889749..e5b3fc3d9b 100644 --- a/pkg/kubectl/cmd/patch.go +++ b/pkg/kubectl/cmd/patch.go @@ -36,10 +36,10 @@ import ( "k8s.io/kubernetes/pkg/kubectl/cmd/templates" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/genericclioptions" + "k8s.io/kubernetes/pkg/kubectl/genericclioptions/printers" "k8s.io/kubernetes/pkg/kubectl/genericclioptions/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} @@ -50,8 +50,8 @@ type PatchOptions struct { resource.FilenameOptions RecordFlags *genericclioptions.RecordFlags - PrintFlags *printers.PrintFlags - ToPrinter func(string) (printers.ResourcePrinterFunc, error) + PrintFlags *genericclioptions.PrintFlags + ToPrinter func(string) (printers.ResourcePrinter, error) Recorder genericclioptions.Recorder Local bool @@ -98,7 +98,7 @@ func NewPatchOptions(ioStreams genericclioptions.IOStreams) *PatchOptions { return &PatchOptions{ RecordFlags: genericclioptions.NewRecordFlags(), Recorder: genericclioptions.NoopRecorder{}, - PrintFlags: printers.NewPrintFlags("patched").WithTypeSetter(scheme.Scheme), + PrintFlags: genericclioptions.NewPrintFlags("patched").WithTypeSetter(scheme.Scheme), IOStreams: ioStreams, } } @@ -143,17 +143,13 @@ func (o *PatchOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []st o.outputFormat = cmdutil.GetFlagString(cmd, "output") o.dryRun = cmdutil.GetFlagBool(cmd, "dry-run") - o.ToPrinter = func(operation string) (printers.ResourcePrinterFunc, error) { + o.ToPrinter = func(operation string) (printers.ResourcePrinter, error) { o.PrintFlags.NamePrintFlags.Operation = operation if o.dryRun { o.PrintFlags.Complete("%s (dry run)") } - printer, err := o.PrintFlags.ToPrinter() - if err != nil { - return nil, err - } - return printer.PrintObj, nil + return o.PrintFlags.ToPrinter() } o.namespace, o.enforceNamespace, err = f.DefaultNamespace() diff --git a/pkg/kubectl/cmd/replace.go b/pkg/kubectl/cmd/replace.go index 88c689c3be..70131091f5 100644 --- a/pkg/kubectl/cmd/replace.go +++ b/pkg/kubectl/cmd/replace.go @@ -36,7 +36,6 @@ import ( "k8s.io/kubernetes/pkg/kubectl/genericclioptions/resource" "k8s.io/kubernetes/pkg/kubectl/util/i18n" "k8s.io/kubernetes/pkg/kubectl/validation" - "k8s.io/kubernetes/pkg/printers" ) var ( @@ -65,7 +64,7 @@ var ( ) type ReplaceOptions struct { - PrintFlags *printers.PrintFlags + PrintFlags *genericclioptions.PrintFlags DeleteFlags *DeleteFlags RecordFlags *genericclioptions.RecordFlags @@ -94,9 +93,9 @@ func NewReplaceOptions(streams genericclioptions.IOStreams) *ReplaceOptions { return &ReplaceOptions{ // TODO(juanvallejo): figure out why we only support the "name" outputFormat in this command // we only support "-o name" for this command, so only register the name printer - PrintFlags: &printers.PrintFlags{ + PrintFlags: &genericclioptions.PrintFlags{ OutputFormat: &outputFormat, - NamePrintFlags: printers.NewNamePrintFlags("replaced"), + NamePrintFlags: genericclioptions.NewNamePrintFlags("replaced"), }, DeleteFlags: NewDeleteFlags("to use to replace the resource."), diff --git a/pkg/kubectl/cmd/rollingupdate.go b/pkg/kubectl/cmd/rollingupdate.go index 395a912df2..24cde12b46 100644 --- a/pkg/kubectl/cmd/rollingupdate.go +++ b/pkg/kubectl/cmd/rollingupdate.go @@ -37,12 +37,12 @@ import ( "k8s.io/kubernetes/pkg/kubectl/cmd/templates" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/genericclioptions" + "k8s.io/kubernetes/pkg/kubectl/genericclioptions/printers" "k8s.io/kubernetes/pkg/kubectl/genericclioptions/resource" "k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/util" "k8s.io/kubernetes/pkg/kubectl/util/i18n" "k8s.io/kubernetes/pkg/kubectl/validation" - "k8s.io/kubernetes/pkg/printers" ) var ( @@ -107,15 +107,15 @@ type RollingUpdateOptions struct { FindNewName func(*api.ReplicationController) string - PrintFlags *printers.PrintFlags - ToPrinter func(string) (printers.ResourcePrinterFunc, error) + PrintFlags *genericclioptions.PrintFlags + ToPrinter func(string) (printers.ResourcePrinter, error) genericclioptions.IOStreams } func NewRollingUpdateOptions(streams genericclioptions.IOStreams) *RollingUpdateOptions { return &RollingUpdateOptions{ - PrintFlags: printers.NewPrintFlags("rolling updated").WithTypeSetter(scheme.Scheme), + PrintFlags: genericclioptions.NewPrintFlags("rolling updated").WithTypeSetter(scheme.Scheme), FilenameOptions: &resource.FilenameOptions{}, DeploymentKey: "deployment", Timeout: timeout, @@ -226,18 +226,13 @@ func (o *RollingUpdateOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, a o.Builder = f.NewBuilder() - o.ToPrinter = func(operation string) (printers.ResourcePrinterFunc, error) { + o.ToPrinter = func(operation string) (printers.ResourcePrinter, error) { o.PrintFlags.NamePrintFlags.Operation = operation if o.DryRun { o.PrintFlags.Complete("%s (dry run)") } - printer, err := o.PrintFlags.ToPrinter() - if err != nil { - return nil, err - } - - return printer.PrintObj, nil + return o.PrintFlags.ToPrinter() } return nil } diff --git a/pkg/kubectl/cmd/rollout/BUILD b/pkg/kubectl/cmd/rollout/BUILD index f87d5c9a1e..652bc084f7 100644 --- a/pkg/kubectl/cmd/rollout/BUILD +++ b/pkg/kubectl/cmd/rollout/BUILD @@ -25,11 +25,11 @@ go_library( "//pkg/kubectl/cmd/templates:go_default_library", "//pkg/kubectl/cmd/util:go_default_library", "//pkg/kubectl/genericclioptions:go_default_library", + "//pkg/kubectl/genericclioptions/printers:go_default_library", "//pkg/kubectl/genericclioptions/resource:go_default_library", "//pkg/kubectl/polymorphichelpers:go_default_library", "//pkg/kubectl/scheme:go_default_library", "//pkg/kubectl/util/i18n:go_default_library", - "//pkg/printers:go_default_library", "//pkg/util/interrupt:go_default_library", "//vendor/github.com/renstrom/dedent:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library", diff --git a/pkg/kubectl/cmd/rollout/rollout_pause.go b/pkg/kubectl/cmd/rollout/rollout_pause.go index 907439bd93..65888248cd 100644 --- a/pkg/kubectl/cmd/rollout/rollout_pause.go +++ b/pkg/kubectl/cmd/rollout/rollout_pause.go @@ -28,18 +28,18 @@ import ( "k8s.io/kubernetes/pkg/kubectl/cmd/templates" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/genericclioptions" + "k8s.io/kubernetes/pkg/kubectl/genericclioptions/printers" "k8s.io/kubernetes/pkg/kubectl/genericclioptions/resource" "k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/util/i18n" - "k8s.io/kubernetes/pkg/printers" ) // PauseConfig is the start of the data required to perform the operation. As new fields are added, add them here instead of // referencing the cmd.Flags() type PauseConfig struct { resource.FilenameOptions - PrintFlags *printers.PrintFlags - ToPrinter func(string) (printers.ResourcePrinterFunc, error) + PrintFlags *genericclioptions.PrintFlags + ToPrinter func(string) (printers.ResourcePrinter, error) Pauser func(info *resource.Info) ([]byte, error) Infos []*resource.Info @@ -64,7 +64,7 @@ var ( func NewCmdRolloutPause(f cmdutil.Factory, streams genericclioptions.IOStreams) *cobra.Command { o := &PauseConfig{ - PrintFlags: printers.NewPrintFlags("paused").WithTypeSetter(scheme.Scheme), + PrintFlags: genericclioptions.NewPrintFlags("paused").WithTypeSetter(scheme.Scheme), IOStreams: streams, } @@ -122,14 +122,9 @@ func (o *PauseConfig) CompletePause(f cmdutil.Factory, cmd *cobra.Command, args return err } - o.ToPrinter = func(operation string) (printers.ResourcePrinterFunc, error) { + o.ToPrinter = func(operation string) (printers.ResourcePrinter, error) { o.PrintFlags.NamePrintFlags.Operation = operation - printer, err := o.PrintFlags.ToPrinter() - if err != nil { - return nil, err - } - - return printer.PrintObj, nil + return o.PrintFlags.ToPrinter() } o.Infos, err = r.Infos() diff --git a/pkg/kubectl/cmd/rollout/rollout_resume.go b/pkg/kubectl/cmd/rollout/rollout_resume.go index 030262fa18..16dde958d8 100644 --- a/pkg/kubectl/cmd/rollout/rollout_resume.go +++ b/pkg/kubectl/cmd/rollout/rollout_resume.go @@ -28,18 +28,18 @@ import ( "k8s.io/kubernetes/pkg/kubectl/cmd/templates" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/genericclioptions" + "k8s.io/kubernetes/pkg/kubectl/genericclioptions/printers" "k8s.io/kubernetes/pkg/kubectl/genericclioptions/resource" "k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/util/i18n" - "k8s.io/kubernetes/pkg/printers" ) // ResumeConfig is the start of the data required to perform the operation. As new fields are added, add them here instead of // referencing the cmd.Flags() type ResumeConfig struct { resource.FilenameOptions - PrintFlags *printers.PrintFlags - ToPrinter func(string) (printers.ResourcePrinterFunc, error) + PrintFlags *genericclioptions.PrintFlags + ToPrinter func(string) (printers.ResourcePrinter, error) Resumer func(object *resource.Info) ([]byte, error) Infos []*resource.Info @@ -62,7 +62,7 @@ var ( func NewCmdRolloutResume(f cmdutil.Factory, streams genericclioptions.IOStreams) *cobra.Command { o := &ResumeConfig{ - PrintFlags: printers.NewPrintFlags("resumed").WithTypeSetter(scheme.Scheme), + PrintFlags: genericclioptions.NewPrintFlags("resumed").WithTypeSetter(scheme.Scheme), IOStreams: streams, } @@ -106,14 +106,9 @@ func (o *ResumeConfig) CompleteResume(f cmdutil.Factory, cmd *cobra.Command, arg return err } - o.ToPrinter = func(operation string) (printers.ResourcePrinterFunc, error) { + o.ToPrinter = func(operation string) (printers.ResourcePrinter, error) { o.PrintFlags.NamePrintFlags.Operation = operation - printer, err := o.PrintFlags.ToPrinter() - if err != nil { - return nil, err - } - - return printer.PrintObj, nil + return o.PrintFlags.ToPrinter() } r := f.NewBuilder(). diff --git a/pkg/kubectl/cmd/rollout/rollout_undo.go b/pkg/kubectl/cmd/rollout/rollout_undo.go index e78252d96f..6d5f4e28b0 100644 --- a/pkg/kubectl/cmd/rollout/rollout_undo.go +++ b/pkg/kubectl/cmd/rollout/rollout_undo.go @@ -26,10 +26,11 @@ import ( "k8s.io/kubernetes/pkg/kubectl" "k8s.io/kubernetes/pkg/kubectl/cmd/templates" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" + "k8s.io/kubernetes/pkg/kubectl/genericclioptions" + "k8s.io/kubernetes/pkg/kubectl/genericclioptions/printers" "k8s.io/kubernetes/pkg/kubectl/genericclioptions/resource" "k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/util/i18n" - "k8s.io/kubernetes/pkg/printers" ) // UndoOptions is the start of the data required to perform the operation. As new fields are added, add them here instead of @@ -37,8 +38,8 @@ import ( type UndoOptions struct { resource.FilenameOptions - PrintFlags *printers.PrintFlags - ToPrinter func(string) (printers.ResourcePrinterFunc, error) + PrintFlags *genericclioptions.PrintFlags + ToPrinter func(string) (printers.ResourcePrinter, error) Rollbackers []kubectl.Rollbacker Infos []*resource.Info @@ -65,7 +66,7 @@ var ( func NewCmdRolloutUndo(f cmdutil.Factory, out io.Writer) *cobra.Command { o := &UndoOptions{ - PrintFlags: printers.NewPrintFlags("").WithTypeSetter(scheme.Scheme), + PrintFlags: genericclioptions.NewPrintFlags("").WithTypeSetter(scheme.Scheme), ToRevision: int64(0), } @@ -112,17 +113,12 @@ func (o *UndoOptions) CompleteUndo(f cmdutil.Factory, cmd *cobra.Command, out io return err } - o.ToPrinter = func(operation string) (printers.ResourcePrinterFunc, error) { + o.ToPrinter = func(operation string) (printers.ResourcePrinter, error) { o.PrintFlags.NamePrintFlags.Operation = operation if o.DryRun { o.PrintFlags.Complete("%s (dry run)") } - printer, err := o.PrintFlags.ToPrinter() - if err != nil { - return nil, err - } - - return printer.PrintObj, nil + return o.PrintFlags.ToPrinter() } r := f.NewBuilder(). diff --git a/pkg/kubectl/cmd/run.go b/pkg/kubectl/cmd/run.go index 75b46b9f1c..e19fea9f54 100644 --- a/pkg/kubectl/cmd/run.go +++ b/pkg/kubectl/cmd/run.go @@ -20,12 +20,11 @@ import ( "fmt" "io" - "k8s.io/client-go/dynamic" - "k8s.io/kubernetes/pkg/printers" - "github.com/docker/distribution/reference" "github.com/spf13/cobra" + "k8s.io/client-go/dynamic" + "github.com/golang/glog" "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/api/meta" @@ -98,7 +97,7 @@ type RunObject struct { } type RunOptions struct { - PrintFlags *printers.PrintFlags + PrintFlags *genericclioptions.PrintFlags DeleteFlags *DeleteFlags DeleteOptions *DeleteOptions RecordFlags *genericclioptions.RecordFlags @@ -127,7 +126,7 @@ type RunOptions struct { func NewRunOptions(streams genericclioptions.IOStreams) *RunOptions { return &RunOptions{ - PrintFlags: printers.NewPrintFlags("created").WithTypeSetter(scheme.Scheme), + PrintFlags: genericclioptions.NewPrintFlags("created").WithTypeSetter(scheme.Scheme), DeleteFlags: NewDeleteFlags("to use to replace the resource."), RecordFlags: genericclioptions.NewRecordFlags(), diff --git a/pkg/kubectl/cmd/run_test.go b/pkg/kubectl/cmd/run_test.go index c41a8c9234..a628412afb 100644 --- a/pkg/kubectl/cmd/run_test.go +++ b/pkg/kubectl/cmd/run_test.go @@ -42,7 +42,6 @@ import ( "k8s.io/kubernetes/pkg/kubectl/genericclioptions" "k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/util/i18n" - "k8s.io/kubernetes/pkg/printers" ) // This init should be removed after switching this command and its tests to user external types. @@ -198,7 +197,7 @@ func TestRunArgsFollowDashRules(t *testing.T) { cmd.Flags().Set("image", "nginx") cmd.Flags().Set("generator", "run/v1") - printFlags := printers.NewPrintFlags("created").WithTypeSetter(scheme.Scheme) + printFlags := genericclioptions.NewPrintFlags("created").WithTypeSetter(scheme.Scheme) printer, err := printFlags.ToPrinter() if err != nil { t.Errorf("unexpected error: %v", err) @@ -366,7 +365,7 @@ func TestGenerateService(t *testing.T) { }), } - printFlags := printers.NewPrintFlags("created").WithTypeSetter(scheme.Scheme) + printFlags := genericclioptions.NewPrintFlags("created").WithTypeSetter(scheme.Scheme) printer, err := printFlags.ToPrinter() if err != nil { t.Errorf("unexpected error: %v", err) diff --git a/pkg/kubectl/cmd/scale.go b/pkg/kubectl/cmd/scale.go index 7f4e321794..c7c908a653 100644 --- a/pkg/kubectl/cmd/scale.go +++ b/pkg/kubectl/cmd/scale.go @@ -33,9 +33,9 @@ import ( "k8s.io/kubernetes/pkg/kubectl/cmd/templates" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/genericclioptions" + "k8s.io/kubernetes/pkg/kubectl/genericclioptions/printers" "k8s.io/kubernetes/pkg/kubectl/genericclioptions/resource" "k8s.io/kubernetes/pkg/kubectl/util/i18n" - "k8s.io/kubernetes/pkg/printers" ) var ( @@ -68,7 +68,7 @@ var ( type ScaleOptions struct { FilenameOptions resource.FilenameOptions RecordFlags *genericclioptions.RecordFlags - PrintFlags *printers.PrintFlags + PrintFlags *genericclioptions.PrintFlags PrintObj printers.ResourcePrinterFunc Selector string @@ -98,9 +98,9 @@ func NewScaleOptions(ioStreams genericclioptions.IOStreams) *ScaleOptions { return &ScaleOptions{ // TODO(juanvallejo): figure out why we only support the "name" outputFormat in this command // we only support "-o name" for this command, so only register the name printer - PrintFlags: &printers.PrintFlags{ + PrintFlags: &genericclioptions.PrintFlags{ OutputFormat: &outputFormat, - NamePrintFlags: printers.NewNamePrintFlags("scaled"), + NamePrintFlags: genericclioptions.NewNamePrintFlags("scaled"), }, RecordFlags: genericclioptions.NewRecordFlags(), CurrentReplicas: -1, diff --git a/pkg/kubectl/cmd/set/BUILD b/pkg/kubectl/cmd/set/BUILD index 161f7ac79a..ea718f9541 100644 --- a/pkg/kubectl/cmd/set/BUILD +++ b/pkg/kubectl/cmd/set/BUILD @@ -25,10 +25,10 @@ go_library( "//pkg/kubectl/cmd/util:go_default_library", "//pkg/kubectl/cmd/util/env:go_default_library", "//pkg/kubectl/genericclioptions:go_default_library", + "//pkg/kubectl/genericclioptions/printers:go_default_library", "//pkg/kubectl/genericclioptions/resource:go_default_library", "//pkg/kubectl/scheme:go_default_library", "//pkg/kubectl/util/i18n:go_default_library", - "//pkg/printers:go_default_library", "//vendor/github.com/golang/glog:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library", "//vendor/k8s.io/api/core/v1:go_default_library", @@ -69,7 +69,6 @@ go_test( "//pkg/kubectl/genericclioptions:go_default_library", "//pkg/kubectl/genericclioptions/resource:go_default_library", "//pkg/kubectl/scheme:go_default_library", - "//pkg/printers:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library", "//vendor/github.com/stretchr/testify/assert:go_default_library", "//vendor/k8s.io/api/apps/v1:go_default_library", diff --git a/pkg/kubectl/cmd/set/set_env.go b/pkg/kubectl/cmd/set/set_env.go index 90f2f22f92..7153a2fa13 100644 --- a/pkg/kubectl/cmd/set/set_env.go +++ b/pkg/kubectl/cmd/set/set_env.go @@ -34,9 +34,9 @@ import ( cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" envutil "k8s.io/kubernetes/pkg/kubectl/cmd/util/env" "k8s.io/kubernetes/pkg/kubectl/genericclioptions" + "k8s.io/kubernetes/pkg/kubectl/genericclioptions/printers" "k8s.io/kubernetes/pkg/kubectl/genericclioptions/resource" "k8s.io/kubernetes/pkg/kubectl/scheme" - "k8s.io/kubernetes/pkg/printers" ) var ( @@ -93,7 +93,7 @@ var ( ) type EnvOptions struct { - PrintFlags *printers.PrintFlags + PrintFlags *genericclioptions.PrintFlags resource.FilenameOptions EnvParams []string @@ -126,7 +126,7 @@ type EnvOptions struct { // pod templates are selected by default and allowing environment to be overwritten func NewEnvOptions(streams genericclioptions.IOStreams) *EnvOptions { return &EnvOptions{ - PrintFlags: printers.NewPrintFlags("env updated").WithTypeSetter(scheme.Scheme), + PrintFlags: genericclioptions.NewPrintFlags("env updated").WithTypeSetter(scheme.Scheme), ContainerSelector: "*", Overwrite: true, diff --git a/pkg/kubectl/cmd/set/set_env_test.go b/pkg/kubectl/cmd/set/set_env_test.go index 67eb342db4..c4d453b83f 100644 --- a/pkg/kubectl/cmd/set/set_env_test.go +++ b/pkg/kubectl/cmd/set/set_env_test.go @@ -42,7 +42,6 @@ import ( "k8s.io/kubernetes/pkg/kubectl/genericclioptions" "k8s.io/kubernetes/pkg/kubectl/genericclioptions/resource" "k8s.io/kubernetes/pkg/kubectl/scheme" - "k8s.io/kubernetes/pkg/printers" ) func TestSetEnvLocal(t *testing.T) { @@ -63,7 +62,7 @@ func TestSetEnvLocal(t *testing.T) { streams, _, buf, bufErr := genericclioptions.NewTestIOStreams() opts := NewEnvOptions(streams) - opts.PrintFlags = printers.NewPrintFlags("").WithDefaultOutput(outputFormat).WithTypeSetter(scheme.Scheme) + opts.PrintFlags = genericclioptions.NewPrintFlags("").WithDefaultOutput(outputFormat).WithTypeSetter(scheme.Scheme) opts.FilenameOptions = resource.FilenameOptions{ Filenames: []string{"../../../../test/e2e/testing-manifests/statefulset/cassandra/controller.yaml"}, } @@ -101,7 +100,7 @@ func TestSetMultiResourcesEnvLocal(t *testing.T) { outputFormat := "name" streams, _, buf, bufErr := genericclioptions.NewTestIOStreams() opts := NewEnvOptions(streams) - opts.PrintFlags = printers.NewPrintFlags("").WithDefaultOutput(outputFormat).WithTypeSetter(scheme.Scheme) + opts.PrintFlags = genericclioptions.NewPrintFlags("").WithDefaultOutput(outputFormat).WithTypeSetter(scheme.Scheme) opts.FilenameOptions = resource.FilenameOptions{ Filenames: []string{"../../../../test/fixtures/pkg/kubectl/cmd/set/multi-resource-yaml.yaml"}, } @@ -483,7 +482,7 @@ func TestSetEnvRemote(t *testing.T) { outputFormat := "yaml" streams := genericclioptions.NewTestIOStreamsDiscard() opts := NewEnvOptions(streams) - opts.PrintFlags = printers.NewPrintFlags("").WithDefaultOutput(outputFormat).WithTypeSetter(scheme.Scheme) + opts.PrintFlags = genericclioptions.NewPrintFlags("").WithDefaultOutput(outputFormat).WithTypeSetter(scheme.Scheme) opts.Local = false opts.IOStreams = streams err := opts.Complete(tf, NewCmdEnv(tf, streams), input.args) diff --git a/pkg/kubectl/cmd/set/set_image.go b/pkg/kubectl/cmd/set/set_image.go index 76dd52646b..7ff65c6c23 100644 --- a/pkg/kubectl/cmd/set/set_image.go +++ b/pkg/kubectl/cmd/set/set_image.go @@ -29,10 +29,10 @@ import ( "k8s.io/kubernetes/pkg/kubectl/cmd/templates" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/genericclioptions" + "k8s.io/kubernetes/pkg/kubectl/genericclioptions/printers" "k8s.io/kubernetes/pkg/kubectl/genericclioptions/resource" "k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/util/i18n" - "k8s.io/kubernetes/pkg/printers" ) // ImageOptions is the start of the data required to perform the operation. As new fields are added, add them here instead of @@ -40,7 +40,7 @@ import ( type SetImageOptions struct { resource.FilenameOptions - PrintFlags *printers.PrintFlags + PrintFlags *genericclioptions.PrintFlags RecordFlags *genericclioptions.RecordFlags Infos []*resource.Info @@ -87,7 +87,7 @@ var ( func NewImageOptions(streams genericclioptions.IOStreams) *SetImageOptions { return &SetImageOptions{ - PrintFlags: printers.NewPrintFlags("image updated").WithTypeSetter(scheme.Scheme), + PrintFlags: genericclioptions.NewPrintFlags("image updated").WithTypeSetter(scheme.Scheme), RecordFlags: genericclioptions.NewRecordFlags(), Recorder: genericclioptions.NoopRecorder{}, diff --git a/pkg/kubectl/cmd/set/set_image_test.go b/pkg/kubectl/cmd/set/set_image_test.go index 50cf1e3b1d..fb383be767 100644 --- a/pkg/kubectl/cmd/set/set_image_test.go +++ b/pkg/kubectl/cmd/set/set_image_test.go @@ -43,7 +43,6 @@ import ( "k8s.io/kubernetes/pkg/kubectl/genericclioptions" "k8s.io/kubernetes/pkg/kubectl/genericclioptions/resource" "k8s.io/kubernetes/pkg/kubectl/scheme" - "k8s.io/kubernetes/pkg/printers" ) func TestImageLocal(t *testing.T) { @@ -70,7 +69,7 @@ func TestImageLocal(t *testing.T) { cmd.Flags().Set("local", "true") opts := SetImageOptions{ - PrintFlags: printers.NewPrintFlags("").WithDefaultOutput(outputFormat).WithTypeSetter(scheme.Scheme), + PrintFlags: genericclioptions.NewPrintFlags("").WithDefaultOutput(outputFormat).WithTypeSetter(scheme.Scheme), FilenameOptions: resource.FilenameOptions{ Filenames: []string{"../../../../test/e2e/testing-manifests/statefulset/cassandra/controller.yaml"}}, Local: true, @@ -92,7 +91,7 @@ func TestImageLocal(t *testing.T) { } func TestSetImageValidation(t *testing.T) { - printFlags := printers.NewPrintFlags("").WithTypeSetter(scheme.Scheme) + printFlags := genericclioptions.NewPrintFlags("").WithTypeSetter(scheme.Scheme) testCases := []struct { name string @@ -183,7 +182,7 @@ func TestSetMultiResourcesImageLocal(t *testing.T) { cmd.Flags().Set("local", "true") opts := SetImageOptions{ - PrintFlags: printers.NewPrintFlags("").WithDefaultOutput(outputFormat).WithTypeSetter(scheme.Scheme), + PrintFlags: genericclioptions.NewPrintFlags("").WithDefaultOutput(outputFormat).WithTypeSetter(scheme.Scheme), FilenameOptions: resource.FilenameOptions{ Filenames: []string{"../../../../test/fixtures/pkg/kubectl/cmd/set/multi-resource-yaml.yaml"}}, Local: true, @@ -570,7 +569,7 @@ func TestSetImageRemote(t *testing.T) { cmd := NewCmdImage(tf, streams) cmd.Flags().Set("output", outputFormat) opts := SetImageOptions{ - PrintFlags: printers.NewPrintFlags("").WithDefaultOutput(outputFormat).WithTypeSetter(scheme.Scheme), + PrintFlags: genericclioptions.NewPrintFlags("").WithDefaultOutput(outputFormat).WithTypeSetter(scheme.Scheme), Local: false, IOStreams: streams, diff --git a/pkg/kubectl/cmd/set/set_resources.go b/pkg/kubectl/cmd/set/set_resources.go index 0fd6bc5b31..5fbc9eccf0 100644 --- a/pkg/kubectl/cmd/set/set_resources.go +++ b/pkg/kubectl/cmd/set/set_resources.go @@ -20,8 +20,6 @@ import ( "fmt" "strings" - "k8s.io/kubernetes/pkg/printers" - "github.com/spf13/cobra" "k8s.io/api/core/v1" @@ -33,6 +31,7 @@ import ( "k8s.io/kubernetes/pkg/kubectl/cmd/templates" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/genericclioptions" + "k8s.io/kubernetes/pkg/kubectl/genericclioptions/printers" "k8s.io/kubernetes/pkg/kubectl/genericclioptions/resource" "k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/util/i18n" @@ -65,7 +64,7 @@ var ( type SetResourcesOptions struct { resource.FilenameOptions - PrintFlags *printers.PrintFlags + PrintFlags *genericclioptions.PrintFlags RecordFlags *genericclioptions.RecordFlags Infos []*resource.Info @@ -94,7 +93,7 @@ type SetResourcesOptions struct { // pod templates are selected by default. func NewResourcesOptions(streams genericclioptions.IOStreams) *SetResourcesOptions { return &SetResourcesOptions{ - PrintFlags: printers.NewPrintFlags("resource requirements updated").WithTypeSetter(scheme.Scheme), + PrintFlags: genericclioptions.NewPrintFlags("resource requirements updated").WithTypeSetter(scheme.Scheme), RecordFlags: genericclioptions.NewRecordFlags(), Recorder: genericclioptions.NoopRecorder{}, diff --git a/pkg/kubectl/cmd/set/set_resources_test.go b/pkg/kubectl/cmd/set/set_resources_test.go index cea402abd7..fe63078264 100644 --- a/pkg/kubectl/cmd/set/set_resources_test.go +++ b/pkg/kubectl/cmd/set/set_resources_test.go @@ -24,8 +24,6 @@ import ( "strings" "testing" - "k8s.io/kubernetes/pkg/printers" - "github.com/stretchr/testify/assert" appsv1 "k8s.io/api/apps/v1" appsv1beta1 "k8s.io/api/apps/v1beta1" @@ -70,7 +68,7 @@ func TestResourcesLocal(t *testing.T) { cmd.Flags().Set("local", "true") opts := SetResourcesOptions{ - PrintFlags: printers.NewPrintFlags("").WithDefaultOutput(outputFormat).WithTypeSetter(scheme.Scheme), + PrintFlags: genericclioptions.NewPrintFlags("").WithDefaultOutput(outputFormat).WithTypeSetter(scheme.Scheme), FilenameOptions: resource.FilenameOptions{ Filenames: []string{"../../../../test/e2e/testing-manifests/statefulset/cassandra/controller.yaml"}}, Local: true, @@ -119,7 +117,7 @@ func TestSetMultiResourcesLimitsLocal(t *testing.T) { cmd.Flags().Set("local", "true") opts := SetResourcesOptions{ - PrintFlags: printers.NewPrintFlags("").WithDefaultOutput(outputFormat).WithTypeSetter(scheme.Scheme), + PrintFlags: genericclioptions.NewPrintFlags("").WithDefaultOutput(outputFormat).WithTypeSetter(scheme.Scheme), FilenameOptions: resource.FilenameOptions{ Filenames: []string{"../../../../test/fixtures/pkg/kubectl/cmd/set/multi-resource-yaml.yaml"}}, Local: true, @@ -494,7 +492,7 @@ func TestSetResourcesRemote(t *testing.T) { cmd := NewCmdResources(tf, streams) cmd.Flags().Set("output", outputFormat) opts := SetResourcesOptions{ - PrintFlags: printers.NewPrintFlags("").WithDefaultOutput(outputFormat).WithTypeSetter(scheme.Scheme), + PrintFlags: genericclioptions.NewPrintFlags("").WithDefaultOutput(outputFormat).WithTypeSetter(scheme.Scheme), Limits: "cpu=200m,memory=512Mi", ContainerSelector: "*", diff --git a/pkg/kubectl/cmd/set/set_selector.go b/pkg/kubectl/cmd/set/set_selector.go index 5ed87e22ac..ce8cca2a16 100644 --- a/pkg/kubectl/cmd/set/set_selector.go +++ b/pkg/kubectl/cmd/set/set_selector.go @@ -19,8 +19,6 @@ package set import ( "fmt" - "k8s.io/kubernetes/pkg/printers" - "github.com/golang/glog" "github.com/spf13/cobra" "k8s.io/api/core/v1" @@ -32,6 +30,7 @@ import ( "k8s.io/kubernetes/pkg/kubectl/cmd/templates" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/genericclioptions" + "k8s.io/kubernetes/pkg/kubectl/genericclioptions/printers" "k8s.io/kubernetes/pkg/kubectl/genericclioptions/resource" "k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/util/i18n" @@ -42,7 +41,7 @@ import ( type SetSelectorOptions struct { fileOptions resource.FilenameOptions - PrintFlags *printers.PrintFlags + PrintFlags *genericclioptions.PrintFlags RecordFlags *genericclioptions.RecordFlags local bool @@ -79,7 +78,7 @@ var ( func NewSelectorOptions(streams genericclioptions.IOStreams) *SetSelectorOptions { return &SetSelectorOptions{ - PrintFlags: printers.NewPrintFlags("selector updated").WithTypeSetter(scheme.Scheme), + PrintFlags: genericclioptions.NewPrintFlags("selector updated").WithTypeSetter(scheme.Scheme), RecordFlags: genericclioptions.NewRecordFlags(), Recorder: genericclioptions.NoopRecorder{}, diff --git a/pkg/kubectl/cmd/set/set_serviceaccount.go b/pkg/kubectl/cmd/set/set_serviceaccount.go index d06184ddee..5a85b43b69 100644 --- a/pkg/kubectl/cmd/set/set_serviceaccount.go +++ b/pkg/kubectl/cmd/set/set_serviceaccount.go @@ -20,8 +20,6 @@ import ( "errors" "fmt" - "k8s.io/kubernetes/pkg/printers" - "github.com/spf13/cobra" "github.com/golang/glog" @@ -32,6 +30,7 @@ import ( "k8s.io/kubernetes/pkg/kubectl/cmd/templates" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/genericclioptions" + "k8s.io/kubernetes/pkg/kubectl/genericclioptions/printers" "k8s.io/kubernetes/pkg/kubectl/genericclioptions/resource" "k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/util/i18n" @@ -58,7 +57,7 @@ var ( // serviceAccountConfig encapsulates the data required to perform the operation. type SetServiceAccountOptions struct { - PrintFlags *printers.PrintFlags + PrintFlags *genericclioptions.PrintFlags RecordFlags *genericclioptions.RecordFlags fileNameOptions resource.FilenameOptions @@ -79,7 +78,7 @@ type SetServiceAccountOptions struct { func NewSetServiceAccountOptions(streams genericclioptions.IOStreams) *SetServiceAccountOptions { return &SetServiceAccountOptions{ - PrintFlags: printers.NewPrintFlags("serviceaccount updated").WithTypeSetter(scheme.Scheme), + PrintFlags: genericclioptions.NewPrintFlags("serviceaccount updated").WithTypeSetter(scheme.Scheme), RecordFlags: genericclioptions.NewRecordFlags(), Recorder: genericclioptions.NoopRecorder{}, diff --git a/pkg/kubectl/cmd/set/set_serviceaccount_test.go b/pkg/kubectl/cmd/set/set_serviceaccount_test.go index a4ca865866..f2e06bd7bb 100644 --- a/pkg/kubectl/cmd/set/set_serviceaccount_test.go +++ b/pkg/kubectl/cmd/set/set_serviceaccount_test.go @@ -25,8 +25,6 @@ import ( "path" "testing" - "k8s.io/kubernetes/pkg/printers" - "github.com/stretchr/testify/assert" appsv1 "k8s.io/api/apps/v1" appsv1beta1 "k8s.io/api/apps/v1beta1" @@ -90,7 +88,7 @@ func TestSetServiceAccountLocal(t *testing.T) { cmd.Flags().Set("local", "true") testapi.Default = testapi.Groups[input.apiGroup] saConfig := SetServiceAccountOptions{ - PrintFlags: printers.NewPrintFlags("").WithDefaultOutput(outputFormat).WithTypeSetter(scheme.Scheme), + PrintFlags: genericclioptions.NewPrintFlags("").WithDefaultOutput(outputFormat).WithTypeSetter(scheme.Scheme), fileNameOptions: resource.FilenameOptions{ Filenames: []string{input.yaml}}, local: true, @@ -128,7 +126,7 @@ func TestSetServiceAccountMultiLocal(t *testing.T) { cmd.Flags().Set("output", outputFormat) cmd.Flags().Set("local", "true") opts := SetServiceAccountOptions{ - PrintFlags: printers.NewPrintFlags("").WithDefaultOutput(outputFormat).WithTypeSetter(scheme.Scheme), + PrintFlags: genericclioptions.NewPrintFlags("").WithDefaultOutput(outputFormat).WithTypeSetter(scheme.Scheme), fileNameOptions: resource.FilenameOptions{ Filenames: []string{"../../../../test/fixtures/pkg/kubectl/cmd/set/multi-resource-yaml.yaml"}}, local: true, @@ -365,7 +363,7 @@ func TestSetServiceAccountRemote(t *testing.T) { cmd := NewCmdServiceAccount(tf, streams) cmd.Flags().Set("output", outputFormat) saConfig := SetServiceAccountOptions{ - PrintFlags: printers.NewPrintFlags("").WithDefaultOutput(outputFormat).WithTypeSetter(scheme.Scheme), + PrintFlags: genericclioptions.NewPrintFlags("").WithDefaultOutput(outputFormat).WithTypeSetter(scheme.Scheme), local: false, IOStreams: streams, @@ -407,7 +405,7 @@ func TestServiceAccountValidation(t *testing.T) { cmd := NewCmdServiceAccount(tf, streams) saConfig := &SetServiceAccountOptions{ - PrintFlags: printers.NewPrintFlags("").WithDefaultOutput(outputFormat).WithTypeSetter(scheme.Scheme), + PrintFlags: genericclioptions.NewPrintFlags("").WithDefaultOutput(outputFormat).WithTypeSetter(scheme.Scheme), IOStreams: streams, } err := saConfig.Complete(tf, cmd, input.args) diff --git a/pkg/kubectl/cmd/set/set_subject.go b/pkg/kubectl/cmd/set/set_subject.go index ce55ea7630..10fd4031e1 100644 --- a/pkg/kubectl/cmd/set/set_subject.go +++ b/pkg/kubectl/cmd/set/set_subject.go @@ -31,10 +31,10 @@ import ( "k8s.io/kubernetes/pkg/kubectl/cmd/templates" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/genericclioptions" + "k8s.io/kubernetes/pkg/kubectl/genericclioptions/printers" "k8s.io/kubernetes/pkg/kubectl/genericclioptions/resource" "k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/util/i18n" - "k8s.io/kubernetes/pkg/printers" ) var ( @@ -57,7 +57,7 @@ type updateSubjects func(existings []rbacv1.Subject, targets []rbacv1.Subject) ( // SubjectOptions is the start of the data required to perform the operation. As new fields are added, add them here instead of // referencing the cmd.Flags type SubjectOptions struct { - PrintFlags *printers.PrintFlags + PrintFlags *genericclioptions.PrintFlags resource.FilenameOptions @@ -82,7 +82,7 @@ type SubjectOptions struct { func NewSubjectOptions(streams genericclioptions.IOStreams) *SubjectOptions { return &SubjectOptions{ - PrintFlags: printers.NewPrintFlags("subjects updated").WithTypeSetter(scheme.Scheme), + PrintFlags: genericclioptions.NewPrintFlags("subjects updated").WithTypeSetter(scheme.Scheme), IOStreams: streams, } diff --git a/pkg/kubectl/cmd/taint.go b/pkg/kubectl/cmd/taint.go index af626ad1b0..e4c68dd434 100644 --- a/pkg/kubectl/cmd/taint.go +++ b/pkg/kubectl/cmd/taint.go @@ -34,17 +34,17 @@ import ( "k8s.io/kubernetes/pkg/kubectl/cmd/templates" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/genericclioptions" + "k8s.io/kubernetes/pkg/kubectl/genericclioptions/printers" "k8s.io/kubernetes/pkg/kubectl/genericclioptions/resource" "k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/util/i18n" - "k8s.io/kubernetes/pkg/printers" taintutils "k8s.io/kubernetes/pkg/util/taints" ) // TaintOptions have the data required to perform the taint operation type TaintOptions struct { - PrintFlags *printers.PrintFlags - ToPrinter func(string) (printers.ResourcePrinterFunc, error) + PrintFlags *genericclioptions.PrintFlags + ToPrinter func(string) (printers.ResourcePrinter, error) resources []string taintsToAdd []v1.Taint @@ -87,7 +87,7 @@ var ( func NewCmdTaint(f cmdutil.Factory, streams genericclioptions.IOStreams) *cobra.Command { options := &TaintOptions{ - PrintFlags: printers.NewPrintFlags("tainted").WithTypeSetter(scheme.Scheme), + PrintFlags: genericclioptions.NewPrintFlags("tainted").WithTypeSetter(scheme.Scheme), IOStreams: streams, } @@ -148,14 +148,9 @@ func (o *TaintOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []st } } - o.ToPrinter = func(operation string) (printers.ResourcePrinterFunc, error) { + o.ToPrinter = func(operation string) (printers.ResourcePrinter, error) { o.PrintFlags.NamePrintFlags.Operation = operation - printer, err := o.PrintFlags.ToPrinter() - if err != nil { - return nil, err - } - - return printer.PrintObj, nil + return o.PrintFlags.ToPrinter() } if len(o.resources) < 1 { diff --git a/pkg/kubectl/cmd/util/editor/BUILD b/pkg/kubectl/cmd/util/editor/BUILD index 2a0e78cf35..06cf3472f5 100644 --- a/pkg/kubectl/cmd/util/editor/BUILD +++ b/pkg/kubectl/cmd/util/editor/BUILD @@ -19,11 +19,11 @@ go_library( "//pkg/kubectl:go_default_library", "//pkg/kubectl/cmd/util:go_default_library", "//pkg/kubectl/genericclioptions:go_default_library", + "//pkg/kubectl/genericclioptions/printers:go_default_library", "//pkg/kubectl/genericclioptions/resource:go_default_library", "//pkg/kubectl/scheme:go_default_library", "//pkg/kubectl/util/crlf:go_default_library", "//pkg/kubectl/util/term:go_default_library", - "//pkg/printers:go_default_library", "//vendor/github.com/evanphx/json-patch:go_default_library", "//vendor/github.com/golang/glog:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library", diff --git a/pkg/kubectl/cmd/util/editor/editoptions.go b/pkg/kubectl/cmd/util/editor/editoptions.go index a9c9251c2f..990ae53e58 100644 --- a/pkg/kubectl/cmd/util/editor/editoptions.go +++ b/pkg/kubectl/cmd/util/editor/editoptions.go @@ -46,10 +46,10 @@ import ( "k8s.io/kubernetes/pkg/kubectl" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/genericclioptions" + "k8s.io/kubernetes/pkg/kubectl/genericclioptions/printers" "k8s.io/kubernetes/pkg/kubectl/genericclioptions/resource" "k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/util/crlf" - "k8s.io/kubernetes/pkg/printers" ) // EditOptions contains all the options for running edit cli command. @@ -57,8 +57,8 @@ type EditOptions struct { resource.FilenameOptions RecordFlags *genericclioptions.RecordFlags - PrintFlags *printers.PrintFlags - ToPrinter func(string) (printers.ResourcePrinterFunc, error) + PrintFlags *genericclioptions.PrintFlags + ToPrinter func(string) (printers.ResourcePrinter, error) Output string OutputPatch bool @@ -88,7 +88,7 @@ func NewEditOptions(editMode EditMode, ioStreams genericclioptions.IOStreams) *E EditMode: editMode, - PrintFlags: printers.NewPrintFlags("edited").WithTypeSetter(scheme.Scheme), + PrintFlags: genericclioptions.NewPrintFlags("edited").WithTypeSetter(scheme.Scheme), WindowsLineEndings: goruntime.GOOS == "windows", @@ -163,13 +163,9 @@ func (o *EditOptions) Complete(f cmdutil.Factory, args []string, cmd *cobra.Comm Do() } - o.ToPrinter = func(operation string) (printers.ResourcePrinterFunc, error) { + o.ToPrinter = func(operation string) (printers.ResourcePrinter, error) { o.PrintFlags.NamePrintFlags.Operation = operation - printer, err := o.PrintFlags.ToPrinter() - if err != nil { - return nil, err - } - return printer.PrintObj, nil + return o.PrintFlags.ToPrinter() } o.CmdNamespace = cmdNamespace diff --git a/pkg/kubectl/genericclioptions/BUILD b/pkg/kubectl/genericclioptions/BUILD index 652f846874..66867c87ec 100644 --- a/pkg/kubectl/genericclioptions/BUILD +++ b/pkg/kubectl/genericclioptions/BUILD @@ -1,4 +1,4 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") +load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") go_library( name = "go_default_library", @@ -7,11 +7,15 @@ go_library( "config_flags_fake.go", "doc.go", "io_options.go", + "json_yaml_flags.go", + "name_flags.go", + "print_flags.go", "record_flags.go", ], importpath = "k8s.io/kubernetes/pkg/kubectl/genericclioptions", visibility = ["//visibility:public"], deps = [ + "//pkg/kubectl/genericclioptions/printers:go_default_library", "//vendor/github.com/evanphx/json-patch:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library", "//vendor/github.com/spf13/pflag:go_default_library", @@ -37,8 +41,22 @@ filegroup( name = "all-srcs", srcs = [ ":package-srcs", + "//pkg/kubectl/genericclioptions/printers:all-srcs", "//pkg/kubectl/genericclioptions/resource:all-srcs", ], tags = ["automanaged"], visibility = ["//visibility:public"], ) + +go_test( + name = "go_default_test", + srcs = [ + "json_yaml_flags_test.go", + "name_flags_test.go", + ], + embed = [":go_default_library"], + deps = [ + "//vendor/k8s.io/api/core/v1:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + ], +) diff --git a/pkg/printers/json_yaml_flags.go b/pkg/kubectl/genericclioptions/json_yaml_flags.go similarity index 85% rename from pkg/printers/json_yaml_flags.go rename to pkg/kubectl/genericclioptions/json_yaml_flags.go index 3176e4aae2..91a86e43e9 100644 --- a/pkg/printers/json_yaml_flags.go +++ b/pkg/kubectl/genericclioptions/json_yaml_flags.go @@ -14,12 +14,14 @@ See the License for the specific language governing permissions and limitations under the License. */ -package printers +package genericclioptions import ( "strings" "github.com/spf13/cobra" + + "k8s.io/kubernetes/pkg/kubectl/genericclioptions/printers" ) // JSONYamlPrintFlags provides default flags necessary for json/yaml printing. @@ -32,15 +34,15 @@ type JSONYamlPrintFlags struct { // handling --output=(yaml|json) printing. // Returns false if the specified outputFormat does not match a supported format. // Supported Format types can be found in pkg/printers/printers.go -func (f *JSONYamlPrintFlags) ToPrinter(outputFormat string) (ResourcePrinter, error) { - var printer ResourcePrinter +func (f *JSONYamlPrintFlags) ToPrinter(outputFormat string) (printers.ResourcePrinter, error) { + var printer printers.ResourcePrinter outputFormat = strings.ToLower(outputFormat) switch outputFormat { case "json": - printer = &JSONPrinter{} + printer = &printers.JSONPrinter{} case "yaml": - printer = &YAMLPrinter{} + printer = &printers.YAMLPrinter{} default: return nil, NoCompatiblePrinterError{Options: f, OutputFormat: &outputFormat} } diff --git a/pkg/printers/json_yaml_flags_test.go b/pkg/kubectl/genericclioptions/json_yaml_flags_test.go similarity index 91% rename from pkg/printers/json_yaml_flags_test.go rename to pkg/kubectl/genericclioptions/json_yaml_flags_test.go index 2582b8c089..7ab5b7f1dc 100644 --- a/pkg/printers/json_yaml_flags_test.go +++ b/pkg/kubectl/genericclioptions/json_yaml_flags_test.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package printers_test +package genericclioptions import ( "bytes" @@ -23,7 +23,6 @@ import ( "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/kubernetes/pkg/printers" ) func TestPrinterSupportsExpectedJSONYamlFormats(t *testing.T) { @@ -62,16 +61,16 @@ func TestPrinterSupportsExpectedJSONYamlFormats(t *testing.T) { for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { - printFlags := printers.JSONYamlPrintFlags{} + printFlags := JSONYamlPrintFlags{} p, err := printFlags.ToPrinter(tc.outputFormat) if tc.expectNoMatch { - if !printers.IsNoCompatiblePrinterError(err) { + if !IsNoCompatiblePrinterError(err) { t.Fatalf("expected no printer matches for output format %q", tc.outputFormat) } return } - if printers.IsNoCompatiblePrinterError(err) { + if IsNoCompatiblePrinterError(err) { t.Fatalf("expected to match template printer for output format %q", tc.outputFormat) } if err != nil { diff --git a/pkg/printers/name_flags.go b/pkg/kubectl/genericclioptions/name_flags.go similarity index 90% rename from pkg/printers/name_flags.go rename to pkg/kubectl/genericclioptions/name_flags.go index 1f8aad188c..5b103e73dd 100644 --- a/pkg/printers/name_flags.go +++ b/pkg/kubectl/genericclioptions/name_flags.go @@ -14,13 +14,15 @@ See the License for the specific language governing permissions and limitations under the License. */ -package printers +package genericclioptions import ( "fmt" "strings" "github.com/spf13/cobra" + + "k8s.io/kubernetes/pkg/kubectl/genericclioptions/printers" ) // NamePrintFlags provides default flags necessary for printing @@ -42,8 +44,8 @@ func (f *NamePrintFlags) Complete(successTemplate string) error { // handling --output=name printing. // Returns false if the specified outputFormat does not match a supported format. // Supported format types can be found in pkg/printers/printers.go -func (f *NamePrintFlags) ToPrinter(outputFormat string) (ResourcePrinter, error) { - namePrinter := &NamePrinter{ +func (f *NamePrintFlags) ToPrinter(outputFormat string) (printers.ResourcePrinter, error) { + namePrinter := &printers.NamePrinter{ Operation: f.Operation, } diff --git a/pkg/printers/name_flags_test.go b/pkg/kubectl/genericclioptions/name_flags_test.go similarity index 93% rename from pkg/printers/name_flags_test.go rename to pkg/kubectl/genericclioptions/name_flags_test.go index 5b2267c505..6f64fad949 100644 --- a/pkg/printers/name_flags_test.go +++ b/pkg/kubectl/genericclioptions/name_flags_test.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package printers_test +package genericclioptions import ( "bytes" @@ -23,7 +23,6 @@ import ( "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/kubernetes/pkg/printers" ) func TestNamePrinterSupportsExpectedFormats(t *testing.T) { @@ -78,18 +77,18 @@ func TestNamePrinterSupportsExpectedFormats(t *testing.T) { for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { - printFlags := printers.NamePrintFlags{ + printFlags := NamePrintFlags{ Operation: tc.operation, } p, err := printFlags.ToPrinter(tc.outputFormat) if tc.expectNoMatch { - if !printers.IsNoCompatiblePrinterError(err) { + if !IsNoCompatiblePrinterError(err) { t.Fatalf("expected no printer matches for output format %q", tc.outputFormat) } return } - if printers.IsNoCompatiblePrinterError(err) { + if IsNoCompatiblePrinterError(err) { t.Fatalf("expected to match name printer for output format %q", tc.outputFormat) } diff --git a/pkg/printers/flags.go b/pkg/kubectl/genericclioptions/print_flags.go similarity index 72% rename from pkg/printers/flags.go rename to pkg/kubectl/genericclioptions/print_flags.go index 83bbc228a6..981f3697f0 100644 --- a/pkg/printers/flags.go +++ b/pkg/kubectl/genericclioptions/print_flags.go @@ -14,28 +14,16 @@ See the License for the specific language governing permissions and limitations under the License. */ -package printers +package genericclioptions import ( "fmt" - "strings" "github.com/spf13/cobra" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/kubernetes/pkg/kubectl/genericclioptions/printers" ) -var ( - internalObjectPrinterErr = "a versioned object must be passed to a printer" - - // disallowedPackagePrefixes contains regular expression templates - // for object package paths that are not allowed by printers. - disallowedPackagePrefixes = []string{ - "k8s.io/kubernetes/pkg/apis/", - } -) - -var internalObjectPreventer = &illegalPackageSourceChecker{disallowedPackagePrefixes} - type NoCompatiblePrinterError struct { OutputFormat *string Options interface{} @@ -59,14 +47,6 @@ func IsNoCompatiblePrinterError(err error) bool { return ok } -func IsInternalObjectError(err error) bool { - if err == nil { - return false - } - - return err.Error() == internalObjectPrinterErr -} - // PrintFlags composes common printer flag structs // used across all commands, and provides a method // of retrieving a known printer based on flag values provided. @@ -74,7 +54,7 @@ type PrintFlags struct { JSONYamlPrintFlags *JSONYamlPrintFlags NamePrintFlags *NamePrintFlags - TypeSetterPrinter *TypeSetterPrinter + TypeSetterPrinter *printers.TypeSetterPrinter OutputFormat *string } @@ -83,7 +63,7 @@ func (f *PrintFlags) Complete(successTemplate string) error { return f.NamePrintFlags.Complete(successTemplate) } -func (f *PrintFlags) ToPrinter() (ResourcePrinter, error) { +func (f *PrintFlags) ToPrinter() (printers.ResourcePrinter, error) { outputFormat := "" if f.OutputFormat != nil { outputFormat = *f.OutputFormat @@ -121,7 +101,7 @@ func (f *PrintFlags) WithDefaultOutput(output string) *PrintFlags { // WithTypeSetter sets a wrapper than will surround the returned printer with a printer to type resources func (f *PrintFlags) WithTypeSetter(scheme *runtime.Scheme) *PrintFlags { - f.TypeSetterPrinter = NewTypeSetter(scheme) + f.TypeSetterPrinter = printers.NewTypeSetter(scheme) return f } @@ -135,22 +115,3 @@ func NewPrintFlags(operation string) *PrintFlags { NamePrintFlags: NewNamePrintFlags(operation), } } - -// illegalPackageSourceChecker compares a given -// object's package path, and determines if the -// object originates from a disallowed source. -type illegalPackageSourceChecker struct { - // disallowedPrefixes is a slice of disallowed package path - // prefixes for a given runtime.Object that we are printing. - disallowedPrefixes []string -} - -func (c *illegalPackageSourceChecker) IsForbidden(pkgPath string) bool { - for _, forbiddenPrefix := range c.disallowedPrefixes { - if strings.HasPrefix(pkgPath, forbiddenPrefix) { - return true - } - } - - return false -} diff --git a/pkg/kubectl/genericclioptions/printers/BUILD b/pkg/kubectl/genericclioptions/printers/BUILD new file mode 100644 index 0000000000..f62c55053e --- /dev/null +++ b/pkg/kubectl/genericclioptions/printers/BUILD @@ -0,0 +1,41 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") + +go_library( + name = "go_default_library", + srcs = [ + "interface.go", + "json.go", + "name.go", + "sourcechecker.go", + "typesetter.go", + ], + importpath = "k8s.io/kubernetes/pkg/kubectl/genericclioptions/printers", + visibility = ["//visibility:public"], + deps = [ + "//vendor/github.com/ghodss/yaml:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/api/meta:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", + ], +) + +go_test( + name = "go_default_test", + srcs = ["sourcechecker_test.go"], + embed = [":go_default_library"], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/pkg/kubectl/genericclioptions/printers/interface.go b/pkg/kubectl/genericclioptions/printers/interface.go new file mode 100644 index 0000000000..a42a136a98 --- /dev/null +++ b/pkg/kubectl/genericclioptions/printers/interface.go @@ -0,0 +1,32 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed 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 printers + +import ( + "io" + + "k8s.io/apimachinery/pkg/runtime" +) + +// ResourcePrinterFunc is a function that can print objects +type ResourcePrinterFunc func(runtime.Object, io.Writer) error + +// ResourcePrinter is an interface that knows how to print runtime objects. +type ResourcePrinter interface { + // Print receives a runtime object, formats it and prints it to a writer. + PrintObj(runtime.Object, io.Writer) error +} diff --git a/pkg/printers/json.go b/pkg/kubectl/genericclioptions/printers/json.go similarity index 93% rename from pkg/printers/json.go rename to pkg/kubectl/genericclioptions/printers/json.go index ec52bd6d2a..1df9a86466 100644 --- a/pkg/printers/json.go +++ b/pkg/kubectl/genericclioptions/printers/json.go @@ -36,8 +36,8 @@ func (p *JSONPrinter) PrintObj(obj runtime.Object, w io.Writer) error { // we use reflect.Indirect here in order to obtain the actual value from a pointer. // we need an actual value in order to retrieve the package path for an object. // using reflect.Indirect indiscriminately is valid here, as all runtime.Objects are supposed to be pointers. - if internalObjectPreventer.IsForbidden(reflect.Indirect(reflect.ValueOf(obj)).Type().PkgPath()) { - return fmt.Errorf(internalObjectPrinterErr) + if InternalObjectPreventer.IsForbidden(reflect.Indirect(reflect.ValueOf(obj)).Type().PkgPath()) { + return fmt.Errorf(InternalObjectPrinterErr) } switch obj := obj.(type) { @@ -78,8 +78,8 @@ func (p *YAMLPrinter) PrintObj(obj runtime.Object, w io.Writer) error { // we use reflect.Indirect here in order to obtain the actual value from a pointer. // we need an actual value in order to retrieve the package path for an object. // using reflect.Indirect indiscriminately is valid here, as all runtime.Objects are supposed to be pointers. - if internalObjectPreventer.IsForbidden(reflect.Indirect(reflect.ValueOf(obj)).Type().PkgPath()) { - return fmt.Errorf(internalObjectPrinterErr) + if InternalObjectPreventer.IsForbidden(reflect.Indirect(reflect.ValueOf(obj)).Type().PkgPath()) { + return fmt.Errorf(InternalObjectPrinterErr) } switch obj := obj.(type) { diff --git a/pkg/printers/name.go b/pkg/kubectl/genericclioptions/printers/name.go similarity index 97% rename from pkg/printers/name.go rename to pkg/kubectl/genericclioptions/printers/name.go index 5aa694bfa9..d04c5c6bbc 100644 --- a/pkg/printers/name.go +++ b/pkg/kubectl/genericclioptions/printers/name.go @@ -45,8 +45,8 @@ func (p *NamePrinter) PrintObj(obj runtime.Object, w io.Writer) error { // we use reflect.Indirect here in order to obtain the actual value from a pointer. // using reflect.Indirect indiscriminately is valid here, as all runtime.Objects are supposed to be pointers. // we need an actual value in order to retrieve the package path for an object. - if internalObjectPreventer.IsForbidden(reflect.Indirect(reflect.ValueOf(obj)).Type().PkgPath()) { - return fmt.Errorf(internalObjectPrinterErr) + if InternalObjectPreventer.IsForbidden(reflect.Indirect(reflect.ValueOf(obj)).Type().PkgPath()) { + return fmt.Errorf(InternalObjectPrinterErr) } if meta.IsListType(obj) { diff --git a/pkg/kubectl/genericclioptions/printers/sourcechecker.go b/pkg/kubectl/genericclioptions/printers/sourcechecker.go new file mode 100644 index 0000000000..11d672cc91 --- /dev/null +++ b/pkg/kubectl/genericclioptions/printers/sourcechecker.go @@ -0,0 +1,60 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed 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 printers + +import ( + "strings" +) + +var ( + InternalObjectPrinterErr = "a versioned object must be passed to a printer" + + // disallowedPackagePrefixes contains regular expression templates + // for object package paths that are not allowed by printers. + disallowedPackagePrefixes = []string{ + "k8s.io/kubernetes/pkg/apis/", + } +) + +var InternalObjectPreventer = &illegalPackageSourceChecker{disallowedPackagePrefixes} + +func IsInternalObjectError(err error) bool { + if err == nil { + return false + } + + return err.Error() == InternalObjectPrinterErr +} + +// illegalPackageSourceChecker compares a given +// object's package path, and determines if the +// object originates from a disallowed source. +type illegalPackageSourceChecker struct { + // disallowedPrefixes is a slice of disallowed package path + // prefixes for a given runtime.Object that we are printing. + disallowedPrefixes []string +} + +func (c *illegalPackageSourceChecker) IsForbidden(pkgPath string) bool { + for _, forbiddenPrefix := range c.disallowedPrefixes { + if strings.HasPrefix(pkgPath, forbiddenPrefix) { + return true + } + } + + return false +} diff --git a/pkg/printers/flags_test.go b/pkg/kubectl/genericclioptions/printers/sourcechecker_test.go similarity index 100% rename from pkg/printers/flags_test.go rename to pkg/kubectl/genericclioptions/printers/sourcechecker_test.go diff --git a/pkg/printers/typesetter.go b/pkg/kubectl/genericclioptions/printers/typesetter.go similarity index 100% rename from pkg/printers/typesetter.go rename to pkg/kubectl/genericclioptions/printers/typesetter.go diff --git a/pkg/printers/BUILD b/pkg/printers/BUILD index cf60c45f98..1b2d8c111b 100644 --- a/pkg/printers/BUILD +++ b/pkg/printers/BUILD @@ -11,25 +11,20 @@ go_library( srcs = [ "customcolumn.go", "customcolumn_flags.go", - "flags.go", "humanreadable.go", "interface.go", - "json.go", - "json_yaml_flags.go", "jsonpath.go", "jsonpath_flags.go", "kube_template_flags.go", - "name.go", - "name_flags.go", "tabwriter.go", "template.go", "template_flags.go", - "typesetter.go", ], importpath = "k8s.io/kubernetes/pkg/printers", deps = [ + "//pkg/kubectl/genericclioptions:go_default_library", + "//pkg/kubectl/genericclioptions/printers:go_default_library", "//pkg/kubectl/scheme:go_default_library", - "//vendor/github.com/ghodss/yaml:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library", "//vendor/k8s.io/apimachinery/pkg/api/meta:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", @@ -43,26 +38,6 @@ go_library( ], ) -go_test( - name = "go_default_xtest", - srcs = [ - "customcolumn_flags_test.go", - "customcolumn_test.go", - "json_yaml_flags_test.go", - "jsonpath_flags_test.go", - "name_flags_test.go", - "template_flags_test.go", - ], - deps = [ - ":go_default_library", - "//pkg/api/legacyscheme:go_default_library", - "//pkg/apis/core:go_default_library", - "//vendor/k8s.io/api/core/v1:go_default_library", - "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", - "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library", - ], -) - filegroup( name = "package-srcs", srcs = glob(["**"]), @@ -83,13 +58,18 @@ filegroup( go_test( name = "go_default_test", srcs = [ - "flags_test.go", + "customcolumn_flags_test.go", + "customcolumn_test.go", "humanreadable_test.go", + "jsonpath_flags_test.go", + "template_flags_test.go", "template_test.go", ], embed = [":go_default_library"], deps = [ + "//pkg/api/legacyscheme:go_default_library", "//pkg/apis/core:go_default_library", + "//pkg/kubectl/genericclioptions:go_default_library", "//vendor/k8s.io/api/core/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1:go_default_library", diff --git a/pkg/printers/customcolumn.go b/pkg/printers/customcolumn.go index 9aee658a2c..45141e0cba 100644 --- a/pkg/printers/customcolumn.go +++ b/pkg/printers/customcolumn.go @@ -29,6 +29,7 @@ import ( "k8s.io/apimachinery/pkg/api/meta" "k8s.io/apimachinery/pkg/runtime" "k8s.io/client-go/util/jsonpath" + "k8s.io/kubernetes/pkg/kubectl/genericclioptions/printers" ) var jsonRegexp = regexp.MustCompile("^\\{\\.?([^{}]+)\\}$|^\\.?([^{}]+)$") @@ -154,8 +155,8 @@ func (s *CustomColumnsPrinter) PrintObj(obj runtime.Object, out io.Writer) error // we use reflect.Indirect here in order to obtain the actual value from a pointer. // we need an actual value in order to retrieve the package path for an object. // using reflect.Indirect indiscriminately is valid here, as all runtime.Objects are supposed to be pointers. - if internalObjectPreventer.IsForbidden(reflect.Indirect(reflect.ValueOf(obj)).Type().PkgPath()) { - return fmt.Errorf(internalObjectPrinterErr) + if printers.InternalObjectPreventer.IsForbidden(reflect.Indirect(reflect.ValueOf(obj)).Type().PkgPath()) { + return fmt.Errorf(printers.InternalObjectPrinterErr) } if w, found := out.(*tabwriter.Writer); !found { diff --git a/pkg/printers/customcolumn_flags.go b/pkg/printers/customcolumn_flags.go index 920835f64c..b982942ae9 100644 --- a/pkg/printers/customcolumn_flags.go +++ b/pkg/printers/customcolumn_flags.go @@ -23,6 +23,7 @@ import ( "github.com/spf13/cobra" + "k8s.io/kubernetes/pkg/kubectl/genericclioptions" "k8s.io/kubernetes/pkg/kubectl/scheme" ) @@ -39,7 +40,7 @@ type CustomColumnsPrintFlags struct { // Supported format types can be found in pkg/printers/printers.go func (f *CustomColumnsPrintFlags) ToPrinter(templateFormat string) (ResourcePrinter, error) { if len(templateFormat) == 0 { - return nil, NoCompatiblePrinterError{} + return nil, genericclioptions.NoCompatiblePrinterError{} } templateValue := "" @@ -63,7 +64,7 @@ func (f *CustomColumnsPrintFlags) ToPrinter(templateFormat string) (ResourcePrin } if _, supportedFormat := supportedFormats[templateFormat]; !supportedFormat { - return nil, NoCompatiblePrinterError{} + return nil, genericclioptions.NoCompatiblePrinterError{} } if len(templateValue) == 0 { @@ -82,8 +83,7 @@ func (f *CustomColumnsPrintFlags) ToPrinter(templateFormat string) (ResourcePrin return p, err } - p, err := NewCustomColumnsPrinterFromSpec(templateValue, decoder, f.NoHeaders) - return p, err + return NewCustomColumnsPrinterFromSpec(templateValue, decoder, f.NoHeaders) } // AddFlags receives a *cobra.Command reference and binds diff --git a/pkg/printers/customcolumn_flags_test.go b/pkg/printers/customcolumn_flags_test.go index 550d261fe1..1aed874492 100644 --- a/pkg/printers/customcolumn_flags_test.go +++ b/pkg/printers/customcolumn_flags_test.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package printers_test +package printers import ( "bytes" @@ -26,7 +26,7 @@ import ( "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/kubernetes/pkg/printers" + "k8s.io/kubernetes/pkg/kubectl/genericclioptions" ) func TestPrinterSupportsExpectedCustomColumnFormats(t *testing.T) { @@ -94,18 +94,18 @@ func TestPrinterSupportsExpectedCustomColumnFormats(t *testing.T) { for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { - printFlags := printers.CustomColumnsPrintFlags{ + printFlags := CustomColumnsPrintFlags{ TemplateArgument: tc.templateArg, } p, err := printFlags.ToPrinter(tc.outputFormat) if tc.expectNoMatch { - if !printers.IsNoCompatiblePrinterError(err) { + if !genericclioptions.IsNoCompatiblePrinterError(err) { t.Fatalf("expected no printer matches for output format %q", tc.outputFormat) } return } - if printers.IsNoCompatiblePrinterError(err) { + if genericclioptions.IsNoCompatiblePrinterError(err) { t.Fatalf("expected to match template printer for output format %q", tc.outputFormat) } diff --git a/pkg/printers/customcolumn_test.go b/pkg/printers/customcolumn_test.go index fd4a28c00b..d01c9c1235 100644 --- a/pkg/printers/customcolumn_test.go +++ b/pkg/printers/customcolumn_test.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package printers_test +package printers import ( "bytes" @@ -27,7 +27,6 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/kubernetes/pkg/api/legacyscheme" api "k8s.io/kubernetes/pkg/apis/core" - "k8s.io/kubernetes/pkg/printers" ) func TestMassageJSONPath(t *testing.T) { @@ -48,7 +47,7 @@ func TestMassageJSONPath(t *testing.T) { } for _, test := range tests { t.Run(test.input, func(t *testing.T) { - output, err := printers.RelaxedJSONPathExpression(test.input) + output, err := RelaxedJSONPathExpression(test.input) if err != nil && !test.expectErr { t.Errorf("unexpected error: %v", err) return @@ -69,7 +68,7 @@ func TestMassageJSONPath(t *testing.T) { func TestNewColumnPrinterFromSpec(t *testing.T) { tests := []struct { spec string - expectedColumns []printers.Column + expectedColumns []Column expectErr bool name string noHeaders bool @@ -97,7 +96,7 @@ func TestNewColumnPrinterFromSpec(t *testing.T) { { spec: "NAME:metadata.name,API_VERSION:apiVersion", name: "ok", - expectedColumns: []printers.Column{ + expectedColumns: []Column{ { Header: "NAME", FieldSpec: "{.metadata.name}", @@ -116,7 +115,7 @@ func TestNewColumnPrinterFromSpec(t *testing.T) { } for _, test := range tests { t.Run(test.name, func(t *testing.T) { - printer, err := printers.NewCustomColumnsPrinterFromSpec(test.spec, legacyscheme.Codecs.UniversalDecoder(), test.noHeaders) + printer, err := NewCustomColumnsPrinterFromSpec(test.spec, legacyscheme.Codecs.UniversalDecoder(), test.noHeaders) if test.expectErr { if err == nil { t.Errorf("[%s] unexpected non-error", test.name) @@ -164,7 +163,7 @@ const exampleTemplateTwo = `NAME API_VERSION func TestNewColumnPrinterFromTemplate(t *testing.T) { tests := []struct { spec string - expectedColumns []printers.Column + expectedColumns []Column expectErr bool name string }{ @@ -191,7 +190,7 @@ func TestNewColumnPrinterFromTemplate(t *testing.T) { { spec: exampleTemplateOne, name: "ok", - expectedColumns: []printers.Column{ + expectedColumns: []Column{ { Header: "NAME", FieldSpec: "{.metadata.name}", @@ -205,7 +204,7 @@ func TestNewColumnPrinterFromTemplate(t *testing.T) { { spec: exampleTemplateTwo, name: "ok-2", - expectedColumns: []printers.Column{ + expectedColumns: []Column{ { Header: "NAME", FieldSpec: "{.metadata.name}", @@ -220,7 +219,7 @@ func TestNewColumnPrinterFromTemplate(t *testing.T) { for _, test := range tests { t.Run(test.name, func(t *testing.T) { reader := bytes.NewBufferString(test.spec) - printer, err := printers.NewCustomColumnsPrinterFromTemplate(reader, legacyscheme.Codecs.UniversalDecoder()) + printer, err := NewCustomColumnsPrinterFromTemplate(reader, legacyscheme.Codecs.UniversalDecoder()) if test.expectErr { if err == nil { t.Errorf("[%s] unexpected non-error", test.name) @@ -241,12 +240,12 @@ func TestNewColumnPrinterFromTemplate(t *testing.T) { func TestColumnPrint(t *testing.T) { tests := []struct { - columns []printers.Column + columns []Column obj runtime.Object expectedOutput string }{ { - columns: []printers.Column{ + columns: []Column{ { Header: "NAME", FieldSpec: "{.metadata.name}", @@ -258,7 +257,7 @@ foo `, }, { - columns: []printers.Column{ + columns: []Column{ { Header: "NAME", FieldSpec: "{.metadata.name}", @@ -276,7 +275,7 @@ bar `, }, { - columns: []printers.Column{ + columns: []Column{ { Header: "NAME", FieldSpec: "{.metadata.name}", @@ -292,7 +291,7 @@ foo baz `, }, { - columns: []printers.Column{ + columns: []Column{ { Header: "NAME", FieldSpec: "{.metadata.name}", @@ -315,7 +314,7 @@ foo baz for _, test := range tests { t.Run(test.expectedOutput, func(t *testing.T) { - printer := &printers.CustomColumnsPrinter{ + printer := &CustomColumnsPrinter{ Columns: test.columns, Decoder: legacyscheme.Codecs.UniversalDecoder(), } @@ -332,7 +331,7 @@ foo baz // this mimics how resource/get.go calls the customcolumn printer func TestIndividualPrintObjOnExistingTabWriter(t *testing.T) { - columns := []printers.Column{ + columns := []Column{ { Header: "NAME", FieldSpec: "{.metadata.name}", @@ -356,8 +355,8 @@ bar bar bar ` buffer := &bytes.Buffer{} - tabWriter := printers.GetNewTabWriter(buffer) - printer := &printers.CustomColumnsPrinter{ + tabWriter := GetNewTabWriter(buffer) + printer := &CustomColumnsPrinter{ Columns: columns, Decoder: legacyscheme.Codecs.UniversalDecoder(), } diff --git a/pkg/printers/internalversion/BUILD b/pkg/printers/internalversion/BUILD index c28c99c094..8ad635a01e 100644 --- a/pkg/printers/internalversion/BUILD +++ b/pkg/printers/internalversion/BUILD @@ -27,6 +27,8 @@ go_test( "//pkg/apis/storage:go_default_library", "//pkg/client/clientset_generated/internalclientset:go_default_library", "//pkg/client/clientset_generated/internalclientset/fake:go_default_library", + "//pkg/kubectl/genericclioptions:go_default_library", + "//pkg/kubectl/genericclioptions/printers:go_default_library", "//pkg/printers:go_default_library", "//pkg/util/pointer:go_default_library", "//vendor/github.com/ghodss/yaml:go_default_library", diff --git a/pkg/printers/internalversion/printers_test.go b/pkg/printers/internalversion/printers_test.go index 2c6a1c3c57..a3739cf3ea 100644 --- a/pkg/printers/internalversion/printers_test.go +++ b/pkg/printers/internalversion/printers_test.go @@ -50,6 +50,8 @@ import ( "k8s.io/kubernetes/pkg/apis/extensions" "k8s.io/kubernetes/pkg/apis/policy" "k8s.io/kubernetes/pkg/apis/storage" + "k8s.io/kubernetes/pkg/kubectl/genericclioptions" + genericprinters "k8s.io/kubernetes/pkg/kubectl/genericclioptions/printers" "k8s.io/kubernetes/pkg/printers" ) @@ -255,11 +257,11 @@ func testPrinter(t *testing.T, printer printers.ResourcePrinter, unmarshalFunc f } func TestYAMLPrinter(t *testing.T) { - testPrinter(t, printers.NewTypeSetter(legacyscheme.Scheme).ToPrinter(&printers.YAMLPrinter{}), yaml.Unmarshal) + testPrinter(t, genericprinters.NewTypeSetter(legacyscheme.Scheme).ToPrinter(&genericprinters.YAMLPrinter{}), yaml.Unmarshal) } func TestJSONPrinter(t *testing.T) { - testPrinter(t, printers.NewTypeSetter(legacyscheme.Scheme).ToPrinter(&printers.JSONPrinter{}), json.Unmarshal) + testPrinter(t, genericprinters.NewTypeSetter(legacyscheme.Scheme).ToPrinter(&genericprinters.JSONPrinter{}), json.Unmarshal) } func TestFormatResourceName(t *testing.T) { @@ -385,7 +387,7 @@ func TestNamePrinter(t *testing.T) { "pod/bar\n"}, } - printFlags := printers.NewPrintFlags("").WithTypeSetter(legacyscheme.Scheme).WithDefaultOutput("name") + printFlags := genericclioptions.NewPrintFlags("").WithTypeSetter(legacyscheme.Scheme).WithDefaultOutput("name") printer, err := printFlags.ToPrinter() if err != nil { t.Fatalf("unexpected err: %v", err) @@ -548,8 +550,9 @@ func TestPrinters(t *testing.T) { } genericPrinters := map[string]printers.ResourcePrinter{ - "json": printers.NewTypeSetter(legacyscheme.Scheme).ToPrinter(&printers.JSONPrinter{}), - "yaml": printers.NewTypeSetter(legacyscheme.Scheme).ToPrinter(&printers.YAMLPrinter{}), + // TODO(juanvallejo): move "generic printer" tests to pkg/kubectl/genericclioptions/printers + "json": genericprinters.NewTypeSetter(legacyscheme.Scheme).ToPrinter(&genericprinters.JSONPrinter{}), + "yaml": genericprinters.NewTypeSetter(legacyscheme.Scheme).ToPrinter(&genericprinters.YAMLPrinter{}), "template": templatePrinter, "template2": templatePrinter2, "jsonpath": jsonpathPrinter, diff --git a/pkg/printers/jsonpath.go b/pkg/printers/jsonpath.go index cc48f538a7..b8ea553f51 100644 --- a/pkg/printers/jsonpath.go +++ b/pkg/printers/jsonpath.go @@ -25,6 +25,7 @@ import ( "k8s.io/apimachinery/pkg/api/meta" "k8s.io/apimachinery/pkg/runtime" "k8s.io/client-go/util/jsonpath" + "k8s.io/kubernetes/pkg/kubectl/genericclioptions/printers" ) // exists returns true if it would be possible to call the index function @@ -118,8 +119,8 @@ func (j *JSONPathPrinter) PrintObj(obj runtime.Object, w io.Writer) error { // we use reflect.Indirect here in order to obtain the actual value from a pointer. // we need an actual value in order to retrieve the package path for an object. // using reflect.Indirect indiscriminately is valid here, as all runtime.Objects are supposed to be pointers. - if internalObjectPreventer.IsForbidden(reflect.Indirect(reflect.ValueOf(obj)).Type().PkgPath()) { - return fmt.Errorf(internalObjectPrinterErr) + if printers.InternalObjectPreventer.IsForbidden(reflect.Indirect(reflect.ValueOf(obj)).Type().PkgPath()) { + return fmt.Errorf(printers.InternalObjectPrinterErr) } var queryObj interface{} = obj diff --git a/pkg/printers/jsonpath_flags.go b/pkg/printers/jsonpath_flags.go index 636d6cd015..49a559d624 100644 --- a/pkg/printers/jsonpath_flags.go +++ b/pkg/printers/jsonpath_flags.go @@ -22,6 +22,8 @@ import ( "strings" "github.com/spf13/cobra" + + "k8s.io/kubernetes/pkg/kubectl/genericclioptions" ) // JSONPathPrintFlags provides default flags necessary for template printing. @@ -39,7 +41,7 @@ type JSONPathPrintFlags struct { // Returns false if the specified templateFormat does not match a template format. func (f *JSONPathPrintFlags) ToPrinter(templateFormat string) (ResourcePrinter, error) { if (f.TemplateArgument == nil || len(*f.TemplateArgument) == 0) && len(templateFormat) == 0 { - return nil, NoCompatiblePrinterError{Options: f, OutputFormat: &templateFormat} + return nil, genericclioptions.NoCompatiblePrinterError{Options: f, OutputFormat: &templateFormat} } templateValue := "" @@ -66,7 +68,7 @@ func (f *JSONPathPrintFlags) ToPrinter(templateFormat string) (ResourcePrinter, } if _, supportedFormat := templateFormats[templateFormat]; !supportedFormat { - return nil, NoCompatiblePrinterError{Options: f, OutputFormat: &templateFormat} + return nil, genericclioptions.NoCompatiblePrinterError{Options: f, OutputFormat: &templateFormat} } if len(templateValue) == 0 { diff --git a/pkg/printers/jsonpath_flags_test.go b/pkg/printers/jsonpath_flags_test.go index a84241b14b..2f5b6c4c7c 100644 --- a/pkg/printers/jsonpath_flags_test.go +++ b/pkg/printers/jsonpath_flags_test.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package printers_test +package printers import ( "bytes" @@ -26,7 +26,7 @@ import ( "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/kubernetes/pkg/printers" + "k8s.io/kubernetes/pkg/kubectl/genericclioptions" ) func TestPrinterSupportsExpectedJSONPathFormats(t *testing.T) { @@ -99,18 +99,18 @@ func TestPrinterSupportsExpectedJSONPathFormats(t *testing.T) { templateArg = nil } - printFlags := printers.JSONPathPrintFlags{ + printFlags := JSONPathPrintFlags{ TemplateArgument: templateArg, } p, err := printFlags.ToPrinter(tc.outputFormat) if tc.expectNoMatch { - if !printers.IsNoCompatiblePrinterError(err) { + if !genericclioptions.IsNoCompatiblePrinterError(err) { t.Fatalf("expected no printer matches for output format %q", tc.outputFormat) } return } - if printers.IsNoCompatiblePrinterError(err) { + if genericclioptions.IsNoCompatiblePrinterError(err) { t.Fatalf("expected to match template printer for output format %q", tc.outputFormat) } @@ -177,14 +177,14 @@ func TestJSONPathPrinterDefaultsAllowMissingKeysToTrue(t *testing.T) { for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { - printFlags := printers.JSONPathPrintFlags{ + printFlags := JSONPathPrintFlags{ TemplateArgument: &tc.templateArg, AllowMissingKeys: tc.allowMissingKeys, } outputFormat := "jsonpath" p, err := printFlags.ToPrinter(outputFormat) - if printers.IsNoCompatiblePrinterError(err) { + if genericclioptions.IsNoCompatiblePrinterError(err) { t.Fatalf("expected to match template printer for output format %q", outputFormat) } if err != nil { diff --git a/pkg/printers/kube_template_flags.go b/pkg/printers/kube_template_flags.go index 691c467a70..a5b0c71326 100644 --- a/pkg/printers/kube_template_flags.go +++ b/pkg/printers/kube_template_flags.go @@ -16,7 +16,11 @@ limitations under the License. package printers -import "github.com/spf13/cobra" +import ( + "github.com/spf13/cobra" + + "k8s.io/kubernetes/pkg/kubectl/genericclioptions" +) // KubeTemplatePrintFlags composes print flags that provide both a JSONPath and a go-template printer. // This is necessary if dealing with cases that require support both both printers, since both sets of flags @@ -30,7 +34,7 @@ type KubeTemplatePrintFlags struct { } func (f *KubeTemplatePrintFlags) ToPrinter(outputFormat string) (ResourcePrinter, error) { - if p, err := f.JSONPathPrintFlags.ToPrinter(outputFormat); !IsNoCompatiblePrinterError(err) { + if p, err := f.JSONPathPrintFlags.ToPrinter(outputFormat); !genericclioptions.IsNoCompatiblePrinterError(err) { return p, err } return f.GoTemplatePrintFlags.ToPrinter(outputFormat) diff --git a/pkg/printers/template.go b/pkg/printers/template.go index 6b2a7e2bdd..678b46e3ba 100644 --- a/pkg/printers/template.go +++ b/pkg/printers/template.go @@ -25,6 +25,7 @@ import ( "text/template" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/kubernetes/pkg/kubectl/genericclioptions/printers" ) // GoTemplatePrinter is an implementation of ResourcePrinter which formats data with a Go Template. @@ -60,8 +61,8 @@ func (p *GoTemplatePrinter) AllowMissingKeys(allow bool) { // PrintObj formats the obj with the Go Template. func (p *GoTemplatePrinter) PrintObj(obj runtime.Object, w io.Writer) error { - if internalObjectPreventer.IsForbidden(reflect.Indirect(reflect.ValueOf(obj)).Type().PkgPath()) { - return fmt.Errorf(internalObjectPrinterErr) + if printers.InternalObjectPreventer.IsForbidden(reflect.Indirect(reflect.ValueOf(obj)).Type().PkgPath()) { + return fmt.Errorf(printers.InternalObjectPrinterErr) } var data []byte diff --git a/pkg/printers/template_flags.go b/pkg/printers/template_flags.go index 6d713e415f..0e6d825895 100644 --- a/pkg/printers/template_flags.go +++ b/pkg/printers/template_flags.go @@ -22,6 +22,8 @@ import ( "strings" "github.com/spf13/cobra" + + "k8s.io/kubernetes/pkg/kubectl/genericclioptions" ) // GoTemplatePrintFlags provides default flags necessary for template printing. @@ -39,7 +41,7 @@ type GoTemplatePrintFlags struct { // Returns false if the specified templateFormat does not match a template format. func (f *GoTemplatePrintFlags) ToPrinter(templateFormat string) (ResourcePrinter, error) { if (f.TemplateArgument == nil || len(*f.TemplateArgument) == 0) && len(templateFormat) == 0 { - return nil, NoCompatiblePrinterError{Options: f, OutputFormat: &templateFormat} + return nil, genericclioptions.NoCompatiblePrinterError{Options: f, OutputFormat: &templateFormat} } templateValue := "" @@ -68,7 +70,7 @@ func (f *GoTemplatePrintFlags) ToPrinter(templateFormat string) (ResourcePrinter } if _, supportedFormat := supportedFormats[templateFormat]; !supportedFormat { - return nil, NoCompatiblePrinterError{Options: f, OutputFormat: &templateFormat} + return nil, genericclioptions.NoCompatiblePrinterError{Options: f, OutputFormat: &templateFormat} } if len(templateValue) == 0 { diff --git a/pkg/printers/template_flags_test.go b/pkg/printers/template_flags_test.go index f75e51f033..3a2400ca87 100644 --- a/pkg/printers/template_flags_test.go +++ b/pkg/printers/template_flags_test.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package printers_test +package printers import ( "bytes" @@ -26,7 +26,7 @@ import ( "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/kubernetes/pkg/printers" + "k8s.io/kubernetes/pkg/kubectl/genericclioptions" ) func TestPrinterSupportsExpectedTemplateFormats(t *testing.T) { @@ -99,18 +99,18 @@ func TestPrinterSupportsExpectedTemplateFormats(t *testing.T) { templateArg = nil } - printFlags := printers.GoTemplatePrintFlags{ + printFlags := GoTemplatePrintFlags{ TemplateArgument: templateArg, } p, err := printFlags.ToPrinter(tc.outputFormat) if tc.expectNoMatch { - if !printers.IsNoCompatiblePrinterError(err) { + if !genericclioptions.IsNoCompatiblePrinterError(err) { t.Fatalf("expected no printer matches for output format %q", tc.outputFormat) } return } - if printers.IsNoCompatiblePrinterError(err) { + if genericclioptions.IsNoCompatiblePrinterError(err) { t.Fatalf("expected to match template printer for output format %q", tc.outputFormat) } @@ -171,14 +171,14 @@ func TestTemplatePrinterDefaultsAllowMissingKeysToTrue(t *testing.T) { for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { - printFlags := printers.GoTemplatePrintFlags{ + printFlags := GoTemplatePrintFlags{ TemplateArgument: &tc.templateArg, AllowMissingKeys: tc.allowMissingKeys, } outputFormat := "template" p, err := printFlags.ToPrinter(outputFormat) - if printers.IsNoCompatiblePrinterError(err) { + if genericclioptions.IsNoCompatiblePrinterError(err) { t.Fatalf("expected to match template printer for output format %q", outputFormat) } if err != nil {