mirror of
https://github.com/k3s-io/kubernetes.git
synced 2026-01-06 07:57:35 +00:00
ExtractList should handle v1.RawExtension correctly
Also fixes CustomColumnPrinter to pass decoder in, and ensures a test case tests the combined path.
This commit is contained in:
@@ -73,7 +73,7 @@ func massageJSONPath(pathExpression string) (string, error) {
|
||||
//
|
||||
// NAME API_VERSION
|
||||
// foo bar
|
||||
func NewCustomColumnsPrinterFromSpec(spec string) (*CustomColumnsPrinter, error) {
|
||||
func NewCustomColumnsPrinterFromSpec(spec string, decoder runtime.Decoder) (*CustomColumnsPrinter, error) {
|
||||
if len(spec) == 0 {
|
||||
return nil, fmt.Errorf("custom-columns format specified but no custom columns given")
|
||||
}
|
||||
@@ -90,7 +90,7 @@ func NewCustomColumnsPrinterFromSpec(spec string) (*CustomColumnsPrinter, error)
|
||||
}
|
||||
columns[ix] = Column{Header: colSpec[0], FieldSpec: spec}
|
||||
}
|
||||
return &CustomColumnsPrinter{Columns: columns}, nil
|
||||
return &CustomColumnsPrinter{Columns: columns, Decoder: decoder}, nil
|
||||
}
|
||||
|
||||
func splitOnWhitespace(line string) []string {
|
||||
@@ -108,7 +108,7 @@ func splitOnWhitespace(line string) []string {
|
||||
// For example the template below:
|
||||
// NAME API_VERSION
|
||||
// {metadata.name} {apiVersion}
|
||||
func NewCustomColumnsPrinterFromTemplate(templateReader io.Reader) (*CustomColumnsPrinter, error) {
|
||||
func NewCustomColumnsPrinterFromTemplate(templateReader io.Reader, decoder runtime.Decoder) (*CustomColumnsPrinter, error) {
|
||||
scanner := bufio.NewScanner(templateReader)
|
||||
if !scanner.Scan() {
|
||||
return nil, fmt.Errorf("invalid template, missing header line. Expected format is one line of space separated headers, one line of space separated column specs.")
|
||||
@@ -135,7 +135,7 @@ func NewCustomColumnsPrinterFromTemplate(templateReader io.Reader) (*CustomColum
|
||||
FieldSpec: spec,
|
||||
}
|
||||
}
|
||||
return &CustomColumnsPrinter{Columns: columns}, nil
|
||||
return &CustomColumnsPrinter{Columns: columns, Decoder: decoder}, nil
|
||||
}
|
||||
|
||||
// Column represents a user specified column
|
||||
@@ -191,9 +191,11 @@ func (s *CustomColumnsPrinter) printOneObject(obj runtime.Object, parsers []*jso
|
||||
columns := make([]string, len(parsers))
|
||||
switch u := obj.(type) {
|
||||
case *runtime.Unknown:
|
||||
var err error
|
||||
if obj, _, err = s.Decoder.Decode(u.RawJSON, nil, nil); err != nil {
|
||||
return err
|
||||
if len(u.RawJSON) > 0 {
|
||||
var err error
|
||||
if obj, err = runtime.Decode(s.Decoder, u.RawJSON); err != nil {
|
||||
return fmt.Errorf("can't decode object for printing: %v (%s)", err, u.RawJSON)
|
||||
}
|
||||
}
|
||||
}
|
||||
for ix := range parsers {
|
||||
|
||||
@@ -21,6 +21,7 @@ import (
|
||||
"reflect"
|
||||
"testing"
|
||||
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||
"k8s.io/kubernetes/pkg/api/v1"
|
||||
"k8s.io/kubernetes/pkg/runtime"
|
||||
@@ -103,7 +104,7 @@ func TestNewColumnPrinterFromSpec(t *testing.T) {
|
||||
},
|
||||
}
|
||||
for _, test := range tests {
|
||||
printer, err := NewCustomColumnsPrinterFromSpec(test.spec)
|
||||
printer, err := NewCustomColumnsPrinterFromSpec(test.spec, api.Codecs.UniversalDecoder())
|
||||
if test.expectErr {
|
||||
if err == nil {
|
||||
t.Errorf("[%s] unexpected non-error", test.name)
|
||||
@@ -186,7 +187,7 @@ func TestNewColumnPrinterFromTemplate(t *testing.T) {
|
||||
}
|
||||
for _, test := range tests {
|
||||
reader := bytes.NewBufferString(test.spec)
|
||||
printer, err := NewCustomColumnsPrinterFromTemplate(reader)
|
||||
printer, err := NewCustomColumnsPrinterFromTemplate(reader, api.Codecs.UniversalDecoder())
|
||||
if test.expectErr {
|
||||
if err == nil {
|
||||
t.Errorf("[%s] unexpected non-error", test.name)
|
||||
@@ -262,6 +263,7 @@ foo baz
|
||||
for _, test := range tests {
|
||||
printer := &CustomColumnsPrinter{
|
||||
Columns: test.columns,
|
||||
Decoder: api.Codecs.UniversalDecoder(),
|
||||
}
|
||||
buffer := &bytes.Buffer{}
|
||||
if err := printer.PrintObj(test.obj, buffer); err != nil {
|
||||
|
||||
@@ -113,7 +113,7 @@ func GetPrinter(format, formatArgument string) (ResourcePrinter, bool, error) {
|
||||
}
|
||||
case "custom-columns":
|
||||
var err error
|
||||
if printer, err = NewCustomColumnsPrinterFromSpec(formatArgument); err != nil {
|
||||
if printer, err = NewCustomColumnsPrinterFromSpec(formatArgument, api.Codecs.UniversalDecoder()); err != nil {
|
||||
return nil, false, err
|
||||
}
|
||||
case "custom-columns-file":
|
||||
@@ -121,7 +121,7 @@ func GetPrinter(format, formatArgument string) (ResourcePrinter, bool, error) {
|
||||
if err != nil {
|
||||
return nil, false, fmt.Errorf("error reading template %s, %v\n", formatArgument, err)
|
||||
}
|
||||
if printer, err = NewCustomColumnsPrinterFromTemplate(file); err != nil {
|
||||
if printer, err = NewCustomColumnsPrinterFromTemplate(file, api.Codecs.UniversalDecoder()); err != nil {
|
||||
return nil, false, err
|
||||
}
|
||||
case "wide":
|
||||
|
||||
Reference in New Issue
Block a user