move PrintOptions to genericclioptions

pull/8/head
juanvallejo 2018-05-02 15:15:47 -04:00
parent 3693ed095f
commit d1603c9560
77 changed files with 475 additions and 409 deletions

View File

@ -152,6 +152,7 @@ pkg/kubectl/cmd/util/editor
pkg/kubectl/cmd/util/jsonmerge pkg/kubectl/cmd/util/jsonmerge
pkg/kubectl/cmd/util/sanity pkg/kubectl/cmd/util/sanity
pkg/kubectl/genericclioptions pkg/kubectl/genericclioptions
pkg/kubectl/genericclioptions/printers
pkg/kubectl/genericclioptions/resource pkg/kubectl/genericclioptions/resource
pkg/kubectl/metricsutil pkg/kubectl/metricsutil
pkg/kubectl/util pkg/kubectl/util
@ -222,6 +223,7 @@ pkg/kubemark
pkg/master pkg/master
pkg/master/controller/crdregistration pkg/master/controller/crdregistration
pkg/master/tunneler pkg/master/tunneler
pkg/printers
pkg/printers/internalversion pkg/printers/internalversion
pkg/printers/storage pkg/printers/storage
pkg/probe pkg/probe

View File

@ -23,6 +23,7 @@
- k8s.io/client-go - k8s.io/client-go
# TODO this one should be tightened. We depend on it for testing, but we should instead create our own scheme # 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/api/core/v1
- k8s.io/kubernetes/pkg/kubectl/genericclioptions/printers
- baseImportPath: "./vendor/k8s.io/apimachinery/" - baseImportPath: "./vendor/k8s.io/apimachinery/"
allowedImports: allowedImports:

View File

