From 51b0def44fc3307511ddb8057f663d5f55346e00 Mon Sep 17 00:00:00 2001 From: Brendan Burns Date: Wed, 7 Oct 2015 16:00:00 -0700 Subject: [PATCH] Fix the custom column and sorting printers for v1.List --- pkg/kubectl/custom_column_printer.go | 8 ++++++++ pkg/kubectl/sorting_printer.go | 15 ++++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/pkg/kubectl/custom_column_printer.go b/pkg/kubectl/custom_column_printer.go index e48003fac6..c73feba8f1 100644 --- a/pkg/kubectl/custom_column_printer.go +++ b/pkg/kubectl/custom_column_printer.go @@ -26,6 +26,7 @@ import ( "strings" "text/tabwriter" + "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/util/jsonpath" ) @@ -187,6 +188,13 @@ func (s *CustomColumnsPrinter) PrintObj(obj runtime.Object, out io.Writer) error func (s *CustomColumnsPrinter) printOneObject(obj runtime.Object, parsers []*jsonpath.JSONPath, out io.Writer) error { columns := make([]string, len(parsers)) + switch u := obj.(type) { + case *runtime.Unknown: + var err error + if obj, err = api.Codec.Decode(u.RawJSON); err != nil { + return err + } + } for ix := range parsers { parser := parsers[ix] values, err := parser.FindResults(reflect.ValueOf(obj).Elem().Interface()) diff --git a/pkg/kubectl/sorting_printer.go b/pkg/kubectl/sorting_printer.go index 802e9a8143..9b7892fa68 100644 --- a/pkg/kubectl/sorting_printer.go +++ b/pkg/kubectl/sorting_printer.go @@ -22,9 +22,11 @@ import ( "reflect" "sort" - "github.com/golang/glog" + "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/util/jsonpath" + + "github.com/golang/glog" ) // Sorting printer sorts list types before delegating to another printer. @@ -61,6 +63,17 @@ func (s *SortingPrinter) sortObj(obj runtime.Object) error { } parser := jsonpath.New("sorting") parser.Parse(s.SortField) + + for ix := range objs { + item := objs[ix] + switch u := item.(type) { + case *runtime.Unknown: + var err error + if objs[ix], err = api.Codec.Decode(u.RawJSON); err != nil { + return err + } + } + } values, err := parser.FindResults(reflect.ValueOf(objs[0]).Elem().Interface()) if err != nil { return err