kubectl resource filter convert unstructured obj before apply filter func

This commit is contained in:
AdoHe 2016-11-19 13:03:39 +08:00
parent 1de096bd52
commit 67f6754e0f

View File

@ -58,6 +58,17 @@ func filterPods(obj runtime.Object, options PrintOptions) bool {
// Filter loops through a collection of FilterFuncs until it finds one that can filter the given resource
func (f Filters) Filter(obj runtime.Object, opts *PrintOptions) (bool, error) {
// check if the object is unstructured. If so, let's attempt to convert it to a type we can understand
// before apply filter func.
switch obj.(type) {
case *runtime.UnstructuredList, *runtime.Unstructured, *runtime.Unknown:
if objBytes, err := runtime.Encode(api.Codecs.LegacyCodec(), obj); err == nil {
if decodedObj, err := runtime.Decode(api.Codecs.UniversalDecoder(), objBytes); err == nil {
obj = decodedObj
}
}
}
for _, filter := range f {
if ok := filter(obj, *opts); ok {
return true, nil