@ -79,6 +79,7 @@ go_library(
"//pkg/kubectl/cmd/util/openapi:go_default_library", "//pkg/kubectl/cmd/util/openapi:go_default_library",
"//pkg/kubectl/explain:go_default_library", "//pkg/kubectl/explain:go_default_library",
"//pkg/kubectl/genericclioptions: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/genericclioptions/resource:go_default_library",
"//pkg/kubectl/metricsutil:go_default_library", "//pkg/kubectl/metricsutil:go_default_library",
"//pkg/kubectl/plugins: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:go_default_library",
"//pkg/kubectl/cmd/util/openapi:go_default_library", "//pkg/kubectl/cmd/util/openapi:go_default_library",
"//pkg/kubectl/genericclioptions: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/genericclioptions/resource:go_default_library",
"//pkg/kubectl/plugins:go_default_library", "//pkg/kubectl/plugins:go_default_library",
"//pkg/kubectl/polymorphichelpers:go_default_library", "//pkg/kubectl/polymorphichelpers:go_default_library",

View File

@ -35,15 +35,15 @@ import (
"k8s.io/kubernetes/pkg/kubectl/cmd/templates" "k8s.io/kubernetes/pkg/kubectl/cmd/templates"
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
"k8s.io/kubernetes/pkg/kubectl/genericclioptions" "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/genericclioptions/resource"
"k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/scheme"
"k8s.io/kubernetes/pkg/kubectl/util/i18n" "k8s.io/kubernetes/pkg/kubectl/util/i18n"
"k8s.io/kubernetes/pkg/printers"
) )
// AnnotateOptions have the data required to perform the annotate operation // AnnotateOptions have the data required to perform the annotate operation
type AnnotateOptions struct { type AnnotateOptions struct {
PrintFlags *printers.PrintFlags PrintFlags *genericclioptions.PrintFlags
PrintObj printers.ResourcePrinterFunc PrintObj printers.ResourcePrinterFunc
// Filename options // Filename options
@ -111,7 +111,7 @@ var (
func NewAnnotateOptions(ioStreams genericclioptions.IOStreams) *AnnotateOptions { func NewAnnotateOptions(ioStreams genericclioptions.IOStreams) *AnnotateOptions {
return &AnnotateOptions{ return &AnnotateOptions{
PrintFlags: printers.NewPrintFlags("annotated").WithTypeSetter(scheme.Scheme), PrintFlags: genericclioptions.NewPrintFlags("annotated").WithTypeSetter(scheme.Scheme),
RecordFlags: genericclioptions.NewRecordFlags(), RecordFlags: genericclioptions.NewRecordFlags(),
Recorder: genericclioptions.NoopRecorder{}, Recorder: genericclioptions.NoopRecorder{},

View File

@ -49,19 +49,19 @@ import (
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
"k8s.io/kubernetes/pkg/kubectl/cmd/util/openapi" "k8s.io/kubernetes/pkg/kubectl/cmd/util/openapi"
"k8s.io/kubernetes/pkg/kubectl/genericclioptions" "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/genericclioptions/resource"
"k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/scheme"
"k8s.io/kubernetes/pkg/kubectl/util/i18n" "k8s.io/kubernetes/pkg/kubectl/util/i18n"
"k8s.io/kubernetes/pkg/kubectl/validation" "k8s.io/kubernetes/pkg/kubectl/validation"
"k8s.io/kubernetes/pkg/printers"
) )
type ApplyOptions struct { type ApplyOptions struct {
RecordFlags *genericclioptions.RecordFlags RecordFlags *genericclioptions.RecordFlags
Recorder genericclioptions.Recorder Recorder genericclioptions.Recorder
PrintFlags *printers.PrintFlags PrintFlags *genericclioptions.PrintFlags
ToPrinter func(string) (printers.ResourcePrinterFunc, error) ToPrinter func(string) (printers.ResourcePrinter, error)
DeleteFlags *DeleteFlags DeleteFlags *DeleteFlags
DeleteOptions *DeleteOptions DeleteOptions *DeleteOptions
@ -131,7 +131,7 @@ func NewApplyOptions(ioStreams genericclioptions.IOStreams) *ApplyOptions {
return &ApplyOptions{ return &ApplyOptions{
RecordFlags: genericclioptions.NewRecordFlags(), RecordFlags: genericclioptions.NewRecordFlags(),
DeleteFlags: NewDeleteFlags("that contains the configuration to apply"), DeleteFlags: NewDeleteFlags("that contains the configuration to apply"),
PrintFlags: printers.NewPrintFlags("created").WithTypeSetter(scheme.Scheme), PrintFlags: genericclioptions.NewPrintFlags("created").WithTypeSetter(scheme.Scheme),
Overwrite: true, Overwrite: true,
OpenApiPatch: true, OpenApiPatch: true,
@ -191,17 +191,13 @@ func (o *ApplyOptions) Complete(f cmdutil.Factory, cmd *cobra.Command) error {
o.DryRun = cmdutil.GetDryRunFlag(cmd) o.DryRun = cmdutil.GetDryRunFlag(cmd)
// allow for a success message operation to be specified at print time // 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 o.PrintFlags.NamePrintFlags.Operation = operation
if o.DryRun { if o.DryRun {
o.PrintFlags.Complete("%s (dry run)") o.PrintFlags.Complete("%s (dry run)")
} }
printer, err := o.PrintFlags.ToPrinter() return o.PrintFlags.ToPrinter()
if err != nil {
return nil, err
}
return printer.PrintObj, nil
} }
var err error var err error
@ -592,7 +588,7 @@ type pruner struct {
scaler scaleclient.ScalesGetter scaler scaleclient.ScalesGetter
toPrinter func(string) (printers.ResourcePrinterFunc, error) toPrinter func(string) (printers.ResourcePrinter, error)
out io.Writer out io.Writer
} }

View File

@ -31,16 +31,16 @@ import (
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
"k8s.io/kubernetes/pkg/kubectl/cmd/util/editor" "k8s.io/kubernetes/pkg/kubectl/cmd/util/editor"
"k8s.io/kubernetes/pkg/kubectl/genericclioptions" "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/genericclioptions/resource"
"k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/scheme"
"k8s.io/kubernetes/pkg/kubectl/util/i18n" "k8s.io/kubernetes/pkg/kubectl/util/i18n"
"k8s.io/kubernetes/pkg/printers"
) )
type SetLastAppliedOptions struct { type SetLastAppliedOptions struct {
CreateAnnotation bool CreateAnnotation bool
PrintFlags *printers.PrintFlags PrintFlags *genericclioptions.PrintFlags
PrintObj printers.ResourcePrinterFunc PrintObj printers.ResourcePrinterFunc
FilenameOptions resource.FilenameOptions FilenameOptions resource.FilenameOptions
@ -83,7 +83,7 @@ var (
func NewSetLastAppliedOptions(ioStreams genericclioptions.IOStreams) *SetLastAppliedOptions { func NewSetLastAppliedOptions(ioStreams genericclioptions.IOStreams) *SetLastAppliedOptions {
return &SetLastAppliedOptions{ return &SetLastAppliedOptions{
PrintFlags: printers.NewPrintFlags("configured").WithTypeSetter(scheme.Scheme), PrintFlags: genericclioptions.NewPrintFlags("configured").WithTypeSetter(scheme.Scheme),
IOStreams: ioStreams, IOStreams: ioStreams,
} }
} }

View File

@ -25,9 +25,9 @@ go_library(
"//pkg/kubectl/cmd/templates:go_default_library", "//pkg/kubectl/cmd/templates:go_default_library",
"//pkg/kubectl/cmd/util:go_default_library", "//pkg/kubectl/cmd/util:go_default_library",
"//pkg/kubectl/genericclioptions: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/genericclioptions/resource:go_default_library",
"//pkg/kubectl/scheme:go_default_library", "//pkg/kubectl/scheme:go_default_library",
"//pkg/printers:go_default_library",
"//pkg/registry/rbac/reconciliation:go_default_library", "//pkg/registry/rbac/reconciliation:go_default_library",
"//vendor/github.com/golang/glog:go_default_library", "//vendor/github.com/golang/glog:go_default_library",
"//vendor/github.com/spf13/cobra:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library",

View File

@ -29,16 +29,16 @@ import (
"k8s.io/kubernetes/pkg/kubectl/cmd/templates" "k8s.io/kubernetes/pkg/kubectl/cmd/templates"
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
"k8s.io/kubernetes/pkg/kubectl/genericclioptions" "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/genericclioptions/resource"
"k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/scheme"
"k8s.io/kubernetes/pkg/printers"
"k8s.io/kubernetes/pkg/registry/rbac/reconciliation" "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 // 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() // referencing the cmd.Flags()
type ReconcileOptions struct { type ReconcileOptions struct {
PrintFlags *printers.PrintFlags PrintFlags *genericclioptions.PrintFlags
FilenameOptions *resource.FilenameOptions FilenameOptions *resource.FilenameOptions
Visitor resource.Visitor Visitor resource.Visitor
@ -64,7 +64,7 @@ var (
func NewReconcileOptions(ioStreams genericclioptions.IOStreams) *ReconcileOptions { func NewReconcileOptions(ioStreams genericclioptions.IOStreams) *ReconcileOptions {
return &ReconcileOptions{ return &ReconcileOptions{
FilenameOptions: &resource.FilenameOptions{}, FilenameOptions: &resource.FilenameOptions{},
PrintFlags: printers.NewPrintFlags("reconciled").WithTypeSetter(scheme.Scheme), PrintFlags: genericclioptions.NewPrintFlags("reconciled").WithTypeSetter(scheme.Scheme),
IOStreams: ioStreams, IOStreams: ioStreams,
} }
} }

View File

@ -31,10 +31,10 @@ import (
"k8s.io/kubernetes/pkg/kubectl/cmd/templates" "k8s.io/kubernetes/pkg/kubectl/cmd/templates"
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
"k8s.io/kubernetes/pkg/kubectl/genericclioptions" "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/genericclioptions/resource"
"k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/scheme"
"k8s.io/kubernetes/pkg/kubectl/util/i18n" "k8s.io/kubernetes/pkg/kubectl/util/i18n"
"k8s.io/kubernetes/pkg/printers"
) )
var ( var (
@ -58,8 +58,8 @@ type AutoscaleOptions struct {
RecordFlags *genericclioptions.RecordFlags RecordFlags *genericclioptions.RecordFlags
Recorder genericclioptions.Recorder Recorder genericclioptions.Recorder
PrintFlags *printers.PrintFlags PrintFlags *genericclioptions.PrintFlags
ToPrinter func(string) (printers.ResourcePrinterFunc, error) ToPrinter func(string) (printers.ResourcePrinter, error)
Name string Name string
Generator string Generator string
@ -83,7 +83,7 @@ type AutoscaleOptions struct {
func NewAutoscaleOptions(ioStreams genericclioptions.IOStreams) *AutoscaleOptions { func NewAutoscaleOptions(ioStreams genericclioptions.IOStreams) *AutoscaleOptions {
return &AutoscaleOptions{ return &AutoscaleOptions{
PrintFlags: printers.NewPrintFlags("autoscaled").WithTypeSetter(scheme.Scheme), PrintFlags: genericclioptions.NewPrintFlags("autoscaled").WithTypeSetter(scheme.Scheme),
FilenameOptions: &resource.FilenameOptions{}, FilenameOptions: &resource.FilenameOptions{},
RecordFlags: genericclioptions.NewRecordFlags(), RecordFlags: genericclioptions.NewRecordFlags(),
Recorder: genericclioptions.NoopRecorder{}, Recorder: genericclioptions.NoopRecorder{},
@ -170,18 +170,13 @@ func (o *AutoscaleOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args
return err return err
} }
o.ToPrinter = func(operation string) (printers.ResourcePrinterFunc, error) { o.ToPrinter = func(operation string) (printers.ResourcePrinter, error) {
o.PrintFlags.NamePrintFlags.Operation = operation o.PrintFlags.NamePrintFlags.Operation = operation
if o.dryRun { if o.dryRun {
o.PrintFlags.Complete("%s (dry run)") o.PrintFlags.Complete("%s (dry run)")
} }
printer, err := o.PrintFlags.ToPrinter() return o.PrintFlags.ToPrinter()
if err != nil {
return nil, err
}
return printer.PrintObj, nil
} }
return nil return nil

View File

@ -29,10 +29,10 @@ import (
"k8s.io/kubernetes/pkg/kubectl/cmd/templates" "k8s.io/kubernetes/pkg/kubectl/cmd/templates"
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
"k8s.io/kubernetes/pkg/kubectl/genericclioptions" "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/genericclioptions/resource"
"k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/scheme"
"k8s.io/kubernetes/pkg/kubectl/util/i18n" "k8s.io/kubernetes/pkg/kubectl/util/i18n"
"k8s.io/kubernetes/pkg/printers"
"github.com/spf13/cobra" "github.com/spf13/cobra"
) )
@ -57,7 +57,7 @@ func NewCmdCertificate(f cmdutil.Factory, ioStreams genericclioptions.IOStreams)
type CertificateOptions struct { type CertificateOptions struct {
resource.FilenameOptions resource.FilenameOptions
PrintFlags *printers.PrintFlags PrintFlags *genericclioptions.PrintFlags
PrintObj printers.ResourcePrinterFunc PrintObj printers.ResourcePrinterFunc
csrNames []string csrNames []string
@ -100,7 +100,7 @@ func (o *CertificateOptions) Validate() error {
func NewCmdCertificateApprove(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *cobra.Command { func NewCmdCertificateApprove(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *cobra.Command {
options := CertificateOptions{ options := CertificateOptions{
PrintFlags: printers.NewPrintFlags("approved").WithTypeSetter(scheme.Scheme), PrintFlags: genericclioptions.NewPrintFlags("approved").WithTypeSetter(scheme.Scheme),
IOStreams: ioStreams, IOStreams: ioStreams,
} }
cmd := &cobra.Command{ cmd := &cobra.Command{
@ -157,7 +157,7 @@ func (o *CertificateOptions) RunCertificateApprove(force bool) error {
func NewCmdCertificateDeny(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *cobra.Command { func NewCmdCertificateDeny(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *cobra.Command {
options := CertificateOptions{ options := CertificateOptions{
PrintFlags: printers.NewPrintFlags("denied").WithTypeSetter(scheme.Scheme), PrintFlags: genericclioptions.NewPrintFlags("denied").WithTypeSetter(scheme.Scheme),
IOStreams: ioStreams, IOStreams: ioStreams,
} }
cmd := &cobra.Command{ cmd := &cobra.Command{

View File

@ -31,14 +31,14 @@ import (
"k8s.io/kubernetes/pkg/kubectl/cmd/templates" "k8s.io/kubernetes/pkg/kubectl/cmd/templates"
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
"k8s.io/kubernetes/pkg/kubectl/genericclioptions" "k8s.io/kubernetes/pkg/kubectl/genericclioptions"
"k8s.io/kubernetes/pkg/kubectl/genericclioptions/printers"
"k8s.io/kubernetes/pkg/kubectl/polymorphichelpers" "k8s.io/kubernetes/pkg/kubectl/polymorphichelpers"
"k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/scheme"
"k8s.io/kubernetes/pkg/kubectl/util/i18n" "k8s.io/kubernetes/pkg/kubectl/util/i18n"
"k8s.io/kubernetes/pkg/printers"
) )
type ClusterInfoDumpOptions struct { type ClusterInfoDumpOptions struct {
PrintFlags *printers.PrintFlags PrintFlags *genericclioptions.PrintFlags
PrintObj printers.ResourcePrinterFunc PrintObj printers.ResourcePrinterFunc
OutputDir string OutputDir string
@ -57,7 +57,7 @@ type ClusterInfoDumpOptions struct {
// NewCmdCreateSecret groups subcommands to create various types of secrets // NewCmdCreateSecret groups subcommands to create various types of secrets
func NewCmdClusterInfoDump(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *cobra.Command { func NewCmdClusterInfoDump(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *cobra.Command {
o := &ClusterInfoDumpOptions{ o := &ClusterInfoDumpOptions{
PrintFlags: printers.NewPrintFlags("").WithTypeSetter(scheme.Scheme), PrintFlags: genericclioptions.NewPrintFlags("").WithTypeSetter(scheme.Scheme),
IOStreams: ioStreams, IOStreams: ioStreams,
} }

View File

@ -24,6 +24,8 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime"
api "k8s.io/kubernetes/pkg/apis/core" 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/kubectl/scheme"
"k8s.io/kubernetes/pkg/printers" "k8s.io/kubernetes/pkg/printers"
) )
@ -81,7 +83,7 @@ func TestIllegalPackageSourceCheckerThroughPrintFlags(t *testing.T) {
} }
for _, tc := range testCases { for _, tc := range testCases {
printFlags := printers.NewPrintFlags("succeeded").WithTypeSetter(scheme.Scheme) printFlags := genericclioptions.NewPrintFlags("succeeded").WithTypeSetter(scheme.Scheme)
printFlags.OutputFormat = &tc.output printFlags.OutputFormat = &tc.output
printer, err := printFlags.ToPrinter() printer, err := printFlags.ToPrinter()
@ -97,7 +99,7 @@ func TestIllegalPackageSourceCheckerThroughPrintFlags(t *testing.T) {
t.Fatalf("unexpected error %v", err) 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) t.Fatalf("unexpected error - expecting internal object printer error, got %q", err)
} }
continue continue
@ -143,13 +145,13 @@ func TestIllegalPackageSourceCheckerDirectlyThroughPrinters(t *testing.T) {
{ {
name: "json printer: object containing package path beginning with forbidden prefix is rejected", name: "json printer: object containing package path beginning with forbidden prefix is rejected",
expectInternalObjErr: true, expectInternalObjErr: true,
printer: &printers.JSONPrinter{}, printer: &genericprinters.JSONPrinter{},
obj: internalPod(), obj: internalPod(),
}, },
{ {
name: "yaml printer: object containing package path beginning with forbidden prefix is rejected", name: "yaml printer: object containing package path beginning with forbidden prefix is rejected",
expectInternalObjErr: true, expectInternalObjErr: true,
printer: &printers.YAMLPrinter{}, printer: &genericprinters.YAMLPrinter{},
obj: internalPod(), obj: internalPod(),
}, },
{ {
@ -187,7 +189,7 @@ func TestIllegalPackageSourceCheckerDirectlyThroughPrinters(t *testing.T) {
t.Fatalf("unexpected error %v", err) 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) t.Fatalf("unexpected error - expecting internal object printer error, got %q", err)
} }
continue continue

View File

@ -33,6 +33,7 @@ go_library(
"//pkg/kubectl/cmd/templates:go_default_library", "//pkg/kubectl/cmd/templates:go_default_library",
"//pkg/kubectl/cmd/util:go_default_library", "//pkg/kubectl/cmd/util:go_default_library",
"//pkg/kubectl/genericclioptions:go_default_library", "//pkg/kubectl/genericclioptions:go_default_library",
"//pkg/kubectl/genericclioptions/printers:go_default_library",
"//pkg/kubectl/util/i18n:go_default_library", "//pkg/kubectl/util/i18n:go_default_library",
"//pkg/printers:go_default_library", "//pkg/printers:go_default_library",
"//vendor/github.com/spf13/cobra:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library",

View File

@ -20,6 +20,8 @@ import (
"github.com/spf13/cobra" "github.com/spf13/cobra"
"k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime"
"k8s.io/kubernetes/pkg/kubectl/genericclioptions"
genericprinters "k8s.io/kubernetes/pkg/kubectl/genericclioptions/printers"
"k8s.io/kubernetes/pkg/printers" "k8s.io/kubernetes/pkg/printers"
) )
@ -27,11 +29,11 @@ import (
// used across all config commands, and provides a method // used across all config commands, and provides a method
// of retrieving a known printer based on flag values provided. // of retrieving a known printer based on flag values provided.
type kubectlConfigPrintFlags struct { type kubectlConfigPrintFlags struct {
JSONYamlPrintFlags *printers.JSONYamlPrintFlags JSONYamlPrintFlags *genericclioptions.JSONYamlPrintFlags
NamePrintFlags *printers.NamePrintFlags NamePrintFlags *genericclioptions.NamePrintFlags
TemplateFlags *printers.KubeTemplatePrintFlags TemplateFlags *printers.KubeTemplatePrintFlags
TypeSetter *printers.TypeSetterPrinter TypeSetter *genericprinters.TypeSetterPrinter
OutputFormat *string OutputFormat *string
} }
@ -46,19 +48,19 @@ func (f *kubectlConfigPrintFlags) ToPrinter() (printers.ResourcePrinter, error)
outputFormat = *f.OutputFormat 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) 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) 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 f.TypeSetter.WrapToPrinter(p, err)
} }
return nil, printers.NoCompatiblePrinterError{Options: f} return nil, genericclioptions.NoCompatiblePrinterError{Options: f}
} }
func (f *kubectlConfigPrintFlags) AddFlags(cmd *cobra.Command) { func (f *kubectlConfigPrintFlags) AddFlags(cmd *cobra.Command) {
@ -83,10 +85,10 @@ func newKubeConfigPrintFlags(scheme runtime.ObjectTyper) *kubectlConfigPrintFlag
return &kubectlConfigPrintFlags{ return &kubectlConfigPrintFlags{
OutputFormat: &outputFormat, OutputFormat: &outputFormat,
JSONYamlPrintFlags: printers.NewJSONYamlPrintFlags(), JSONYamlPrintFlags: genericclioptions.NewJSONYamlPrintFlags(),
NamePrintFlags: printers.NewNamePrintFlags(""), NamePrintFlags: genericclioptions.NewNamePrintFlags(""),
TemplateFlags: printers.NewKubeTemplatePrintFlags(), TemplateFlags: printers.NewKubeTemplatePrintFlags(),
TypeSetter: printers.NewTypeSetter(scheme), TypeSetter: genericprinters.NewTypeSetter(scheme),
} }
} }

View File

@ -27,9 +27,9 @@ import (
"k8s.io/kubernetes/pkg/kubectl/cmd/templates" "k8s.io/kubernetes/pkg/kubectl/cmd/templates"
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
"k8s.io/kubernetes/pkg/kubectl/genericclioptions" "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/genericclioptions/resource"
"k8s.io/kubernetes/pkg/kubectl/util/i18n" "k8s.io/kubernetes/pkg/kubectl/util/i18n"
"k8s.io/kubernetes/pkg/printers"
"github.com/golang/glog" "github.com/golang/glog"
"github.com/spf13/cobra" "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 // ConvertOptions have the data required to perform the convert operation
type ConvertOptions struct { type ConvertOptions struct {
PrintFlags *printers.PrintFlags PrintFlags *genericclioptions.PrintFlags
PrintObj printers.ResourcePrinterFunc PrintObj printers.ResourcePrinterFunc
resource.FilenameOptions resource.FilenameOptions
@ -103,7 +103,7 @@ type ConvertOptions struct {
func NewConvertOptions(ioStreams genericclioptions.IOStreams) *ConvertOptions { func NewConvertOptions(ioStreams genericclioptions.IOStreams) *ConvertOptions {
return &ConvertOptions{ return &ConvertOptions{
PrintFlags: printers.NewPrintFlags("converted").WithTypeSetter(scheme.Scheme).WithDefaultOutput("yaml"), PrintFlags: genericclioptions.NewPrintFlags("converted").WithTypeSetter(scheme.Scheme).WithDefaultOutput("yaml"),
local: true, local: true,
IOStreams: ioStreams, IOStreams: ioStreams,
} }

View File

@ -29,6 +29,7 @@ go_library(
"//pkg/kubectl/cmd/util:go_default_library", "//pkg/kubectl/cmd/util:go_default_library",
"//pkg/kubectl/cmd/util/editor:go_default_library", "//pkg/kubectl/cmd/util/editor:go_default_library",
"//pkg/kubectl/genericclioptions: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/genericclioptions/resource:go_default_library",
"//pkg/kubectl/scheme:go_default_library", "//pkg/kubectl/scheme:go_default_library",
"//pkg/kubectl/util/i18n:go_default_library", "//pkg/kubectl/util/i18n:go_default_library",

View File

@ -18,8 +18,10 @@ package create
import ( import (
"github.com/spf13/cobra" "github.com/spf13/cobra"
"k8s.io/kubernetes/pkg/kubectl/genericclioptions"
"k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime"
genericprinters "k8s.io/kubernetes/pkg/kubectl/genericclioptions/printers"
"k8s.io/kubernetes/pkg/printers" "k8s.io/kubernetes/pkg/printers"
) )
@ -27,11 +29,11 @@ import (
// used across all create commands, and provides a method // used across all create commands, and provides a method
// of retrieving a known printer based on flag values provided. // of retrieving a known printer based on flag values provided.
type PrintFlags struct { type PrintFlags struct {
JSONYamlPrintFlags *printers.JSONYamlPrintFlags JSONYamlPrintFlags *genericclioptions.JSONYamlPrintFlags
NamePrintFlags *printers.NamePrintFlags NamePrintFlags *genericclioptions.NamePrintFlags
TemplateFlags *printers.KubeTemplatePrintFlags TemplateFlags *printers.KubeTemplatePrintFlags
TypeSetter *printers.TypeSetterPrinter TypeSetter *genericprinters.TypeSetterPrinter
OutputFormat *string OutputFormat *string
} }
@ -46,19 +48,19 @@ func (f *PrintFlags) ToPrinter() (printers.ResourcePrinter, error) {
outputFormat = *f.OutputFormat 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) 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) 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 f.TypeSetter.WrapToPrinter(p, err)
} }
return nil, printers.NoCompatiblePrinterError{Options: f} return nil, genericclioptions.NoCompatiblePrinterError{Options: f}
} }
func (f *PrintFlags) AddFlags(cmd *cobra.Command) { func (f *PrintFlags) AddFlags(cmd *cobra.Command) {
@ -77,10 +79,10 @@ func NewPrintFlags(operation string, scheme runtime.ObjectTyper) *PrintFlags {
return &PrintFlags{ return &PrintFlags{
OutputFormat: &outputFormat, OutputFormat: &outputFormat,
JSONYamlPrintFlags: printers.NewJSONYamlPrintFlags(), JSONYamlPrintFlags: genericclioptions.NewJSONYamlPrintFlags(),
NamePrintFlags: printers.NewNamePrintFlags(operation), NamePrintFlags: genericclioptions.NewNamePrintFlags(operation),
TemplateFlags: printers.NewKubeTemplatePrintFlags(), TemplateFlags: printers.NewKubeTemplatePrintFlags(),
TypeSetter: printers.NewTypeSetter(scheme), TypeSetter: genericprinters.NewTypeSetter(scheme),
} }
} }

View File

@ -40,21 +40,21 @@ import (
"k8s.io/apimachinery/pkg/util/wait" "k8s.io/apimachinery/pkg/util/wait"
"k8s.io/client-go/kubernetes" "k8s.io/client-go/kubernetes"
restclient "k8s.io/client-go/rest" 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/apimachinery/pkg/runtime/schema"
"k8s.io/kubernetes/pkg/api/legacyscheme" "k8s.io/kubernetes/pkg/api/legacyscheme"
"k8s.io/kubernetes/pkg/kubectl" "k8s.io/kubernetes/pkg/kubectl"
"k8s.io/kubernetes/pkg/kubectl/cmd/templates" "k8s.io/kubernetes/pkg/kubectl/cmd/templates"
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" 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/genericclioptions/resource"
"k8s.io/kubernetes/pkg/kubectl/scheme"
"k8s.io/kubernetes/pkg/kubectl/util/i18n" "k8s.io/kubernetes/pkg/kubectl/util/i18n"
"k8s.io/kubernetes/pkg/printers"
) )
type DrainOptions struct { type DrainOptions struct {
PrintFlags *printers.PrintFlags PrintFlags *genericclioptions.PrintFlags
ToPrinter func(string) (printers.ResourcePrinterFunc, error) ToPrinter func(string) (printers.ResourcePrinterFunc, error)
Namespace string Namespace string
@ -108,7 +108,7 @@ var (
func NewCmdCordon(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *cobra.Command { func NewCmdCordon(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *cobra.Command {
options := &DrainOptions{ options := &DrainOptions{
PrintFlags: printers.NewPrintFlags("cordoned").WithTypeSetter(scheme.Scheme), PrintFlags: genericclioptions.NewPrintFlags("cordoned").WithTypeSetter(scheme.Scheme),
IOStreams: ioStreams, IOStreams: ioStreams,
} }
@ -140,7 +140,7 @@ var (
func NewCmdUncordon(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *cobra.Command { func NewCmdUncordon(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *cobra.Command {
options := &DrainOptions{ options := &DrainOptions{
PrintFlags: printers.NewPrintFlags("uncordoned").WithTypeSetter(scheme.Scheme), PrintFlags: genericclioptions.NewPrintFlags("uncordoned").WithTypeSetter(scheme.Scheme),
IOStreams: ioStreams, IOStreams: ioStreams,
} }
@ -196,7 +196,7 @@ var (
func NewDrainOptions(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *DrainOptions { func NewDrainOptions(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *DrainOptions {
return &DrainOptions{ return &DrainOptions{
PrintFlags: printers.NewPrintFlags("drained").WithTypeSetter(scheme.Scheme), PrintFlags: genericclioptions.NewPrintFlags("drained").WithTypeSetter(scheme.Scheme),
IOStreams: ioStreams, IOStreams: ioStreams,
backOff: clockwork.NewRealClock(), backOff: clockwork.NewRealClock(),
@ -279,6 +279,7 @@ func (o *DrainOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []st
if err != nil { if err != nil {
return nil, err return nil, err
} }
return printer.PrintObj, nil return printer.PrintObj, nil
} }
@ -319,7 +320,7 @@ func (o *DrainOptions) RunDrain() error {
return err return err
} }
printer, err := o.ToPrinter("drained") printObj, err := o.ToPrinter("drained")
if err != nil { if err != nil {
return err return err
} }
@ -334,7 +335,7 @@ func (o *DrainOptions) RunDrain() error {
} }
if err == nil || o.DryRun { if err == nil || o.DryRun {
drainedNodes.Insert(info.Name) drainedNodes.Insert(info.Name)
printer.PrintObj(info.Object, o.Out) printObj(info.Object, o.Out)
} else { } else {
fmt.Fprintf(o.ErrOut, "error: unable to drain node %q, aborting command...\n\n", info.Name) fmt.Fprintf(o.ErrOut, "error: unable to drain node %q, aborting command...\n\n", info.Name)
remainingNodes := []string{} remainingNodes := []string{}
@ -650,7 +651,7 @@ func (o *DrainOptions) waitForDelete(pods []corev1.Pod, interval, timeout time.D
} else { } else {
verbStr = "deleted" verbStr = "deleted"
} }
printer, err := o.ToPrinter(verbStr) printObj, err := o.ToPrinter(verbStr)
if err != nil { if err != nil {
return pods, err return pods, err
} }
@ -660,7 +661,7 @@ func (o *DrainOptions) waitForDelete(pods []corev1.Pod, interval, timeout time.D
for i, pod := range pods { for i, pod := range pods {
p, err := getPodFn(pod.Namespace, pod.Name) p, err := getPodFn(pod.Namespace, pod.Name)
if apierrors.IsNotFound(err) || (p != nil && p.ObjectMeta.UID != pod.ObjectMeta.UID) { if apierrors.IsNotFound(err) || (p != nil && p.ObjectMeta.UID != pod.ObjectMeta.UID) {
printer.PrintObj(&pod, o.Out) printObj(&pod, o.Out)
continue continue
} else if err != nil { } else if err != nil {
return false, err return false, err
@ -736,12 +737,12 @@ func (o *DrainOptions) RunCordonOrUncordon(desired bool) error {
} }
unsched := node.Spec.Unschedulable unsched := node.Spec.Unschedulable
if unsched == desired { if unsched == desired {
printer, err := o.ToPrinter(already(desired)) printObj, err := o.ToPrinter(already(desired))
if err != nil { if err != nil {
fmt.Printf("error: %v", err) fmt.Printf("error: %v", err)
continue continue
} }
printer.PrintObj(cmdutil.AsDefaultVersionedOrOriginal(nodeInfo.Object, nodeInfo.Mapping), o.Out) printObj(cmdutil.AsDefaultVersionedOrOriginal(nodeInfo.Object, nodeInfo.Mapping), o.Out)
} else { } else {
if !o.DryRun { if !o.DryRun {
helper := resource.NewHelper(o.restClient, nodeInfo.Mapping) helper := resource.NewHelper(o.restClient, nodeInfo.Mapping)
@ -762,20 +763,20 @@ func (o *DrainOptions) RunCordonOrUncordon(desired bool) error {
continue continue
} }
} }
printer, err := o.ToPrinter(changed(desired)) printObj, err := o.ToPrinter(changed(desired))
if err != nil { if err != nil {
fmt.Fprintf(o.ErrOut, "%v", err) fmt.Fprintf(o.ErrOut, "%v", err)
continue continue
} }
printer.PrintObj(cmdutil.AsDefaultVersionedOrOriginal(nodeInfo.Object, nodeInfo.Mapping), o.Out) printObj(cmdutil.AsDefaultVersionedOrOriginal(nodeInfo.Object, nodeInfo.Mapping), o.Out)
} }
} else { } else {
printer, err := o.ToPrinter("skipped") printObj, err := o.ToPrinter("skipped")
if err != nil { if err != nil {
fmt.Fprintf(o.ErrOut, "%v", err) fmt.Fprintf(o.ErrOut, "%v", err)
continue continue
} }
printer.PrintObj(cmdutil.AsDefaultVersionedOrOriginal(nodeInfo.Object, nodeInfo.Mapping), o.Out) printObj(cmdutil.AsDefaultVersionedOrOriginal(nodeInfo.Object, nodeInfo.Mapping), o.Out)
} }
} }

View File

@ -50,8 +50,8 @@ import (
"k8s.io/kubernetes/pkg/apis/extensions" "k8s.io/kubernetes/pkg/apis/extensions"
cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing" cmdtesting "k8s.io/kubernetes/pkg/kubectl/cmd/testing"
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" 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/kubectl/scheme"
"k8s.io/kubernetes/pkg/printers"
) )
const ( const (
@ -834,7 +834,7 @@ func TestDeletePods(t *testing.T) {
defer tf.Cleanup() defer tf.Cleanup()
o := DrainOptions{ o := DrainOptions{
PrintFlags: printers.NewPrintFlags("drained").WithTypeSetter(scheme.Scheme), PrintFlags: genericclioptions.NewPrintFlags("drained").WithTypeSetter(scheme.Scheme),
} }
o.Out = os.Stdout o.Out = os.Stdout

View File

@ -35,10 +35,10 @@ import (
"k8s.io/kubernetes/pkg/kubectl/cmd/templates" "k8s.io/kubernetes/pkg/kubectl/cmd/templates"
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
"k8s.io/kubernetes/pkg/kubectl/genericclioptions" "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/genericclioptions/resource"
"k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/scheme"
"k8s.io/kubernetes/pkg/kubectl/util/i18n" "k8s.io/kubernetes/pkg/kubectl/util/i18n"
"k8s.io/kubernetes/pkg/printers"
) )
var ( var (
@ -84,7 +84,7 @@ var (
type ExposeServiceOptions struct { type ExposeServiceOptions struct {
FilenameOptions resource.FilenameOptions FilenameOptions resource.FilenameOptions
RecordFlags *genericclioptions.RecordFlags RecordFlags *genericclioptions.RecordFlags
PrintFlags *printers.PrintFlags PrintFlags *genericclioptions.PrintFlags
PrintObj printers.ResourcePrinterFunc PrintObj printers.ResourcePrinterFunc
DryRun bool DryRun bool
@ -111,7 +111,7 @@ type ExposeServiceOptions struct {
func NewExposeServiceOptions(ioStreams genericclioptions.IOStreams) *ExposeServiceOptions { func NewExposeServiceOptions(ioStreams genericclioptions.IOStreams) *ExposeServiceOptions {
return &ExposeServiceOptions{ return &ExposeServiceOptions{
RecordFlags: genericclioptions.NewRecordFlags(), RecordFlags: genericclioptions.NewRecordFlags(),
PrintFlags: printers.NewPrintFlags("exposed").WithTypeSetter(scheme.Scheme), PrintFlags: genericclioptions.NewPrintFlags("exposed").WithTypeSetter(scheme.Scheme),
Recorder: genericclioptions.NoopRecorder{}, Recorder: genericclioptions.NoopRecorder{},
IOStreams: ioStreams, IOStreams: ioStreams,

View File

@ -77,7 +77,6 @@ go_test(
"//pkg/kubectl/genericclioptions:go_default_library", "//pkg/kubectl/genericclioptions:go_default_library",
"//pkg/kubectl/genericclioptions/resource:go_default_library", "//pkg/kubectl/genericclioptions/resource:go_default_library",
"//pkg/kubectl/scheme: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/api/core/v1:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library",

View File

@ -133,7 +133,7 @@ const (
// NewGetOptions returns a GetOptions with default chunk size 500. // NewGetOptions returns a GetOptions with default chunk size 500.
func NewGetOptions(parent string, streams genericclioptions.IOStreams) *GetOptions { func NewGetOptions(parent string, streams genericclioptions.IOStreams) *GetOptions {
return &GetOptions{ return &GetOptions{
PrintFlags: NewGetPrintFlags(legacyscheme.Scheme), PrintFlags: NewGetPrintFlags(),
CmdParent: parent, CmdParent: parent,
IOStreams: streams, IOStreams: streams,

View File

@ -22,17 +22,17 @@ import (
"github.com/spf13/cobra" "github.com/spf13/cobra"
"k8s.io/apimachinery/pkg/api/meta" "k8s.io/apimachinery/pkg/api/meta"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/kubernetes/pkg/kubectl/cmd/util/openapi" "k8s.io/kubernetes/pkg/kubectl/cmd/util/openapi"
"k8s.io/kubernetes/pkg/kubectl/genericclioptions"
"k8s.io/kubernetes/pkg/printers" "k8s.io/kubernetes/pkg/printers"
) )
// PrintFlags composes common printer flag structs // PrintFlags composes common printer flag structs
// used in the Get command. // used in the Get command.
type PrintFlags struct { type PrintFlags struct {
JSONYamlPrintFlags *printers.JSONYamlPrintFlags JSONYamlPrintFlags *genericclioptions.JSONYamlPrintFlags
NamePrintFlags *printers.NamePrintFlags NamePrintFlags *genericclioptions.NamePrintFlags
TemplateFlags *printers.KubeTemplatePrintFlags TemplateFlags *printers.KubeTemplatePrintFlags
CustomColumnsFlags *printers.CustomColumnsPrintFlags CustomColumnsFlags *printers.CustomColumnsPrintFlags
HumanReadableFlags *HumanPrintFlags HumanReadableFlags *HumanPrintFlags
@ -107,27 +107,27 @@ func (f *PrintFlags) ToPrinter() (printers.ResourcePrinter, error) {
f.CustomColumnsFlags.TemplateArgument = *f.TemplateFlags.TemplateArgument 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 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 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 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 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 p, err
} }
return nil, printers.NoCompatiblePrinterError{Options: f} return nil, genericclioptions.NoCompatiblePrinterError{Options: f}
} }
// AddFlags receives a *cobra.Command reference and binds // 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, // NewGetPrintFlags returns flags associated with humanreadable,
// template, and "name" printing, with default values set. // template, and "name" printing, with default values set.
func NewGetPrintFlags(scheme runtime.ObjectConvertor) *PrintFlags { func NewGetPrintFlags() *PrintFlags {
outputFormat := "" outputFormat := ""
noHeaders := false noHeaders := false
@ -161,9 +161,10 @@ func NewGetPrintFlags(scheme runtime.ObjectConvertor) *PrintFlags {
OutputFormat: &outputFormat, OutputFormat: &outputFormat,
NoHeaders: &noHeaders, NoHeaders: &noHeaders,
JSONYamlPrintFlags: printers.NewJSONYamlPrintFlags(), JSONYamlPrintFlags: genericclioptions.NewJSONYamlPrintFlags(),
NamePrintFlags: printers.NewNamePrintFlags(""), NamePrintFlags: genericclioptions.NewNamePrintFlags(""),
TemplateFlags: printers.NewKubeTemplatePrintFlags(), TemplateFlags: printers.NewKubeTemplatePrintFlags(),
HumanReadableFlags: NewHumanPrintFlags(), HumanReadableFlags: NewHumanPrintFlags(),
CustomColumnsFlags: printers.NewCustomColumnsPrintFlags(), CustomColumnsFlags: printers.NewCustomColumnsPrintFlags(),
} }

View File

@ -18,6 +18,7 @@ package get
import ( import (
"github.com/spf13/cobra" "github.com/spf13/cobra"
"k8s.io/kubernetes/pkg/kubectl/genericclioptions"
"k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/scheme"
@ -63,7 +64,7 @@ func (f *HumanPrintFlags) EnsureWithNamespace() error {
// handling human-readable output. // handling human-readable output.
func (f *HumanPrintFlags) ToPrinter(outputFormat string) (printers.ResourcePrinter, error) { func (f *HumanPrintFlags) ToPrinter(outputFormat string) (printers.ResourcePrinter, error) {
if len(outputFormat) > 0 && outputFormat != "wide" { if len(outputFormat) > 0 && outputFormat != "wide" {
return nil, printers.NoCompatiblePrinterError{Options: f} return nil, genericclioptions.NoCompatiblePrinterError{Options: f}
} }
decoder := scheme.Codecs.UniversalDecoder() decoder := scheme.Codecs.UniversalDecoder()

View File

@ -25,7 +25,7 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/runtime/schema"
api "k8s.io/kubernetes/pkg/apis/core" api "k8s.io/kubernetes/pkg/apis/core"
"k8s.io/kubernetes/pkg/printers" "k8s.io/kubernetes/pkg/kubectl/genericclioptions"
) )
func TestHumanReadablePrinterSupportsExpectedOptions(t *testing.T) { func TestHumanReadablePrinterSupportsExpectedOptions(t *testing.T) {
@ -119,12 +119,12 @@ func TestHumanReadablePrinterSupportsExpectedOptions(t *testing.T) {
p, err := printFlags.ToPrinter(tc.outputFormat) p, err := printFlags.ToPrinter(tc.outputFormat)
if tc.expectNoMatch { if tc.expectNoMatch {
if !printers.IsNoCompatiblePrinterError(err) { if !genericclioptions.IsNoCompatiblePrinterError(err) {
t.Fatalf("expected no printer matches for output format %q", tc.outputFormat) t.Fatalf("expected no printer matches for output format %q", tc.outputFormat)
} }
return return
} }
if printers.IsNoCompatiblePrinterError(err) { if genericclioptions.IsNoCompatiblePrinterError(err) {
t.Fatalf("expected to match template printer for output format %q", tc.outputFormat) t.Fatalf("expected to match template printer for output format %q", tc.outputFormat)
} }

View File

@ -37,10 +37,10 @@ import (
"k8s.io/kubernetes/pkg/kubectl/cmd/templates" "k8s.io/kubernetes/pkg/kubectl/cmd/templates"
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
"k8s.io/kubernetes/pkg/kubectl/genericclioptions" "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/genericclioptions/resource"
"k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/scheme"
"k8s.io/kubernetes/pkg/kubectl/util/i18n" "k8s.io/kubernetes/pkg/kubectl/util/i18n"
"k8s.io/kubernetes/pkg/printers"
) )
// LabelOptions have the data required to perform the label operation // LabelOptions have the data required to perform the label operation
@ -49,8 +49,8 @@ type LabelOptions struct {
resource.FilenameOptions resource.FilenameOptions
RecordFlags *genericclioptions.RecordFlags RecordFlags *genericclioptions.RecordFlags
PrintFlags *printers.PrintFlags PrintFlags *genericclioptions.PrintFlags
ToPrinter func(string) (printers.ResourcePrinterFunc, error) ToPrinter func(string) (printers.ResourcePrinter, error)
// Common user flags // Common user flags
overwrite bool overwrite bool
@ -115,7 +115,7 @@ func NewLabelOptions(ioStreams genericclioptions.IOStreams) *LabelOptions {
RecordFlags: genericclioptions.NewRecordFlags(), RecordFlags: genericclioptions.NewRecordFlags(),
Recorder: genericclioptions.NoopRecorder{}, Recorder: genericclioptions.NoopRecorder{},
PrintFlags: printers.NewPrintFlags("labeled").WithTypeSetter(scheme.Scheme), PrintFlags: genericclioptions.NewPrintFlags("labeled").WithTypeSetter(scheme.Scheme),
IOStreams: ioStreams, 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.outputFormat = cmdutil.GetFlagString(cmd, "output")
o.dryrun = cmdutil.GetDryRunFlag(cmd) 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 o.PrintFlags.NamePrintFlags.Operation = operation
if o.dryrun { if o.dryrun {
o.PrintFlags.Complete("%s (dry run)") o.PrintFlags.Complete("%s (dry run)")
} }
printer, err := o.PrintFlags.ToPrinter() return o.PrintFlags.ToPrinter()
if err != nil {
return nil, err
}
return printer.PrintObj, nil
} }
resources, labelArgs, err := cmdutil.GetResourcesAndPairs(args, "label") resources, labelArgs, err := cmdutil.GetResourcesAndPairs(args, "label")

View File

@ -36,10 +36,10 @@ import (
"k8s.io/kubernetes/pkg/kubectl/cmd/templates" "k8s.io/kubernetes/pkg/kubectl/cmd/templates"
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
"k8s.io/kubernetes/pkg/kubectl/genericclioptions" "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/genericclioptions/resource"
"k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/scheme"
"k8s.io/kubernetes/pkg/kubectl/util/i18n" "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} var patchTypes = map[string]types.PatchType{"json": types.JSONPatchType, "merge": types.MergePatchType, "strategic": types.StrategicMergePatchType}
@ -50,8 +50,8 @@ type PatchOptions struct {
resource.FilenameOptions resource.FilenameOptions
RecordFlags *genericclioptions.RecordFlags RecordFlags *genericclioptions.RecordFlags
PrintFlags *printers.PrintFlags PrintFlags *genericclioptions.PrintFlags
ToPrinter func(string) (printers.ResourcePrinterFunc, error) ToPrinter func(string) (printers.ResourcePrinter, error)
Recorder genericclioptions.Recorder Recorder genericclioptions.Recorder
Local bool Local bool
@ -98,7 +98,7 @@ func NewPatchOptions(ioStreams genericclioptions.IOStreams) *PatchOptions {
return &PatchOptions{ return &PatchOptions{
RecordFlags: genericclioptions.NewRecordFlags(), RecordFlags: genericclioptions.NewRecordFlags(),
Recorder: genericclioptions.NoopRecorder{}, Recorder: genericclioptions.NoopRecorder{},
PrintFlags: printers.NewPrintFlags("patched").WithTypeSetter(scheme.Scheme), PrintFlags: genericclioptions.NewPrintFlags("patched").WithTypeSetter(scheme.Scheme),
IOStreams: ioStreams, 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.outputFormat = cmdutil.GetFlagString(cmd, "output")
o.dryRun = cmdutil.GetFlagBool(cmd, "dry-run") 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 o.PrintFlags.NamePrintFlags.Operation = operation
if o.dryRun { if o.dryRun {
o.PrintFlags.Complete("%s (dry run)") o.PrintFlags.Complete("%s (dry run)")
} }
printer, err := o.PrintFlags.ToPrinter() return o.PrintFlags.ToPrinter()
if err != nil {
return nil, err
}
return printer.PrintObj, nil
} }
o.namespace, o.enforceNamespace, err = f.DefaultNamespace() o.namespace, o.enforceNamespace, err = f.DefaultNamespace()

View File

@ -36,7 +36,6 @@ import (
"k8s.io/kubernetes/pkg/kubectl/genericclioptions/resource" "k8s.io/kubernetes/pkg/kubectl/genericclioptions/resource"
"k8s.io/kubernetes/pkg/kubectl/util/i18n" "k8s.io/kubernetes/pkg/kubectl/util/i18n"
"k8s.io/kubernetes/pkg/kubectl/validation" "k8s.io/kubernetes/pkg/kubectl/validation"
"k8s.io/kubernetes/pkg/printers"
) )
var ( var (
@ -65,7 +64,7 @@ var (
) )
type ReplaceOptions struct { type ReplaceOptions struct {
PrintFlags *printers.PrintFlags PrintFlags *genericclioptions.PrintFlags
DeleteFlags *DeleteFlags DeleteFlags *DeleteFlags
RecordFlags *genericclioptions.RecordFlags RecordFlags *genericclioptions.RecordFlags
@ -94,9 +93,9 @@ func NewReplaceOptions(streams genericclioptions.IOStreams) *ReplaceOptions {
return &ReplaceOptions{ return &ReplaceOptions{
// TODO(juanvallejo): figure out why we only support the "name" outputFormat in this command // 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 // we only support "-o name" for this command, so only register the name printer
PrintFlags: &printers.PrintFlags{ PrintFlags: &genericclioptions.PrintFlags{
OutputFormat: &outputFormat, OutputFormat: &outputFormat,
NamePrintFlags: printers.NewNamePrintFlags("replaced"), NamePrintFlags: genericclioptions.NewNamePrintFlags("replaced"),
}, },
DeleteFlags: NewDeleteFlags("to use to replace the resource."), DeleteFlags: NewDeleteFlags("to use to replace the resource."),

View File

@ -37,12 +37,12 @@ import (
"k8s.io/kubernetes/pkg/kubectl/cmd/templates" "k8s.io/kubernetes/pkg/kubectl/cmd/templates"
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
"k8s.io/kubernetes/pkg/kubectl/genericclioptions" "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/genericclioptions/resource"
"k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/scheme"
"k8s.io/kubernetes/pkg/kubectl/util" "k8s.io/kubernetes/pkg/kubectl/util"
"k8s.io/kubernetes/pkg/kubectl/util/i18n" "k8s.io/kubernetes/pkg/kubectl/util/i18n"
"k8s.io/kubernetes/pkg/kubectl/validation" "k8s.io/kubernetes/pkg/kubectl/validation"
"k8s.io/kubernetes/pkg/printers"
) )
var ( var (
@ -107,15 +107,15 @@ type RollingUpdateOptions struct {
FindNewName func(*api.ReplicationController) string FindNewName func(*api.ReplicationController) string
PrintFlags *printers.PrintFlags PrintFlags *genericclioptions.PrintFlags
ToPrinter func(string) (printers.ResourcePrinterFunc, error) ToPrinter func(string) (printers.ResourcePrinter, error)
genericclioptions.IOStreams genericclioptions.IOStreams
} }
func NewRollingUpdateOptions(streams genericclioptions.IOStreams) *RollingUpdateOptions { func NewRollingUpdateOptions(streams genericclioptions.IOStreams) *RollingUpdateOptions {
return &RollingUpdateOptions{ return &RollingUpdateOptions{
PrintFlags: printers.NewPrintFlags("rolling updated").WithTypeSetter(scheme.Scheme), PrintFlags: genericclioptions.NewPrintFlags("rolling updated").WithTypeSetter(scheme.Scheme),
FilenameOptions: &resource.FilenameOptions{}, FilenameOptions: &resource.FilenameOptions{},
DeploymentKey: "deployment", DeploymentKey: "deployment",
Timeout: timeout, Timeout: timeout,
@ -226,18 +226,13 @@ func (o *RollingUpdateOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, a
o.Builder = f.NewBuilder() 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 o.PrintFlags.NamePrintFlags.Operation = operation
if o.DryRun { if o.DryRun {
o.PrintFlags.Complete("%s (dry run)") o.PrintFlags.Complete("%s (dry run)")
} }
printer, err := o.PrintFlags.ToPrinter() return o.PrintFlags.ToPrinter()
if err != nil {
return nil, err
}
return printer.PrintObj, nil
} }
return nil return nil
} }

View File

@ -25,11 +25,11 @@ go_library(
"//pkg/kubectl/cmd/templates:go_default_library", "//pkg/kubectl/cmd/templates:go_default_library",
"//pkg/kubectl/cmd/util:go_default_library", "//pkg/kubectl/cmd/util:go_default_library",
"//pkg/kubectl/genericclioptions: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/genericclioptions/resource:go_default_library",
"//pkg/kubectl/polymorphichelpers:go_default_library", "//pkg/kubectl/polymorphichelpers:go_default_library",
"//pkg/kubectl/scheme:go_default_library", "//pkg/kubectl/scheme:go_default_library",
"//pkg/kubectl/util/i18n:go_default_library", "//pkg/kubectl/util/i18n:go_default_library",
"//pkg/printers:go_default_library",
"//pkg/util/interrupt:go_default_library", "//pkg/util/interrupt:go_default_library",
"//vendor/github.com/renstrom/dedent:go_default_library", "//vendor/github.com/renstrom/dedent:go_default_library",
"//vendor/github.com/spf13/cobra:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library",

View File

@ -28,18 +28,18 @@ import (
"k8s.io/kubernetes/pkg/kubectl/cmd/templates" "k8s.io/kubernetes/pkg/kubectl/cmd/templates"
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
"k8s.io/kubernetes/pkg/kubectl/genericclioptions" "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/genericclioptions/resource"
"k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/scheme"
"k8s.io/kubernetes/pkg/kubectl/util/i18n" "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 // 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() // referencing the cmd.Flags()
type PauseConfig struct { type PauseConfig struct {
resource.FilenameOptions resource.FilenameOptions
PrintFlags *printers.PrintFlags PrintFlags *genericclioptions.PrintFlags
ToPrinter func(string) (printers.ResourcePrinterFunc, error) ToPrinter func(string) (printers.ResourcePrinter, error)
Pauser func(info *resource.Info) ([]byte, error) Pauser func(info *resource.Info) ([]byte, error)
Infos []*resource.Info Infos []*resource.Info
@ -64,7 +64,7 @@ var (
func NewCmdRolloutPause(f cmdutil.Factory, streams genericclioptions.IOStreams) *cobra.Command { func NewCmdRolloutPause(f cmdutil.Factory, streams genericclioptions.IOStreams) *cobra.Command {
o := &PauseConfig{ o := &PauseConfig{
PrintFlags: printers.NewPrintFlags("paused").WithTypeSetter(scheme.Scheme), PrintFlags: genericclioptions.NewPrintFlags("paused").WithTypeSetter(scheme.Scheme),
IOStreams: streams, IOStreams: streams,
} }
@ -122,14 +122,9 @@ func (o *PauseConfig) CompletePause(f cmdutil.Factory, cmd *cobra.Command, args
return err return err
} }
o.ToPrinter = func(operation string) (printers.ResourcePrinterFunc, error) { o.ToPrinter = func(operation string) (printers.ResourcePrinter, error) {
o.PrintFlags.NamePrintFlags.Operation = operation o.PrintFlags.NamePrintFlags.Operation = operation
printer, err := o.PrintFlags.ToPrinter() return o.PrintFlags.ToPrinter()
if err != nil {
return nil, err
}
return printer.PrintObj, nil
} }
o.Infos, err = r.Infos() o.Infos, err = r.Infos()

View File

@ -28,18 +28,18 @@ import (
"k8s.io/kubernetes/pkg/kubectl/cmd/templates" "k8s.io/kubernetes/pkg/kubectl/cmd/templates"
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
"k8s.io/kubernetes/pkg/kubectl/genericclioptions" "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/genericclioptions/resource"
"k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/scheme"
"k8s.io/kubernetes/pkg/kubectl/util/i18n" "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 // 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() // referencing the cmd.Flags()
type ResumeConfig struct { type ResumeConfig struct {
resource.FilenameOptions resource.FilenameOptions
PrintFlags *printers.PrintFlags PrintFlags *genericclioptions.PrintFlags
ToPrinter func(string) (printers.ResourcePrinterFunc, error) ToPrinter func(string) (printers.ResourcePrinter, error)
Resumer func(object *resource.Info) ([]byte, error) Resumer func(object *resource.Info) ([]byte, error)
Infos []*resource.Info Infos []*resource.Info
@ -62,7 +62,7 @@ var (
func NewCmdRolloutResume(f cmdutil.Factory, streams genericclioptions.IOStreams) *cobra.Command { func NewCmdRolloutResume(f cmdutil.Factory, streams genericclioptions.IOStreams) *cobra.Command {
o := &ResumeConfig{ o := &ResumeConfig{
PrintFlags: printers.NewPrintFlags("resumed").WithTypeSetter(scheme.Scheme), PrintFlags: genericclioptions.NewPrintFlags("resumed").WithTypeSetter(scheme.Scheme),
IOStreams: streams, IOStreams: streams,
} }
@ -106,14 +106,9 @@ func (o *ResumeConfig) CompleteResume(f cmdutil.Factory, cmd *cobra.Command, arg
return err return err
} }
o.ToPrinter = func(operation string) (printers.ResourcePrinterFunc, error) { o.ToPrinter = func(operation string) (printers.ResourcePrinter, error) {
o.PrintFlags.NamePrintFlags.Operation = operation o.PrintFlags.NamePrintFlags.Operation = operation
printer, err := o.PrintFlags.ToPrinter() return o.PrintFlags.ToPrinter()
if err != nil {
return nil, err
}
return printer.PrintObj, nil
} }
r := f.NewBuilder(). r := f.NewBuilder().

View File

@ -26,10 +26,11 @@ import (
"k8s.io/kubernetes/pkg/kubectl" "k8s.io/kubernetes/pkg/kubectl"
"k8s.io/kubernetes/pkg/kubectl/cmd/templates" "k8s.io/kubernetes/pkg/kubectl/cmd/templates"
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" 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/genericclioptions/resource"
"k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/scheme"
"k8s.io/kubernetes/pkg/kubectl/util/i18n" "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 // 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 { type UndoOptions struct {
resource.FilenameOptions resource.FilenameOptions
PrintFlags *printers.PrintFlags PrintFlags *genericclioptions.PrintFlags
ToPrinter func(string) (printers.ResourcePrinterFunc, error) ToPrinter func(string) (printers.ResourcePrinter, error)
Rollbackers []kubectl.Rollbacker Rollbackers []kubectl.Rollbacker
Infos []*resource.Info Infos []*resource.Info
@ -65,7 +66,7 @@ var (
func NewCmdRolloutUndo(f cmdutil.Factory, out io.Writer) *cobra.Command { func NewCmdRolloutUndo(f cmdutil.Factory, out io.Writer) *cobra.Command {
o := &UndoOptions{ o := &UndoOptions{
PrintFlags: printers.NewPrintFlags("").WithTypeSetter(scheme.Scheme), PrintFlags: genericclioptions.NewPrintFlags("").WithTypeSetter(scheme.Scheme),
ToRevision: int64(0), ToRevision: int64(0),
} }
@ -112,17 +113,12 @@ func (o *UndoOptions) CompleteUndo(f cmdutil.Factory, cmd *cobra.Command, out io
return err return err
} }
o.ToPrinter = func(operation string) (printers.ResourcePrinterFunc, error) { o.ToPrinter = func(operation string) (printers.ResourcePrinter, error) {
o.PrintFlags.NamePrintFlags.Operation = operation o.PrintFlags.NamePrintFlags.Operation = operation
if o.DryRun { if o.DryRun {
o.PrintFlags.Complete("%s (dry run)") o.PrintFlags.Complete("%s (dry run)")
} }
printer, err := o.PrintFlags.ToPrinter() return o.PrintFlags.ToPrinter()
if err != nil {
return nil, err
}
return printer.PrintObj, nil
} }
r := f.NewBuilder(). r := f.NewBuilder().

View File

@ -20,12 +20,11 @@ import (
"fmt" "fmt"
"io" "io"
"k8s.io/client-go/dynamic"
"k8s.io/kubernetes/pkg/printers"
"github.com/docker/distribution/reference" "github.com/docker/distribution/reference"
"github.com/spf13/cobra" "github.com/spf13/cobra"
"k8s.io/client-go/dynamic"
"github.com/golang/glog" "github.com/golang/glog"
"k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/api/meta" "k8s.io/apimachinery/pkg/api/meta"
@ -98,7 +97,7 @@ type RunObject struct {
} }
type RunOptions struct { type RunOptions struct {
PrintFlags *printers.PrintFlags PrintFlags *genericclioptions.PrintFlags
DeleteFlags *DeleteFlags DeleteFlags *DeleteFlags
DeleteOptions *DeleteOptions DeleteOptions *DeleteOptions
RecordFlags *genericclioptions.RecordFlags RecordFlags *genericclioptions.RecordFlags
@ -127,7 +126,7 @@ type RunOptions struct {
func NewRunOptions(streams genericclioptions.IOStreams) *RunOptions { func NewRunOptions(streams genericclioptions.IOStreams) *RunOptions {
return &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."), DeleteFlags: NewDeleteFlags("to use to replace the resource."),
RecordFlags: genericclioptions.NewRecordFlags(), RecordFlags: genericclioptions.NewRecordFlags(),

View File

@ -42,7 +42,6 @@ import (
"k8s.io/kubernetes/pkg/kubectl/genericclioptions" "k8s.io/kubernetes/pkg/kubectl/genericclioptions"
"k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/scheme"
"k8s.io/kubernetes/pkg/kubectl/util/i18n" "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. // 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("image", "nginx")
cmd.Flags().Set("generator", "run/v1") cmd.Flags().Set("generator", "run/v1")
printFlags := printers.NewPrintFlags("created").WithTypeSetter(scheme.Scheme) printFlags := genericclioptions.NewPrintFlags("created").WithTypeSetter(scheme.Scheme)
printer, err := printFlags.ToPrinter() printer, err := printFlags.ToPrinter()
if err != nil { if err != nil {
t.Errorf("unexpected error: %v", err) 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() printer, err := printFlags.ToPrinter()
if err != nil { if err != nil {
t.Errorf("unexpected error: %v", err) t.Errorf("unexpected error: %v", err)

View File

@ -33,9 +33,9 @@ import (
"k8s.io/kubernetes/pkg/kubectl/cmd/templates" "k8s.io/kubernetes/pkg/kubectl/cmd/templates"
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
"k8s.io/kubernetes/pkg/kubectl/genericclioptions" "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/genericclioptions/resource"
"k8s.io/kubernetes/pkg/kubectl/util/i18n" "k8s.io/kubernetes/pkg/kubectl/util/i18n"
"k8s.io/kubernetes/pkg/printers"
) )
var ( var (
@ -68,7 +68,7 @@ var (
type ScaleOptions struct { type ScaleOptions struct {
FilenameOptions resource.FilenameOptions FilenameOptions resource.FilenameOptions
RecordFlags *genericclioptions.RecordFlags RecordFlags *genericclioptions.RecordFlags
PrintFlags *printers.PrintFlags PrintFlags *genericclioptions.PrintFlags
PrintObj printers.ResourcePrinterFunc PrintObj printers.ResourcePrinterFunc
Selector string Selector string
@ -98,9 +98,9 @@ func NewScaleOptions(ioStreams genericclioptions.IOStreams) *ScaleOptions {
return &ScaleOptions{ return &ScaleOptions{
// TODO(juanvallejo): figure out why we only support the "name" outputFormat in this command // 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 // we only support "-o name" for this command, so only register the name printer
PrintFlags: &printers.PrintFlags{ PrintFlags: &genericclioptions.PrintFlags{
OutputFormat: &outputFormat, OutputFormat: &outputFormat,
NamePrintFlags: printers.NewNamePrintFlags("scaled"), NamePrintFlags: genericclioptions.NewNamePrintFlags("scaled"),
}, },
RecordFlags: genericclioptions.NewRecordFlags(), RecordFlags: genericclioptions.NewRecordFlags(),
CurrentReplicas: -1, CurrentReplicas: -1,

View File

@ -25,10 +25,10 @@ go_library(
"//pkg/kubectl/cmd/util:go_default_library", "//pkg/kubectl/cmd/util:go_default_library",
"//pkg/kubectl/cmd/util/env:go_default_library", "//pkg/kubectl/cmd/util/env:go_default_library",
"//pkg/kubectl/genericclioptions: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/genericclioptions/resource:go_default_library",
"//pkg/kubectl/scheme:go_default_library", "//pkg/kubectl/scheme:go_default_library",
"//pkg/kubectl/util/i18n: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/golang/glog:go_default_library",
"//vendor/github.com/spf13/cobra:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library",
"//vendor/k8s.io/api/core/v1: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:go_default_library",
"//pkg/kubectl/genericclioptions/resource:go_default_library", "//pkg/kubectl/genericclioptions/resource:go_default_library",
"//pkg/kubectl/scheme: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/spf13/cobra:go_default_library",
"//vendor/github.com/stretchr/testify/assert:go_default_library", "//vendor/github.com/stretchr/testify/assert:go_default_library",
"//vendor/k8s.io/api/apps/v1:go_default_library", "//vendor/k8s.io/api/apps/v1:go_default_library",

View File

@ -34,9 +34,9 @@ import (
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
envutil "k8s.io/kubernetes/pkg/kubectl/cmd/util/env" envutil "k8s.io/kubernetes/pkg/kubectl/cmd/util/env"
"k8s.io/kubernetes/pkg/kubectl/genericclioptions" "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/genericclioptions/resource"
"k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/scheme"
"k8s.io/kubernetes/pkg/printers"
) )
var ( var (
@ -93,7 +93,7 @@ var (
) )
type EnvOptions struct { type EnvOptions struct {
PrintFlags *printers.PrintFlags PrintFlags *genericclioptions.PrintFlags
resource.FilenameOptions resource.FilenameOptions
EnvParams []string EnvParams []string
@ -126,7 +126,7 @@ type EnvOptions struct {
// pod templates are selected by default and allowing environment to be overwritten // pod templates are selected by default and allowing environment to be overwritten
func NewEnvOptions(streams genericclioptions.IOStreams) *EnvOptions { func NewEnvOptions(streams genericclioptions.IOStreams) *EnvOptions {
return &EnvOptions{ return &EnvOptions{
PrintFlags: printers.NewPrintFlags("env updated").WithTypeSetter(scheme.Scheme), PrintFlags: genericclioptions.NewPrintFlags("env updated").WithTypeSetter(scheme.Scheme),
ContainerSelector: "*", ContainerSelector: "*",
Overwrite: true, Overwrite: true,

View File

@ -42,7 +42,6 @@ import (
"k8s.io/kubernetes/pkg/kubectl/genericclioptions" "k8s.io/kubernetes/pkg/kubectl/genericclioptions"
"k8s.io/kubernetes/pkg/kubectl/genericclioptions/resource" "k8s.io/kubernetes/pkg/kubectl/genericclioptions/resource"
"k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/scheme"
"k8s.io/kubernetes/pkg/printers"
) )
func TestSetEnvLocal(t *testing.T) { func TestSetEnvLocal(t *testing.T) {
@ -63,7 +62,7 @@ func TestSetEnvLocal(t *testing.T) {
streams, _, buf, bufErr := genericclioptions.NewTestIOStreams() streams, _, buf, bufErr := genericclioptions.NewTestIOStreams()
opts := NewEnvOptions(streams) 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{ opts.FilenameOptions = resource.FilenameOptions{
Filenames: []string{"../../../../test/e2e/testing-manifests/statefulset/cassandra/controller.yaml"}, Filenames: []string{"../../../../test/e2e/testing-manifests/statefulset/cassandra/controller.yaml"},
} }
@ -101,7 +100,7 @@ func TestSetMultiResourcesEnvLocal(t *testing.T) {
outputFormat := "name" outputFormat := "name"
streams, _, buf, bufErr := genericclioptions.NewTestIOStreams() streams, _, buf, bufErr := genericclioptions.NewTestIOStreams()
opts := NewEnvOptions(streams) 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{ opts.FilenameOptions = resource.FilenameOptions{
Filenames: []string{"../../../../test/fixtures/pkg/kubectl/cmd/set/multi-resource-yaml.yaml"}, Filenames: []string{"../../../../test/fixtures/pkg/kubectl/cmd/set/multi-resource-yaml.yaml"},
} }
@ -483,7 +482,7 @@ func TestSetEnvRemote(t *testing.T) {
outputFormat := "yaml" outputFormat := "yaml"
streams := genericclioptions.NewTestIOStreamsDiscard() streams := genericclioptions.NewTestIOStreamsDiscard()
opts := NewEnvOptions(streams) 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.Local = false
opts.IOStreams = streams opts.IOStreams = streams
err := opts.Complete(tf, NewCmdEnv(tf, streams), input.args) err := opts.Complete(tf, NewCmdEnv(tf, streams), input.args)

View File

@ -29,10 +29,10 @@ import (
"k8s.io/kubernetes/pkg/kubectl/cmd/templates" "k8s.io/kubernetes/pkg/kubectl/cmd/templates"
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
"k8s.io/kubernetes/pkg/kubectl/genericclioptions" "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/genericclioptions/resource"
"k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/scheme"
"k8s.io/kubernetes/pkg/kubectl/util/i18n" "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 // 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 { type SetImageOptions struct {
resource.FilenameOptions resource.FilenameOptions
PrintFlags *printers.PrintFlags PrintFlags *genericclioptions.PrintFlags
RecordFlags *genericclioptions.RecordFlags RecordFlags *genericclioptions.RecordFlags
Infos []*resource.Info Infos []*resource.Info
@ -87,7 +87,7 @@ var (
func NewImageOptions(streams genericclioptions.IOStreams) *SetImageOptions { func NewImageOptions(streams genericclioptions.IOStreams) *SetImageOptions {
return &SetImageOptions{ return &SetImageOptions{
PrintFlags: printers.NewPrintFlags("image updated").WithTypeSetter(scheme.Scheme), PrintFlags: genericclioptions.NewPrintFlags("image updated").WithTypeSetter(scheme.Scheme),
RecordFlags: genericclioptions.NewRecordFlags(), RecordFlags: genericclioptions.NewRecordFlags(),
Recorder: genericclioptions.NoopRecorder{}, Recorder: genericclioptions.NoopRecorder{},

View File

@ -43,7 +43,6 @@ import (
"k8s.io/kubernetes/pkg/kubectl/genericclioptions" "k8s.io/kubernetes/pkg/kubectl/genericclioptions"
"k8s.io/kubernetes/pkg/kubectl/genericclioptions/resource" "k8s.io/kubernetes/pkg/kubectl/genericclioptions/resource"
"k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/scheme"
"k8s.io/kubernetes/pkg/printers"
) )
func TestImageLocal(t *testing.T) { func TestImageLocal(t *testing.T) {
@ -70,7 +69,7 @@ func TestImageLocal(t *testing.T) {
cmd.Flags().Set("local", "true") cmd.Flags().Set("local", "true")
opts := SetImageOptions{ opts := SetImageOptions{
PrintFlags: printers.NewPrintFlags("").WithDefaultOutput(outputFormat).WithTypeSetter(scheme.Scheme), PrintFlags: genericclioptions.NewPrintFlags("").WithDefaultOutput(outputFormat).WithTypeSetter(scheme.Scheme),
FilenameOptions: resource.FilenameOptions{ FilenameOptions: resource.FilenameOptions{
Filenames: []string{"../../../../test/e2e/testing-manifests/statefulset/cassandra/controller.yaml"}}, Filenames: []string{"../../../../test/e2e/testing-manifests/statefulset/cassandra/controller.yaml"}},
Local: true, Local: true,
@ -92,7 +91,7 @@ func TestImageLocal(t *testing.T) {
} }
func TestSetImageValidation(t *testing.T) { func TestSetImageValidation(t *testing.T) {
printFlags := printers.NewPrintFlags("").WithTypeSetter(scheme.Scheme) printFlags := genericclioptions.NewPrintFlags("").WithTypeSetter(scheme.Scheme)
testCases := []struct { testCases := []struct {
name string name string
@ -183,7 +182,7 @@ func TestSetMultiResourcesImageLocal(t *testing.T) {
cmd.Flags().Set("local", "true") cmd.Flags().Set("local", "true")
opts := SetImageOptions{ opts := SetImageOptions{
PrintFlags: printers.NewPrintFlags("").WithDefaultOutput(outputFormat).WithTypeSetter(scheme.Scheme), PrintFlags: genericclioptions.NewPrintFlags("").WithDefaultOutput(outputFormat).WithTypeSetter(scheme.Scheme),
FilenameOptions: resource.FilenameOptions{ FilenameOptions: resource.FilenameOptions{
Filenames: []string{"../../../../test/fixtures/pkg/kubectl/cmd/set/multi-resource-yaml.yaml"}}, Filenames: []string{"../../../../test/fixtures/pkg/kubectl/cmd/set/multi-resource-yaml.yaml"}},
Local: true, Local: true,
@ -570,7 +569,7 @@ func TestSetImageRemote(t *testing.T) {
cmd := NewCmdImage(tf, streams) cmd := NewCmdImage(tf, streams)
cmd.Flags().Set("output", outputFormat) cmd.Flags().Set("output", outputFormat)
opts := SetImageOptions{ opts := SetImageOptions{
PrintFlags: printers.NewPrintFlags("").WithDefaultOutput(outputFormat).WithTypeSetter(scheme.Scheme), PrintFlags: genericclioptions.NewPrintFlags("").WithDefaultOutput(outputFormat).WithTypeSetter(scheme.Scheme),
Local: false, Local: false,
IOStreams: streams, IOStreams: streams,

View File

@ -20,8 +20,6 @@ import (
"fmt" "fmt"
"strings" "strings"
"k8s.io/kubernetes/pkg/printers"
"github.com/spf13/cobra" "github.com/spf13/cobra"
"k8s.io/api/core/v1" "k8s.io/api/core/v1"
@ -33,6 +31,7 @@ import (
"k8s.io/kubernetes/pkg/kubectl/cmd/templates" "k8s.io/kubernetes/pkg/kubectl/cmd/templates"
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
"k8s.io/kubernetes/pkg/kubectl/genericclioptions" "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/genericclioptions/resource"
"k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/scheme"
"k8s.io/kubernetes/pkg/kubectl/util/i18n" "k8s.io/kubernetes/pkg/kubectl/util/i18n"
@ -65,7 +64,7 @@ var (
type SetResourcesOptions struct { type SetResourcesOptions struct {
resource.FilenameOptions resource.FilenameOptions
PrintFlags *printers.PrintFlags PrintFlags *genericclioptions.PrintFlags
RecordFlags *genericclioptions.RecordFlags RecordFlags *genericclioptions.RecordFlags
Infos []*resource.Info Infos []*resource.Info
@ -94,7 +93,7 @@ type SetResourcesOptions struct {
// pod templates are selected by default. // pod templates are selected by default.
func NewResourcesOptions(streams genericclioptions.IOStreams) *SetResourcesOptions { func NewResourcesOptions(streams genericclioptions.IOStreams) *SetResourcesOptions {
return &SetResourcesOptions{ return &SetResourcesOptions{
PrintFlags: printers.NewPrintFlags("resource requirements updated").WithTypeSetter(scheme.Scheme), PrintFlags: genericclioptions.NewPrintFlags("resource requirements updated").WithTypeSetter(scheme.Scheme),
RecordFlags: genericclioptions.NewRecordFlags(), RecordFlags: genericclioptions.NewRecordFlags(),
Recorder: genericclioptions.NoopRecorder{}, Recorder: genericclioptions.NoopRecorder{},

View File

@ -24,8 +24,6 @@ import (
"strings" "strings"
"testing" "testing"
"k8s.io/kubernetes/pkg/printers"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
appsv1 "k8s.io/api/apps/v1" appsv1 "k8s.io/api/apps/v1"
appsv1beta1 "k8s.io/api/apps/v1beta1" appsv1beta1 "k8s.io/api/apps/v1beta1"
@ -70,7 +68,7 @@ func TestResourcesLocal(t *testing.T) {
cmd.Flags().Set("local", "true") cmd.Flags().Set("local", "true")
opts := SetResourcesOptions{ opts := SetResourcesOptions{
PrintFlags: printers.NewPrintFlags("").WithDefaultOutput(outputFormat).WithTypeSetter(scheme.Scheme), PrintFlags: genericclioptions.NewPrintFlags("").WithDefaultOutput(outputFormat).WithTypeSetter(scheme.Scheme),
FilenameOptions: resource.FilenameOptions{ FilenameOptions: resource.FilenameOptions{
Filenames: []string{"../../../../test/e2e/testing-manifests/statefulset/cassandra/controller.yaml"}}, Filenames: []string{"../../../../test/e2e/testing-manifests/statefulset/cassandra/controller.yaml"}},
Local: true, Local: true,
@ -119,7 +117,7 @@ func TestSetMultiResourcesLimitsLocal(t *testing.T) {
cmd.Flags().Set("local", "true") cmd.Flags().Set("local", "true")
opts := SetResourcesOptions{ opts := SetResourcesOptions{
PrintFlags: printers.NewPrintFlags("").WithDefaultOutput(outputFormat).WithTypeSetter(scheme.Scheme), PrintFlags: genericclioptions.NewPrintFlags("").WithDefaultOutput(outputFormat).WithTypeSetter(scheme.Scheme),
FilenameOptions: resource.FilenameOptions{ FilenameOptions: resource.FilenameOptions{
Filenames: []string{"../../../../test/fixtures/pkg/kubectl/cmd/set/multi-resource-yaml.yaml"}}, Filenames: []string{"../../../../test/fixtures/pkg/kubectl/cmd/set/multi-resource-yaml.yaml"}},
Local: true, Local: true,
@ -494,7 +492,7 @@ func TestSetResourcesRemote(t *testing.T) {
cmd := NewCmdResources(tf, streams) cmd := NewCmdResources(tf, streams)
cmd.Flags().Set("output", outputFormat) cmd.Flags().Set("output", outputFormat)
opts := SetResourcesOptions{ opts := SetResourcesOptions{
PrintFlags: printers.NewPrintFlags("").WithDefaultOutput(outputFormat).WithTypeSetter(scheme.Scheme), PrintFlags: genericclioptions.NewPrintFlags("").WithDefaultOutput(outputFormat).WithTypeSetter(scheme.Scheme),
Limits: "cpu=200m,memory=512Mi", Limits: "cpu=200m,memory=512Mi",
ContainerSelector: "*", ContainerSelector: "*",

View File

@ -19,8 +19,6 @@ package set
import ( import (
"fmt" "fmt"
"k8s.io/kubernetes/pkg/printers"
"github.com/golang/glog" "github.com/golang/glog"
"github.com/spf13/cobra" "github.com/spf13/cobra"
"k8s.io/api/core/v1" "k8s.io/api/core/v1"
@ -32,6 +30,7 @@ import (
"k8s.io/kubernetes/pkg/kubectl/cmd/templates" "k8s.io/kubernetes/pkg/kubectl/cmd/templates"
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
"k8s.io/kubernetes/pkg/kubectl/genericclioptions" "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/genericclioptions/resource"
"k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/scheme"
"k8s.io/kubernetes/pkg/kubectl/util/i18n" "k8s.io/kubernetes/pkg/kubectl/util/i18n"
@ -42,7 +41,7 @@ import (
type SetSelectorOptions struct { type SetSelectorOptions struct {
fileOptions resource.FilenameOptions fileOptions resource.FilenameOptions
PrintFlags *printers.PrintFlags PrintFlags *genericclioptions.PrintFlags
RecordFlags *genericclioptions.RecordFlags RecordFlags *genericclioptions.RecordFlags
local bool local bool
@ -79,7 +78,7 @@ var (
func NewSelectorOptions(streams genericclioptions.IOStreams) *SetSelectorOptions { func NewSelectorOptions(streams genericclioptions.IOStreams) *SetSelectorOptions {
return &SetSelectorOptions{ return &SetSelectorOptions{
PrintFlags: printers.NewPrintFlags("selector updated").WithTypeSetter(scheme.Scheme), PrintFlags: genericclioptions.NewPrintFlags("selector updated").WithTypeSetter(scheme.Scheme),
RecordFlags: genericclioptions.NewRecordFlags(), RecordFlags: genericclioptions.NewRecordFlags(),
Recorder: genericclioptions.NoopRecorder{}, Recorder: genericclioptions.NoopRecorder{},

View File

@ -20,8 +20,6 @@ import (
"errors" "errors"
"fmt" "fmt"
"k8s.io/kubernetes/pkg/printers"
"github.com/spf13/cobra" "github.com/spf13/cobra"
"github.com/golang/glog" "github.com/golang/glog"
@ -32,6 +30,7 @@ import (
"k8s.io/kubernetes/pkg/kubectl/cmd/templates" "k8s.io/kubernetes/pkg/kubectl/cmd/templates"
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
"k8s.io/kubernetes/pkg/kubectl/genericclioptions" "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/genericclioptions/resource"
"k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/scheme"
"k8s.io/kubernetes/pkg/kubectl/util/i18n" "k8s.io/kubernetes/pkg/kubectl/util/i18n"
@ -58,7 +57,7 @@ var (
// serviceAccountConfig encapsulates the data required to perform the operation. // serviceAccountConfig encapsulates the data required to perform the operation.
type SetServiceAccountOptions struct { type SetServiceAccountOptions struct {
PrintFlags *printers.PrintFlags PrintFlags *genericclioptions.PrintFlags
RecordFlags *genericclioptions.RecordFlags RecordFlags *genericclioptions.RecordFlags
fileNameOptions resource.FilenameOptions fileNameOptions resource.FilenameOptions
@ -79,7 +78,7 @@ type SetServiceAccountOptions struct {
func NewSetServiceAccountOptions(streams genericclioptions.IOStreams) *SetServiceAccountOptions { func NewSetServiceAccountOptions(streams genericclioptions.IOStreams) *SetServiceAccountOptions {
return &SetServiceAccountOptions{ return &SetServiceAccountOptions{
PrintFlags: printers.NewPrintFlags("serviceaccount updated").WithTypeSetter(scheme.Scheme), PrintFlags: genericclioptions.NewPrintFlags("serviceaccount updated").WithTypeSetter(scheme.Scheme),
RecordFlags: genericclioptions.NewRecordFlags(), RecordFlags: genericclioptions.NewRecordFlags(),
Recorder: genericclioptions.NoopRecorder{}, Recorder: genericclioptions.NoopRecorder{},

View File

@ -25,8 +25,6 @@ import (
"path" "path"
"testing" "testing"
"k8s.io/kubernetes/pkg/printers"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
appsv1 "k8s.io/api/apps/v1" appsv1 "k8s.io/api/apps/v1"
appsv1beta1 "k8s.io/api/apps/v1beta1" appsv1beta1 "k8s.io/api/apps/v1beta1"
@ -90,7 +88,7 @@ func TestSetServiceAccountLocal(t *testing.T) {
cmd.Flags().Set("local", "true") cmd.Flags().Set("local", "true")
testapi.Default = testapi.Groups[input.apiGroup] testapi.Default = testapi.Groups[input.apiGroup]
saConfig := SetServiceAccountOptions{ saConfig := SetServiceAccountOptions{
PrintFlags: printers.NewPrintFlags("").WithDefaultOutput(outputFormat).WithTypeSetter(scheme.Scheme), PrintFlags: genericclioptions.NewPrintFlags("").WithDefaultOutput(outputFormat).WithTypeSetter(scheme.Scheme),
fileNameOptions: resource.FilenameOptions{ fileNameOptions: resource.FilenameOptions{
Filenames: []string{input.yaml}}, Filenames: []string{input.yaml}},
local: true, local: true,
@ -128,7 +126,7 @@ func TestSetServiceAccountMultiLocal(t *testing.T) {
cmd.Flags().Set("output", outputFormat) cmd.Flags().Set("output", outputFormat)
cmd.Flags().Set("local", "true") cmd.Flags().Set("local", "true")
opts := SetServiceAccountOptions{ opts := SetServiceAccountOptions{
PrintFlags: printers.NewPrintFlags("").WithDefaultOutput(outputFormat).WithTypeSetter(scheme.Scheme), PrintFlags: genericclioptions.NewPrintFlags("").WithDefaultOutput(outputFormat).WithTypeSetter(scheme.Scheme),
fileNameOptions: resource.FilenameOptions{ fileNameOptions: resource.FilenameOptions{
Filenames: []string{"../../../../test/fixtures/pkg/kubectl/cmd/set/multi-resource-yaml.yaml"}}, Filenames: []string{"../../../../test/fixtures/pkg/kubectl/cmd/set/multi-resource-yaml.yaml"}},
local: true, local: true,
@ -365,7 +363,7 @@ func TestSetServiceAccountRemote(t *testing.T) {
cmd := NewCmdServiceAccount(tf, streams) cmd := NewCmdServiceAccount(tf, streams)
cmd.Flags().Set("output", outputFormat) cmd.Flags().Set("output", outputFormat)
saConfig := SetServiceAccountOptions{ saConfig := SetServiceAccountOptions{
PrintFlags: printers.NewPrintFlags("").WithDefaultOutput(outputFormat).WithTypeSetter(scheme.Scheme), PrintFlags: genericclioptions.NewPrintFlags("").WithDefaultOutput(outputFormat).WithTypeSetter(scheme.Scheme),
local: false, local: false,
IOStreams: streams, IOStreams: streams,
@ -407,7 +405,7 @@ func TestServiceAccountValidation(t *testing.T) {
cmd := NewCmdServiceAccount(tf, streams) cmd := NewCmdServiceAccount(tf, streams)
saConfig := &SetServiceAccountOptions{ saConfig := &SetServiceAccountOptions{
PrintFlags: printers.NewPrintFlags("").WithDefaultOutput(outputFormat).WithTypeSetter(scheme.Scheme), PrintFlags: genericclioptions.NewPrintFlags("").WithDefaultOutput(outputFormat).WithTypeSetter(scheme.Scheme),
IOStreams: streams, IOStreams: streams,
} }
err := saConfig.Complete(tf, cmd, input.args) err := saConfig.Complete(tf, cmd, input.args)

View File

@ -31,10 +31,10 @@ import (
"k8s.io/kubernetes/pkg/kubectl/cmd/templates" "k8s.io/kubernetes/pkg/kubectl/cmd/templates"
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
"k8s.io/kubernetes/pkg/kubectl/genericclioptions" "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/genericclioptions/resource"
"k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/scheme"
"k8s.io/kubernetes/pkg/kubectl/util/i18n" "k8s.io/kubernetes/pkg/kubectl/util/i18n"
"k8s.io/kubernetes/pkg/printers"
) )
var ( 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 // 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 // referencing the cmd.Flags
type SubjectOptions struct { type SubjectOptions struct {
PrintFlags *printers.PrintFlags PrintFlags *genericclioptions.PrintFlags
resource.FilenameOptions resource.FilenameOptions
@ -82,7 +82,7 @@ type SubjectOptions struct {
func NewSubjectOptions(streams genericclioptions.IOStreams) *SubjectOptions { func NewSubjectOptions(streams genericclioptions.IOStreams) *SubjectOptions {
return &SubjectOptions{ return &SubjectOptions{
PrintFlags: printers.NewPrintFlags("subjects updated").WithTypeSetter(scheme.Scheme), PrintFlags: genericclioptions.NewPrintFlags("subjects updated").WithTypeSetter(scheme.Scheme),
IOStreams: streams, IOStreams: streams,
} }

View File

@ -34,17 +34,17 @@ import (
"k8s.io/kubernetes/pkg/kubectl/cmd/templates" "k8s.io/kubernetes/pkg/kubectl/cmd/templates"
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
"k8s.io/kubernetes/pkg/kubectl/genericclioptions" "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/genericclioptions/resource"
"k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/scheme"
"k8s.io/kubernetes/pkg/kubectl/util/i18n" "k8s.io/kubernetes/pkg/kubectl/util/i18n"
"k8s.io/kubernetes/pkg/printers"
taintutils "k8s.io/kubernetes/pkg/util/taints" taintutils "k8s.io/kubernetes/pkg/util/taints"
) )
// TaintOptions have the data required to perform the taint operation // TaintOptions have the data required to perform the taint operation
type TaintOptions struct { type TaintOptions struct {
PrintFlags *printers.PrintFlags PrintFlags *genericclioptions.PrintFlags
ToPrinter func(string) (printers.ResourcePrinterFunc, error) ToPrinter func(string) (printers.ResourcePrinter, error)
resources []string resources []string
taintsToAdd []v1.Taint taintsToAdd []v1.Taint
@ -87,7 +87,7 @@ var (
func NewCmdTaint(f cmdutil.Factory, streams genericclioptions.IOStreams) *cobra.Command { func NewCmdTaint(f cmdutil.Factory, streams genericclioptions.IOStreams) *cobra.Command {
options := &TaintOptions{ options := &TaintOptions{
PrintFlags: printers.NewPrintFlags("tainted").WithTypeSetter(scheme.Scheme), PrintFlags: genericclioptions.NewPrintFlags("tainted").WithTypeSetter(scheme.Scheme),
IOStreams: streams, 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 o.PrintFlags.NamePrintFlags.Operation = operation
printer, err := o.PrintFlags.ToPrinter() return o.PrintFlags.ToPrinter()
if err != nil {
return nil, err
}
return printer.PrintObj, nil
} }
if len(o.resources) < 1 { if len(o.resources) < 1 {

View File

@ -19,11 +19,11 @@ go_library(
"//pkg/kubectl:go_default_library", "//pkg/kubectl:go_default_library",
"//pkg/kubectl/cmd/util:go_default_library", "//pkg/kubectl/cmd/util:go_default_library",
"//pkg/kubectl/genericclioptions: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/genericclioptions/resource:go_default_library",
"//pkg/kubectl/scheme:go_default_library", "//pkg/kubectl/scheme:go_default_library",
"//pkg/kubectl/util/crlf:go_default_library", "//pkg/kubectl/util/crlf:go_default_library",
"//pkg/kubectl/util/term: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/evanphx/json-patch:go_default_library",
"//vendor/github.com/golang/glog:go_default_library", "//vendor/github.com/golang/glog:go_default_library",
"//vendor/github.com/spf13/cobra:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library",

View File

@ -46,10 +46,10 @@ import (
"k8s.io/kubernetes/pkg/kubectl" "k8s.io/kubernetes/pkg/kubectl"
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
"k8s.io/kubernetes/pkg/kubectl/genericclioptions" "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/genericclioptions/resource"
"k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/scheme"
"k8s.io/kubernetes/pkg/kubectl/util/crlf" "k8s.io/kubernetes/pkg/kubectl/util/crlf"
"k8s.io/kubernetes/pkg/printers"
) )
// EditOptions contains all the options for running edit cli command. // EditOptions contains all the options for running edit cli command.
@ -57,8 +57,8 @@ type EditOptions struct {
resource.FilenameOptions resource.FilenameOptions
RecordFlags *genericclioptions.RecordFlags RecordFlags *genericclioptions.RecordFlags
PrintFlags *printers.PrintFlags PrintFlags *genericclioptions.PrintFlags
ToPrinter func(string) (printers.ResourcePrinterFunc, error) ToPrinter func(string) (printers.ResourcePrinter, error)
Output string Output string
OutputPatch bool OutputPatch bool
@ -88,7 +88,7 @@ func NewEditOptions(editMode EditMode, ioStreams genericclioptions.IOStreams) *E
EditMode: editMode, EditMode: editMode,
PrintFlags: printers.NewPrintFlags("edited").WithTypeSetter(scheme.Scheme), PrintFlags: genericclioptions.NewPrintFlags("edited").WithTypeSetter(scheme.Scheme),
WindowsLineEndings: goruntime.GOOS == "windows", WindowsLineEndings: goruntime.GOOS == "windows",
@ -163,13 +163,9 @@ func (o *EditOptions) Complete(f cmdutil.Factory, args []string, cmd *cobra.Comm
Do() Do()
} }
o.ToPrinter = func(operation string) (printers.ResourcePrinterFunc, error) { o.ToPrinter = func(operation string) (printers.ResourcePrinter, error) {
o.PrintFlags.NamePrintFlags.Operation = operation o.PrintFlags.NamePrintFlags.Operation = operation
printer, err := o.PrintFlags.ToPrinter() return o.PrintFlags.ToPrinter()
if err != nil {
return nil, err
}
return printer.PrintObj, nil
} }
o.CmdNamespace = cmdNamespace o.CmdNamespace = cmdNamespace

View File

@ -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( go_library(
name = "go_default_library", name = "go_default_library",
@ -7,11 +7,15 @@ go_library(
"config_flags_fake.go", "config_flags_fake.go",
"doc.go", "doc.go",
"io_options.go", "io_options.go",
"json_yaml_flags.go",
"name_flags.go",
"print_flags.go",
"record_flags.go", "record_flags.go",
], ],
importpath = "k8s.io/kubernetes/pkg/kubectl/genericclioptions", importpath = "k8s.io/kubernetes/pkg/kubectl/genericclioptions",
visibility = ["//visibility:public"], visibility = ["//visibility:public"],
deps = [ deps = [
"//pkg/kubectl/genericclioptions/printers:go_default_library",
"//vendor/github.com/evanphx/json-patch:go_default_library", "//vendor/github.com/evanphx/json-patch:go_default_library",
"//vendor/github.com/spf13/cobra:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library",
"//vendor/github.com/spf13/pflag:go_default_library", "//vendor/github.com/spf13/pflag:go_default_library",
@ -37,8 +41,22 @@ filegroup(
name = "all-srcs", name = "all-srcs",
srcs = [ srcs = [
":package-srcs", ":package-srcs",
"//pkg/kubectl/genericclioptions/printers:all-srcs",
"//pkg/kubectl/genericclioptions/resource:all-srcs", "//pkg/kubectl/genericclioptions/resource:all-srcs",
], ],
tags = ["automanaged"], tags = ["automanaged"],
visibility = ["//visibility:public"], 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",
],
)

View File

@ -14,12 +14,14 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package printers package genericclioptions
import ( import (
"strings" "strings"
"github.com/spf13/cobra" "github.com/spf13/cobra"
"k8s.io/kubernetes/pkg/kubectl/genericclioptions/printers"
) )
// JSONYamlPrintFlags provides default flags necessary for json/yaml printing. // JSONYamlPrintFlags provides default flags necessary for json/yaml printing.
@ -32,15 +34,15 @@ type JSONYamlPrintFlags struct {
// handling --output=(yaml|json) printing. // handling --output=(yaml|json) printing.
// Returns false if the specified outputFormat does not match a supported format. // Returns false if the specified outputFormat does not match a supported format.
// Supported Format types can be found in pkg/printers/printers.go // Supported Format types can be found in pkg/printers/printers.go
func (f *JSONYamlPrintFlags) ToPrinter(outputFormat string) (ResourcePrinter, error) { func (f *JSONYamlPrintFlags) ToPrinter(outputFormat string) (printers.ResourcePrinter, error) {
var printer ResourcePrinter var printer printers.ResourcePrinter
outputFormat = strings.ToLower(outputFormat) outputFormat = strings.ToLower(outputFormat)
switch outputFormat { switch outputFormat {
case "json": case "json":
printer = &JSONPrinter{} printer = &printers.JSONPrinter{}
case "yaml": case "yaml":
printer = &YAMLPrinter{} printer = &printers.YAMLPrinter{}
default: default:
return nil, NoCompatiblePrinterError{Options: f, OutputFormat: &outputFormat} return nil, NoCompatiblePrinterError{Options: f, OutputFormat: &outputFormat}
} }

View File

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package printers_test package genericclioptions
import ( import (
"bytes" "bytes"
@ -23,7 +23,6 @@ import (
"k8s.io/api/core/v1" "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/kubernetes/pkg/printers"
) )
func TestPrinterSupportsExpectedJSONYamlFormats(t *testing.T) { func TestPrinterSupportsExpectedJSONYamlFormats(t *testing.T) {
@ -62,16 +61,16 @@ func TestPrinterSupportsExpectedJSONYamlFormats(t *testing.T) {
for _, tc := range testCases { for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) { t.Run(tc.name, func(t *testing.T) {
printFlags := printers.JSONYamlPrintFlags{} printFlags := JSONYamlPrintFlags{}
p, err := printFlags.ToPrinter(tc.outputFormat) p, err := printFlags.ToPrinter(tc.outputFormat)
if tc.expectNoMatch { if tc.expectNoMatch {
if !printers.IsNoCompatiblePrinterError(err) { if !IsNoCompatiblePrinterError(err) {
t.Fatalf("expected no printer matches for output format %q", tc.outputFormat) t.Fatalf("expected no printer matches for output format %q", tc.outputFormat)
} }
return return
} }
if printers.IsNoCompatiblePrinterError(err) { if IsNoCompatiblePrinterError(err) {
t.Fatalf("expected to match template printer for output format %q", tc.outputFormat) t.Fatalf("expected to match template printer for output format %q", tc.outputFormat)
} }
if err != nil { if err != nil {

View File

@ -14,13 +14,15 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package printers package genericclioptions
import ( import (
"fmt" "fmt"
"strings" "strings"
"github.com/spf13/cobra" "github.com/spf13/cobra"
"k8s.io/kubernetes/pkg/kubectl/genericclioptions/printers"
) )
// NamePrintFlags provides default flags necessary for printing // NamePrintFlags provides default flags necessary for printing
@ -42,8 +44,8 @@ func (f *NamePrintFlags) Complete(successTemplate string) error {
// handling --output=name printing. // handling --output=name printing.
// Returns false if the specified outputFormat does not match a supported format. // Returns false if the specified outputFormat does not match a supported format.
// Supported format types can be found in pkg/printers/printers.go // Supported format types can be found in pkg/printers/printers.go
func (f *NamePrintFlags) ToPrinter(outputFormat string) (ResourcePrinter, error) { func (f *NamePrintFlags) ToPrinter(outputFormat string) (printers.ResourcePrinter, error) {
namePrinter := &NamePrinter{ namePrinter := &printers.NamePrinter{
Operation: f.Operation, Operation: f.Operation,
} }

View File

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package printers_test package genericclioptions
import ( import (
"bytes" "bytes"
@ -23,7 +23,6 @@ import (
"k8s.io/api/core/v1" "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/kubernetes/pkg/printers"
) )
func TestNamePrinterSupportsExpectedFormats(t *testing.T) { func TestNamePrinterSupportsExpectedFormats(t *testing.T) {
@ -78,18 +77,18 @@ func TestNamePrinterSupportsExpectedFormats(t *testing.T) {
for _, tc := range testCases { for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) { t.Run(tc.name, func(t *testing.T) {
printFlags := printers.NamePrintFlags{ printFlags := NamePrintFlags{
Operation: tc.operation, Operation: tc.operation,
} }
p, err := printFlags.ToPrinter(tc.outputFormat) p, err := printFlags.ToPrinter(tc.outputFormat)
if tc.expectNoMatch { if tc.expectNoMatch {
if !printers.IsNoCompatiblePrinterError(err) { if !IsNoCompatiblePrinterError(err) {
t.Fatalf("expected no printer matches for output format %q", tc.outputFormat) t.Fatalf("expected no printer matches for output format %q", tc.outputFormat)
} }
return return
} }
if printers.IsNoCompatiblePrinterError(err) { if IsNoCompatiblePrinterError(err) {
t.Fatalf("expected to match name printer for output format %q", tc.outputFormat) t.Fatalf("expected to match name printer for output format %q", tc.outputFormat)
} }

View File

@ -14,28 +14,16 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package printers package genericclioptions
import ( import (
"fmt" "fmt"
"strings"
"github.com/spf13/cobra" "github.com/spf13/cobra"
"k8s.io/apimachinery/pkg/runtime" "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 { type NoCompatiblePrinterError struct {
OutputFormat *string OutputFormat *string
Options interface{} Options interface{}
@ -59,14 +47,6 @@ func IsNoCompatiblePrinterError(err error) bool {
return ok return ok
} }
func IsInternalObjectError(err error) bool {
if err == nil {
return false
}
return err.Error() == internalObjectPrinterErr
}
// PrintFlags composes common printer flag structs // PrintFlags composes common printer flag structs
// used across all commands, and provides a method // used across all commands, and provides a method
// of retrieving a known printer based on flag values provided. // of retrieving a known printer based on flag values provided.
@ -74,7 +54,7 @@ type PrintFlags struct {
JSONYamlPrintFlags *JSONYamlPrintFlags JSONYamlPrintFlags *JSONYamlPrintFlags
NamePrintFlags *NamePrintFlags NamePrintFlags *NamePrintFlags
TypeSetterPrinter *TypeSetterPrinter TypeSetterPrinter *printers.TypeSetterPrinter
OutputFormat *string OutputFormat *string
} }
@ -83,7 +63,7 @@ func (f *PrintFlags) Complete(successTemplate string) error {
return f.NamePrintFlags.Complete(successTemplate) return f.NamePrintFlags.Complete(successTemplate)
} }
func (f *PrintFlags) ToPrinter() (ResourcePrinter, error) { func (f *PrintFlags) ToPrinter() (printers.ResourcePrinter, error) {
outputFormat := "" outputFormat := ""
if f.OutputFormat != nil { if f.OutputFormat != nil {
outputFormat = *f.OutputFormat 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 // WithTypeSetter sets a wrapper than will surround the returned printer with a printer to type resources
func (f *PrintFlags) WithTypeSetter(scheme *runtime.Scheme) *PrintFlags { func (f *PrintFlags) WithTypeSetter(scheme *runtime.Scheme) *PrintFlags {
f.TypeSetterPrinter = NewTypeSetter(scheme) f.TypeSetterPrinter = printers.NewTypeSetter(scheme)
return f return f
} }
@ -135,22 +115,3 @@ func NewPrintFlags(operation string) *PrintFlags {
NamePrintFlags: NewNamePrintFlags(operation), 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
}

View File

@ -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"],
)

View File

@ -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
}

View File

@ -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 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. // 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. // 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()) { if InternalObjectPreventer.IsForbidden(reflect.Indirect(reflect.ValueOf(obj)).Type().PkgPath()) {
return fmt.Errorf(internalObjectPrinterErr) return fmt.Errorf(InternalObjectPrinterErr)
} }
switch obj := obj.(type) { 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 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. // 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. // 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()) { if InternalObjectPreventer.IsForbidden(reflect.Indirect(reflect.ValueOf(obj)).Type().PkgPath()) {
return fmt.Errorf(internalObjectPrinterErr) return fmt.Errorf(InternalObjectPrinterErr)
} }
switch obj := obj.(type) { switch obj := obj.(type) {

View File

@ -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. // 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. // 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. // 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()) { if InternalObjectPreventer.IsForbidden(reflect.Indirect(reflect.ValueOf(obj)).Type().PkgPath()) {
return fmt.Errorf(internalObjectPrinterErr) return fmt.Errorf(InternalObjectPrinterErr)
} }
if meta.IsListType(obj) { if meta.IsListType(obj) {

View File

@ -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
}

View File

@ -11,25 +11,20 @@ go_library(
srcs = [ srcs = [
"customcolumn.go", "customcolumn.go",
"customcolumn_flags.go", "customcolumn_flags.go",
"flags.go",
"humanreadable.go", "humanreadable.go",
"interface.go", "interface.go",
"json.go",
"json_yaml_flags.go",
"jsonpath.go", "jsonpath.go",
"jsonpath_flags.go", "jsonpath_flags.go",
"kube_template_flags.go", "kube_template_flags.go",
"name.go",
"name_flags.go",
"tabwriter.go", "tabwriter.go",
"template.go", "template.go",
"template_flags.go", "template_flags.go",
"typesetter.go",
], ],
importpath = "k8s.io/kubernetes/pkg/printers", importpath = "k8s.io/kubernetes/pkg/printers",
deps = [ deps = [
"//pkg/kubectl/genericclioptions:go_default_library",
"//pkg/kubectl/genericclioptions/printers:go_default_library",
"//pkg/kubectl/scheme: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/github.com/spf13/cobra:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/api/meta:go_default_library", "//vendor/k8s.io/apimachinery/pkg/api/meta:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1: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( filegroup(
name = "package-srcs", name = "package-srcs",
srcs = glob(["**"]), srcs = glob(["**"]),
@ -83,13 +58,18 @@ filegroup(
go_test( go_test(
name = "go_default_test", name = "go_default_test",
srcs = [ srcs = [
"flags_test.go", "customcolumn_flags_test.go",
"customcolumn_test.go",
"humanreadable_test.go", "humanreadable_test.go",
"jsonpath_flags_test.go",
"template_flags_test.go",
"template_test.go", "template_test.go",
], ],
embed = [":go_default_library"], embed = [":go_default_library"],
deps = [ deps = [
"//pkg/api/legacyscheme:go_default_library",
"//pkg/apis/core: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/api/core/v1:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/apis/meta/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", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1:go_default_library",

View File

@ -29,6 +29,7 @@ import (
"k8s.io/apimachinery/pkg/api/meta" "k8s.io/apimachinery/pkg/api/meta"
"k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime"
"k8s.io/client-go/util/jsonpath" "k8s.io/client-go/util/jsonpath"
"k8s.io/kubernetes/pkg/kubectl/genericclioptions/printers"
) )
var jsonRegexp = regexp.MustCompile("^\\{\\.?([^{}]+)\\}$|^\\.?([^{}]+)$") 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 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. // 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. // 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()) { if printers.InternalObjectPreventer.IsForbidden(reflect.Indirect(reflect.ValueOf(obj)).Type().PkgPath()) {
return fmt.Errorf(internalObjectPrinterErr) return fmt.Errorf(printers.InternalObjectPrinterErr)
} }
if w, found := out.(*tabwriter.Writer); !found { if w, found := out.(*tabwriter.Writer); !found {

View File

@ -23,6 +23,7 @@ import (
"github.com/spf13/cobra" "github.com/spf13/cobra"
"k8s.io/kubernetes/pkg/kubectl/genericclioptions"
"k8s.io/kubernetes/pkg/kubectl/scheme" "k8s.io/kubernetes/pkg/kubectl/scheme"
) )
@ -39,7 +40,7 @@ type CustomColumnsPrintFlags struct {
// Supported format types can be found in pkg/printers/printers.go // Supported format types can be found in pkg/printers/printers.go
func (f *CustomColumnsPrintFlags) ToPrinter(templateFormat string) (ResourcePrinter, error) { func (f *CustomColumnsPrintFlags) ToPrinter(templateFormat string) (ResourcePrinter, error) {
if len(templateFormat) == 0 { if len(templateFormat) == 0 {
return nil, NoCompatiblePrinterError{} return nil, genericclioptions.NoCompatiblePrinterError{}
} }
templateValue := "" templateValue := ""
@ -63,7 +64,7 @@ func (f *CustomColumnsPrintFlags) ToPrinter(templateFormat string) (ResourcePrin
} }
if _, supportedFormat := supportedFormats[templateFormat]; !supportedFormat { if _, supportedFormat := supportedFormats[templateFormat]; !supportedFormat {
return nil, NoCompatiblePrinterError{} return nil, genericclioptions.NoCompatiblePrinterError{}
} }
if len(templateValue) == 0 { if len(templateValue) == 0 {
@ -82,8 +83,7 @@ func (f *CustomColumnsPrintFlags) ToPrinter(templateFormat string) (ResourcePrin
return p, err return p, err
} }
p, err := NewCustomColumnsPrinterFromSpec(templateValue, decoder, f.NoHeaders) return NewCustomColumnsPrinterFromSpec(templateValue, decoder, f.NoHeaders)
return p, err
} }
// AddFlags receives a *cobra.Command reference and binds // AddFlags receives a *cobra.Command reference and binds

View File

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package printers_test package printers
import ( import (
"bytes" "bytes"
@ -26,7 +26,7 @@ import (
"k8s.io/api/core/v1" "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/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) { func TestPrinterSupportsExpectedCustomColumnFormats(t *testing.T) {
@ -94,18 +94,18 @@ func TestPrinterSupportsExpectedCustomColumnFormats(t *testing.T) {
for _, tc := range testCases { for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) { t.Run(tc.name, func(t *testing.T) {
printFlags := printers.CustomColumnsPrintFlags{ printFlags := CustomColumnsPrintFlags{
TemplateArgument: tc.templateArg, TemplateArgument: tc.templateArg,
} }
p, err := printFlags.ToPrinter(tc.outputFormat) p, err := printFlags.ToPrinter(tc.outputFormat)
if tc.expectNoMatch { if tc.expectNoMatch {
if !printers.IsNoCompatiblePrinterError(err) { if !genericclioptions.IsNoCompatiblePrinterError(err) {
t.Fatalf("expected no printer matches for output format %q", tc.outputFormat) t.Fatalf("expected no printer matches for output format %q", tc.outputFormat)
} }
return return
} }
if printers.IsNoCompatiblePrinterError(err) { if genericclioptions.IsNoCompatiblePrinterError(err) {
t.Fatalf("expected to match template printer for output format %q", tc.outputFormat) t.Fatalf("expected to match template printer for output format %q", tc.outputFormat)
} }

View File

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package printers_test package printers
import ( import (
"bytes" "bytes"
@ -27,7 +27,6 @@ import (
"k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime"
"k8s.io/kubernetes/pkg/api/legacyscheme" "k8s.io/kubernetes/pkg/api/legacyscheme"
api "k8s.io/kubernetes/pkg/apis/core" api "k8s.io/kubernetes/pkg/apis/core"
"k8s.io/kubernetes/pkg/printers"
) )
func TestMassageJSONPath(t *testing.T) { func TestMassageJSONPath(t *testing.T) {
@ -48,7 +47,7 @@ func TestMassageJSONPath(t *testing.T) {
} }
for _, test := range tests { for _, test := range tests {
t.Run(test.input, func(t *testing.T) { t.Run(test.input, func(t *testing.T) {
output, err := printers.RelaxedJSONPathExpression(test.input) output, err := RelaxedJSONPathExpression(test.input)
if err != nil && !test.expectErr { if err != nil && !test.expectErr {
t.Errorf("unexpected error: %v", err) t.Errorf("unexpected error: %v", err)
return return
@ -69,7 +68,7 @@ func TestMassageJSONPath(t *testing.T) {
func TestNewColumnPrinterFromSpec(t *testing.T) { func TestNewColumnPrinterFromSpec(t *testing.T) {
tests := []struct { tests := []struct {
spec string spec string
expectedColumns []printers.Column expectedColumns []Column
expectErr bool expectErr bool
name string name string
noHeaders bool noHeaders bool
@ -97,7 +96,7 @@ func TestNewColumnPrinterFromSpec(t *testing.T) {
{ {
spec: "NAME:metadata.name,API_VERSION:apiVersion", spec: "NAME:metadata.name,API_VERSION:apiVersion",
name: "ok", name: "ok",
expectedColumns: []printers.Column{ expectedColumns: []Column{
{ {
Header: "NAME", Header: "NAME",
FieldSpec: "{.metadata.name}", FieldSpec: "{.metadata.name}",
@ -116,7 +115,7 @@ func TestNewColumnPrinterFromSpec(t *testing.T) {
} }
for _, test := range tests { for _, test := range tests {
t.Run(test.name, func(t *testing.T) { 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 test.expectErr {
if err == nil { if err == nil {
t.Errorf("[%s] unexpected non-error", test.name) t.Errorf("[%s] unexpected non-error", test.name)
@ -164,7 +163,7 @@ const exampleTemplateTwo = `NAME API_VERSION
func TestNewColumnPrinterFromTemplate(t *testing.T) { func TestNewColumnPrinterFromTemplate(t *testing.T) {
tests := []struct { tests := []struct {
spec string spec string
expectedColumns []printers.Column expectedColumns []Column
expectErr bool expectErr bool
name string name string
}{ }{
@ -191,7 +190,7 @@ func TestNewColumnPrinterFromTemplate(t *testing.T) {
{ {
spec: exampleTemplateOne, spec: exampleTemplateOne,
name: "ok", name: "ok",
expectedColumns: []printers.Column{ expectedColumns: []Column{
{ {
Header: "NAME", Header: "NAME",
FieldSpec: "{.metadata.name}", FieldSpec: "{.metadata.name}",
@ -205,7 +204,7 @@ func TestNewColumnPrinterFromTemplate(t *testing.T) {
{ {
spec: exampleTemplateTwo, spec: exampleTemplateTwo,
name: "ok-2", name: "ok-2",
expectedColumns: []printers.Column{ expectedColumns: []Column{
{ {
Header: "NAME", Header: "NAME",
FieldSpec: "{.metadata.name}", FieldSpec: "{.metadata.name}",
@ -220,7 +219,7 @@ func TestNewColumnPrinterFromTemplate(t *testing.T) {
for _, test := range tests { for _, test := range tests {
t.Run(test.name, func(t *testing.T) { t.Run(test.name, func(t *testing.T) {
reader := bytes.NewBufferString(test.spec) reader := bytes.NewBufferString(test.spec)
printer, err := printers.NewCustomColumnsPrinterFromTemplate(reader, legacyscheme.Codecs.UniversalDecoder()) printer, err := NewCustomColumnsPrinterFromTemplate(reader, legacyscheme.Codecs.UniversalDecoder())
if test.expectErr { if test.expectErr {
if err == nil { if err == nil {
t.Errorf("[%s] unexpected non-error", test.name) t.Errorf("[%s] unexpected non-error", test.name)
@ -241,12 +240,12 @@ func TestNewColumnPrinterFromTemplate(t *testing.T) {
func TestColumnPrint(t *testing.T) { func TestColumnPrint(t *testing.T) {
tests := []struct { tests := []struct {
columns []printers.Column columns []Column
obj runtime.Object obj runtime.Object
expectedOutput string expectedOutput string
}{ }{
{ {
columns: []printers.Column{ columns: []Column{
{ {
Header: "NAME", Header: "NAME",
FieldSpec: "{.metadata.name}", FieldSpec: "{.metadata.name}",
@ -258,7 +257,7 @@ foo
`, `,
}, },
{ {
columns: []printers.Column{ columns: []Column{
{ {
Header: "NAME", Header: "NAME",
FieldSpec: "{.metadata.name}", FieldSpec: "{.metadata.name}",
@ -276,7 +275,7 @@ bar
`, `,
}, },
{ {
columns: []printers.Column{ columns: []Column{
{ {
Header: "NAME", Header: "NAME",
FieldSpec: "{.metadata.name}", FieldSpec: "{.metadata.name}",
@ -292,7 +291,7 @@ foo baz
`, `,
}, },
{ {
columns: []printers.Column{ columns: []Column{
{ {
Header: "NAME", Header: "NAME",
FieldSpec: "{.metadata.name}", FieldSpec: "{.metadata.name}",
@ -315,7 +314,7 @@ foo baz <none>
for _, test := range tests { for _, test := range tests {
t.Run(test.expectedOutput, func(t *testing.T) { t.Run(test.expectedOutput, func(t *testing.T) {
printer := &printers.CustomColumnsPrinter{ printer := &CustomColumnsPrinter{
Columns: test.columns, Columns: test.columns,
Decoder: legacyscheme.Codecs.UniversalDecoder(), Decoder: legacyscheme.Codecs.UniversalDecoder(),
} }
@ -332,7 +331,7 @@ foo baz <none>
// this mimics how resource/get.go calls the customcolumn printer // this mimics how resource/get.go calls the customcolumn printer
func TestIndividualPrintObjOnExistingTabWriter(t *testing.T) { func TestIndividualPrintObjOnExistingTabWriter(t *testing.T) {
columns := []printers.Column{ columns := []Column{
{ {
Header: "NAME", Header: "NAME",
FieldSpec: "{.metadata.name}", FieldSpec: "{.metadata.name}",
@ -356,8 +355,8 @@ bar bar bar
` `
buffer := &bytes.Buffer{} buffer := &bytes.Buffer{}
tabWriter := printers.GetNewTabWriter(buffer) tabWriter := GetNewTabWriter(buffer)
printer := &printers.CustomColumnsPrinter{ printer := &CustomColumnsPrinter{
Columns: columns, Columns: columns,
Decoder: legacyscheme.Codecs.UniversalDecoder(), Decoder: legacyscheme.Codecs.UniversalDecoder(),
} }

View File

@ -27,6 +27,8 @@ go_test(
"//pkg/apis/storage:go_default_library", "//pkg/apis/storage:go_default_library",
"//pkg/client/clientset_generated/internalclientset:go_default_library", "//pkg/client/clientset_generated/internalclientset:go_default_library",
"//pkg/client/clientset_generated/internalclientset/fake: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/printers:go_default_library",
"//pkg/util/pointer:go_default_library", "//pkg/util/pointer:go_default_library",
"//vendor/github.com/ghodss/yaml:go_default_library", "//vendor/github.com/ghodss/yaml:go_default_library",

View File

@ -50,6 +50,8 @@ import (
"k8s.io/kubernetes/pkg/apis/extensions" "k8s.io/kubernetes/pkg/apis/extensions"
"k8s.io/kubernetes/pkg/apis/policy" "k8s.io/kubernetes/pkg/apis/policy"
"k8s.io/kubernetes/pkg/apis/storage" "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" "k8s.io/kubernetes/pkg/printers"
) )
@ -255,11 +257,11 @@ func testPrinter(t *testing.T, printer printers.ResourcePrinter, unmarshalFunc f
} }
func TestYAMLPrinter(t *testing.T) { 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) { 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) { func TestFormatResourceName(t *testing.T) {
@ -385,7 +387,7 @@ func TestNamePrinter(t *testing.T) {
"pod/bar\n"}, "pod/bar\n"},
} }
printFlags := printers.NewPrintFlags("").WithTypeSetter(legacyscheme.Scheme).WithDefaultOutput("name") printFlags := genericclioptions.NewPrintFlags("").WithTypeSetter(legacyscheme.Scheme).WithDefaultOutput("name")
printer, err := printFlags.ToPrinter() printer, err := printFlags.ToPrinter()
if err != nil { if err != nil {
t.Fatalf("unexpected err: %v", err) t.Fatalf("unexpected err: %v", err)
@ -548,8 +550,9 @@ func TestPrinters(t *testing.T) {
} }
genericPrinters := map[string]printers.ResourcePrinter{ genericPrinters := map[string]printers.ResourcePrinter{
"json": printers.NewTypeSetter(legacyscheme.Scheme).ToPrinter(&printers.JSONPrinter{}), // TODO(juanvallejo): move "generic printer" tests to pkg/kubectl/genericclioptions/printers
"yaml": printers.NewTypeSetter(legacyscheme.Scheme).ToPrinter(&printers.YAMLPrinter{}), "json": genericprinters.NewTypeSetter(legacyscheme.Scheme).ToPrinter(&genericprinters.JSONPrinter{}),
"yaml": genericprinters.NewTypeSetter(legacyscheme.Scheme).ToPrinter(&genericprinters.YAMLPrinter{}),
"template": templatePrinter, "template": templatePrinter,
"template2": templatePrinter2, "template2": templatePrinter2,
"jsonpath": jsonpathPrinter, "jsonpath": jsonpathPrinter,

View File

@ -25,6 +25,7 @@ import (
"k8s.io/apimachinery/pkg/api/meta" "k8s.io/apimachinery/pkg/api/meta"
"k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime"
"k8s.io/client-go/util/jsonpath" "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 // 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 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. // 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. // 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()) { if printers.InternalObjectPreventer.IsForbidden(reflect.Indirect(reflect.ValueOf(obj)).Type().PkgPath()) {
return fmt.Errorf(internalObjectPrinterErr) return fmt.Errorf(printers.InternalObjectPrinterErr)
} }
var queryObj interface{} = obj var queryObj interface{} = obj

View File

@ -22,6 +22,8 @@ import (
"strings" "strings"
"github.com/spf13/cobra" "github.com/spf13/cobra"
"k8s.io/kubernetes/pkg/kubectl/genericclioptions"
) )
// JSONPathPrintFlags provides default flags necessary for template printing. // 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. // Returns false if the specified templateFormat does not match a template format.
func (f *JSONPathPrintFlags) ToPrinter(templateFormat string) (ResourcePrinter, error) { func (f *JSONPathPrintFlags) ToPrinter(templateFormat string) (ResourcePrinter, error) {
if (f.TemplateArgument == nil || len(*f.TemplateArgument) == 0) && len(templateFormat) == 0 { 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 := "" templateValue := ""
@ -66,7 +68,7 @@ func (f *JSONPathPrintFlags) ToPrinter(templateFormat string) (ResourcePrinter,
} }
if _, supportedFormat := templateFormats[templateFormat]; !supportedFormat { if _, supportedFormat := templateFormats[templateFormat]; !supportedFormat {
return nil, NoCompatiblePrinterError{Options: f, OutputFormat: &templateFormat} return nil, genericclioptions.NoCompatiblePrinterError{Options: f, OutputFormat: &templateFormat}
} }
if len(templateValue) == 0 { if len(templateValue) == 0 {

View File

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package printers_test package printers
import ( import (
"bytes" "bytes"
@ -26,7 +26,7 @@ import (
"k8s.io/api/core/v1" "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/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) { func TestPrinterSupportsExpectedJSONPathFormats(t *testing.T) {
@ -99,18 +99,18 @@ func TestPrinterSupportsExpectedJSONPathFormats(t *testing.T) {
templateArg = nil templateArg = nil
} }
printFlags := printers.JSONPathPrintFlags{ printFlags := JSONPathPrintFlags{
TemplateArgument: templateArg, TemplateArgument: templateArg,
} }
p, err := printFlags.ToPrinter(tc.outputFormat) p, err := printFlags.ToPrinter(tc.outputFormat)
if tc.expectNoMatch { if tc.expectNoMatch {
if !printers.IsNoCompatiblePrinterError(err) { if !genericclioptions.IsNoCompatiblePrinterError(err) {
t.Fatalf("expected no printer matches for output format %q", tc.outputFormat) t.Fatalf("expected no printer matches for output format %q", tc.outputFormat)
} }
return return
} }
if printers.IsNoCompatiblePrinterError(err) { if genericclioptions.IsNoCompatiblePrinterError(err) {
t.Fatalf("expected to match template printer for output format %q", tc.outputFormat) 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 { for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) { t.Run(tc.name, func(t *testing.T) {
printFlags := printers.JSONPathPrintFlags{ printFlags := JSONPathPrintFlags{
TemplateArgument: &tc.templateArg, TemplateArgument: &tc.templateArg,
AllowMissingKeys: tc.allowMissingKeys, AllowMissingKeys: tc.allowMissingKeys,
} }
outputFormat := "jsonpath" outputFormat := "jsonpath"
p, err := printFlags.ToPrinter(outputFormat) 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) t.Fatalf("expected to match template printer for output format %q", outputFormat)
} }
if err != nil { if err != nil {

View File

@ -16,7 +16,11 @@ limitations under the License.
package printers 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. // 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 // 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) { 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 p, err
} }
return f.GoTemplatePrintFlags.ToPrinter(outputFormat) return f.GoTemplatePrintFlags.ToPrinter(outputFormat)

View File

@ -25,6 +25,7 @@ import (
"text/template" "text/template"
"k8s.io/apimachinery/pkg/runtime" "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. // 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. // PrintObj formats the obj with the Go Template.
func (p *GoTemplatePrinter) PrintObj(obj runtime.Object, w io.Writer) error { func (p *GoTemplatePrinter) PrintObj(obj runtime.Object, w io.Writer) error {
if internalObjectPreventer.IsForbidden(reflect.Indirect(reflect.ValueOf(obj)).Type().PkgPath()) { if printers.InternalObjectPreventer.IsForbidden(reflect.Indirect(reflect.ValueOf(obj)).Type().PkgPath()) {
return fmt.Errorf(internalObjectPrinterErr) return fmt.Errorf(printers.InternalObjectPrinterErr)
} }
var data []byte var data []byte

View File

@ -22,6 +22,8 @@ import (
"strings" "strings"
"github.com/spf13/cobra" "github.com/spf13/cobra"
"k8s.io/kubernetes/pkg/kubectl/genericclioptions"
) )
// GoTemplatePrintFlags provides default flags necessary for template printing. // 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. // Returns false if the specified templateFormat does not match a template format.
func (f *GoTemplatePrintFlags) ToPrinter(templateFormat string) (ResourcePrinter, error) { func (f *GoTemplatePrintFlags) ToPrinter(templateFormat string) (ResourcePrinter, error) {
if (f.TemplateArgument == nil || len(*f.TemplateArgument) == 0) && len(templateFormat) == 0 { 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 := "" templateValue := ""
@ -68,7 +70,7 @@ func (f *GoTemplatePrintFlags) ToPrinter(templateFormat string) (ResourcePrinter
} }
if _, supportedFormat := supportedFormats[templateFormat]; !supportedFormat { if _, supportedFormat := supportedFormats[templateFormat]; !supportedFormat {
return nil, NoCompatiblePrinterError{Options: f, OutputFormat: &templateFormat} return nil, genericclioptions.NoCompatiblePrinterError{Options: f, OutputFormat: &templateFormat}
} }
if len(templateValue) == 0 { if len(templateValue) == 0 {

View File

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package printers_test package printers
import ( import (
"bytes" "bytes"
@ -26,7 +26,7 @@ import (
"k8s.io/api/core/v1" "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/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) { func TestPrinterSupportsExpectedTemplateFormats(t *testing.T) {
@ -99,18 +99,18 @@ func TestPrinterSupportsExpectedTemplateFormats(t *testing.T) {
templateArg = nil templateArg = nil
} }
printFlags := printers.GoTemplatePrintFlags{ printFlags := GoTemplatePrintFlags{
TemplateArgument: templateArg, TemplateArgument: templateArg,
} }
p, err := printFlags.ToPrinter(tc.outputFormat) p, err := printFlags.ToPrinter(tc.outputFormat)
if tc.expectNoMatch { if tc.expectNoMatch {
if !printers.IsNoCompatiblePrinterError(err) { if !genericclioptions.IsNoCompatiblePrinterError(err) {
t.Fatalf("expected no printer matches for output format %q", tc.outputFormat) t.Fatalf("expected no printer matches for output format %q", tc.outputFormat)
} }
return return
} }
if printers.IsNoCompatiblePrinterError(err) { if genericclioptions.IsNoCompatiblePrinterError(err) {
t.Fatalf("expected to match template printer for output format %q", tc.outputFormat) 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 { for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) { t.Run(tc.name, func(t *testing.T) {
printFlags := printers.GoTemplatePrintFlags{ printFlags := GoTemplatePrintFlags{
TemplateArgument: &tc.templateArg, TemplateArgument: &tc.templateArg,
AllowMissingKeys: tc.allowMissingKeys, AllowMissingKeys: tc.allowMissingKeys,
} }
outputFormat := "template" outputFormat := "template"
p, err := printFlags.ToPrinter(outputFormat) 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) t.Fatalf("expected to match template printer for output format %q", outputFormat)
} }
if err != nil { if err != nil {