diff --git a/pkg/kubectl/cmd/get.go b/pkg/kubectl/cmd/get.go index 3a7986304b..b173259677 100644 --- a/pkg/kubectl/cmd/get.go +++ b/pkg/kubectl/cmd/get.go @@ -57,13 +57,14 @@ Examples: outputFormat := getFlagString(cmd, "output") templateFile := getFlagString(cmd, "template") selector := getFlagString(cmd, "selector") - err := kubectl.Get(out, getKubeClient(cmd).RESTClient, resource, id, selector, outputFormat, templateFile) + err := kubectl.Get(out, getKubeClient(cmd).RESTClient, resource, id, selector, outputFormat, getFlagBool(cmd, "no-headers"), templateFile) checkErr(err) }, } // TODO Add an --output-version lock which can ensure that regardless of the // server version, the client output stays the same. cmd.Flags().StringP("output", "o", "console", "Output format: console|json|yaml|template") + cmd.Flags().Bool("no-headers", false, "When output format is console, don't print headers") cmd.Flags().StringP("template", "t", "", "Path to template file to use when --output=template") cmd.Flags().StringP("selector", "l", "", "Selector (label query) to filter on") return cmd diff --git a/pkg/kubectl/get.go b/pkg/kubectl/get.go index 5a1adac9b0..bd54cb650a 100644 --- a/pkg/kubectl/get.go +++ b/pkg/kubectl/get.go @@ -23,7 +23,7 @@ import ( "github.com/GoogleCloudPlatform/kubernetes/pkg/client" ) -func Get(w io.Writer, c *client.RESTClient, resource, id, selector, format, templateFile string) error { +func Get(w io.Writer, c *client.RESTClient, resource string, id string, selector string, format string, noHeaders bool, templateFile string) error { path, err := resolveResource(resolveToPath, resource) if err != nil { return err @@ -42,7 +42,7 @@ func Get(w io.Writer, c *client.RESTClient, resource, id, selector, format, temp return err } - printer, err := getPrinter(format, templateFile) + printer, err := getPrinter(format, templateFile, noHeaders) if err != nil { return err } diff --git a/pkg/kubectl/resource_printer.go b/pkg/kubectl/resource_printer.go index c865291315..dea156960f 100644 --- a/pkg/kubectl/resource_printer.go +++ b/pkg/kubectl/resource_printer.go @@ -34,7 +34,7 @@ import ( "gopkg.in/v1/yaml" ) -func getPrinter(format, templateFile string) (ResourcePrinter, error) { +func getPrinter(format, templateFile string, noHeaders bool) (ResourcePrinter, error) { var printer ResourcePrinter switch format { case "json": @@ -60,7 +60,7 @@ func getPrinter(format, templateFile string) (ResourcePrinter, error) { Template: tmpl, } default: - printer = NewHumanReadablePrinter() + printer = NewHumanReadablePrinter(noHeaders) } return printer, nil } @@ -105,11 +105,15 @@ type handlerEntry struct { // HumanReadablePrinter is an implementation of ResourcePrinter which attempts to provide more elegant output. type HumanReadablePrinter struct { handlerMap map[reflect.Type]*handlerEntry + noHeaders bool } // NewHumanReadablePrinter creates a HumanReadablePrinter. -func NewHumanReadablePrinter() *HumanReadablePrinter { - printer := &HumanReadablePrinter{make(map[reflect.Type]*handlerEntry)} +func NewHumanReadablePrinter(noHeaders bool) *HumanReadablePrinter { + printer := &HumanReadablePrinter{ + handlerMap: make(map[reflect.Type]*handlerEntry), + noHeaders: noHeaders, + } printer.addDefaultHandlers() return printer } @@ -260,7 +264,9 @@ func (h *HumanReadablePrinter) PrintObj(obj runtime.Object, output io.Writer) er w := tabwriter.NewWriter(output, 20, 5, 3, ' ', 0) defer w.Flush() if handler := h.handlerMap[reflect.TypeOf(obj)]; handler != nil { - h.printHeader(handler.columns, w) + if !h.noHeaders { + h.printHeader(handler.columns, w) + } args := []reflect.Value{reflect.ValueOf(obj), reflect.ValueOf(w)} resultValue := handler.printFunc.Call(args)[0] if resultValue.IsNil() { diff --git a/pkg/kubectl/resource_printer_test.go b/pkg/kubectl/resource_printer_test.go index 2ee7c74292..4fb1d56470 100644 --- a/pkg/kubectl/resource_printer_test.go +++ b/pkg/kubectl/resource_printer_test.go @@ -104,7 +104,7 @@ func ErrorPrintHandler(obj *TestPrintType, w io.Writer) error { func TestCustomTypePrinting(t *testing.T) { columns := []string{"Data"} - printer := NewHumanReadablePrinter() + printer := NewHumanReadablePrinter(false) printer.Handler(columns, PrintCustomType) obj := TestPrintType{"test object"} @@ -121,7 +121,7 @@ func TestCustomTypePrinting(t *testing.T) { func TestPrintHandlerError(t *testing.T) { columns := []string{"Data"} - printer := NewHumanReadablePrinter() + printer := NewHumanReadablePrinter(false) printer.Handler(columns, ErrorPrintHandler) obj := TestPrintType{"test object"} buffer := &bytes.Buffer{} @@ -132,7 +132,7 @@ func TestPrintHandlerError(t *testing.T) { } func TestUnknownTypePrinting(t *testing.T) { - printer := NewHumanReadablePrinter() + printer := NewHumanReadablePrinter(false) buffer := &bytes.Buffer{} err := printer.PrintObj(&TestUnknownType{}, buffer) if err == nil {