FlattenListVisitor now continues traversal on errors and returns an

aggregate error
This commit is contained in:
Kharun Samuel 2019-08-14 18:12:10 +05:30
parent d2b553045a
commit 58e7d16fb7

View File

@ -372,10 +372,10 @@ func (v ContinueOnErrorVisitor) Visit(fn VisitorFunc) error {
// FlattenListVisitor flattens any objects that runtime.ExtractList recognizes as a list // FlattenListVisitor flattens any objects that runtime.ExtractList recognizes as a list
// - has an "Items" public field that is a slice of runtime.Objects or objects satisfying // - has an "Items" public field that is a slice of runtime.Objects or objects satisfying
// that interface - into multiple Infos. An error on any sub item (for instance, if a List // that interface - into multiple Infos. Returns nil in the case of no errors.
// contains an object that does not have a registered client or resource) will terminate // When an error is hit on sub items (for instance, if a List contains an object that does
// the visit. // not have a registered client or resource), returns an aggregate error.
// TODO: allow errors to be aggregated?
type FlattenListVisitor struct { type FlattenListVisitor struct {
visitor Visitor visitor Visitor
typer runtime.ObjectTyper typer runtime.ObjectTyper
@ -425,20 +425,23 @@ func (v FlattenListVisitor) Visit(fn VisitorFunc) error {
if info.Mapping != nil && !info.Mapping.GroupVersionKind.Empty() { if info.Mapping != nil && !info.Mapping.GroupVersionKind.Empty() {
preferredGVKs = append(preferredGVKs, info.Mapping.GroupVersionKind) preferredGVKs = append(preferredGVKs, info.Mapping.GroupVersionKind)
} }
errs := []error{}
for i := range items { for i := range items {
item, err := v.mapper.infoForObject(items[i], v.typer, preferredGVKs) item, err := v.mapper.infoForObject(items[i], v.typer, preferredGVKs)
if err != nil { if err != nil {
return err errs = append(errs, err)
continue
} }
if len(info.ResourceVersion) != 0 { if len(info.ResourceVersion) != 0 {
item.ResourceVersion = info.ResourceVersion item.ResourceVersion = info.ResourceVersion
} }
if err := fn(item, nil); err != nil { if err := fn(item, nil); err != nil {
return err errs = append(errs, err)
} }
} }
return nil return utilerrors.NewAggregate(errs)
}) })
} }