Merge pull request #36603 from fabianofranz/fix_lists_in_convert

Automatic merge from submit-queue

Fix handling lists in kubectl convert

Fixes https://github.com/kubernetes/kubernetes/issues/36722

When handling multiple objects in `kubectl convert` (for example in `kubectl convert -f .` with multiple files in current directory) the objects must be managed as a list instead of individually, otherwise `-o yaml|json` will generate invalid format (just multiple json/yaml objects concatenated) which can't be fed to `kubectl create` like in `kubectl convert -f . | kubectl create -f -`.


```release-note
NONE
```
This commit is contained in:
Kubernetes Submit Queue 2016-11-14 12:21:16 -08:00 committed by GitHub
commit 61a5d23e0f

View File

@ -22,6 +22,7 @@ import (
"os"
"k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/api/meta"
"k8s.io/kubernetes/pkg/api/unversioned"
"k8s.io/kubernetes/pkg/apimachinery/registered"
"k8s.io/kubernetes/pkg/kubectl"
@ -161,26 +162,32 @@ func (o *ConvertOptions) RunConvert() error {
return err
}
count := 0
err = r.Visit(func(info *resource.Info, err error) error {
if err != nil {
return err
}
infos := []*resource.Info{info}
objects, err := resource.AsVersionedObject(infos, false, o.outputVersion, o.encoder)
if err != nil {
return err
}
count++
return o.printer.PrintObj(objects, o.out)
})
singular := false
infos, err := r.IntoSingular(&singular).Infos()
if err != nil {
return err
}
if count == 0 {
if len(infos) == 0 {
return fmt.Errorf("no objects passed to convert")
}
return nil
objects, err := resource.AsVersionedObject(infos, !singular, o.outputVersion, o.encoder)
if err != nil {
return err
}
if meta.IsListType(objects) {
_, items, err := cmdutil.FilterResourceList(objects, nil, nil)
if err != nil {
return err
}
filteredObj, err := cmdutil.ObjectListToVersionedObject(items, o.outputVersion)
if err != nil {
return err
}
return o.printer.PrintObj(filteredObj, o.out)
}
return o.printer.PrintObj(objects, o.out)
}