Merge pull request #15499 from JanetKuo/kubectl-get-funky

Format flattened output in kubectl
pull/6/head
Marek Grabowski 2015-10-15 09:33:26 +02:00
commit 09160d8671
2 changed files with 25 additions and 5 deletions

View File

@ -21,6 +21,7 @@ import (
"io"
"github.com/spf13/cobra"
"k8s.io/kubernetes/pkg/api/meta"
"k8s.io/kubernetes/pkg/kubectl"
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
"k8s.io/kubernetes/pkg/kubectl/resource"
@ -220,14 +221,24 @@ func RunGet(f *cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []string
}
// use the default printer for each object
printer = nil
var lastMapping *meta.RESTMapping
w := kubectl.GetNewTabWriter(out)
defer w.Flush()
return b.Flatten().Do().Visit(func(r *resource.Info, err error) error {
if err != nil {
return err
}
printer, err := f.PrinterForMapping(cmd, r.Mapping, allNamespaces)
if printer == nil || lastMapping == nil || r.Mapping == nil || r.Mapping.Resource != lastMapping.Resource {
printer, err = f.PrinterForMapping(cmd, r.Mapping, allNamespaces)
if err != nil {
return err
}
lastMapping = r.Mapping
}
if _, found := printer.(*kubectl.HumanReadablePrinter); found {
return printer.PrintObj(r.Object, w)
}
return printer.PrintObj(r.Object, out)
})
}

View File

@ -1475,10 +1475,19 @@ func formatWideHeaders(wide bool, t reflect.Type) []string {
return nil
}
// GetNewTabWriter returns a tabwriter that translates tabbed columns in input into properly aligned text.
func GetNewTabWriter(output io.Writer) *tabwriter.Writer {
return tabwriter.NewWriter(output, tabwriterMinWidth, tabwriterWidth, tabwriterPadding, tabwriterPadChar, tabwriterFlags)
}
// PrintObj prints the obj in a human-friendly format according to the type of the obj.
func (h *HumanReadablePrinter) PrintObj(obj runtime.Object, output io.Writer) error {
w := tabwriter.NewWriter(output, tabwriterMinWidth, tabwriterWidth, tabwriterPadding, tabwriterPadChar, tabwriterFlags)
// if output is a tabwriter (when it's called by kubectl get), we use it; create a new tabwriter otherwise
w, found := output.(*tabwriter.Writer)
if !found {
w = GetNewTabWriter(output)
defer w.Flush()
}
t := reflect.TypeOf(obj)
if handler := h.handlerMap[t]; handler != nil {
if !h.noHeaders && t != h.lastType {