...
1
2
3
4 package validation
5
6 import (
7 "errors"
8
9 "sigs.k8s.io/cli-utils/pkg/multierror"
10 "sigs.k8s.io/cli-utils/pkg/object"
11 )
12
13
14
15 type Collector struct {
16 Errors []error
17 InvalidIds object.ObjMetadataSet
18 }
19
20
21
22 func (c *Collector) Collect(err error) {
23 errs := multierror.Unwrap(err)
24 c.InvalidIds = c.InvalidIds.Union(extractInvalidIds(errs))
25 c.Errors = append(c.Errors, errs...)
26 }
27
28
29 func (c *Collector) ToError() error {
30 return multierror.Wrap(c.Errors...)
31 }
32
33
34
35 func (c *Collector) FilterInvalidObjects(objs object.UnstructuredSet) object.UnstructuredSet {
36 var diff object.UnstructuredSet
37 for _, obj := range objs {
38 if !c.InvalidIds.Contains(object.UnstructuredToObjMetadata(obj)) {
39 diff = append(diff, obj)
40 }
41 }
42 return diff
43 }
44
45
46
47 func (c *Collector) FilterInvalidIds(ids object.ObjMetadataSet) object.ObjMetadataSet {
48 return ids.Diff(c.InvalidIds)
49 }
50
51
52
53 func extractInvalidIds(errs []error) object.ObjMetadataSet {
54 var invalidIds object.ObjMetadataSet
55 for _, err := range errs {
56
57 var vErr *Error
58 if errors.As(err, &vErr) {
59 invalidIds = invalidIds.Union(vErr.Identifiers())
60 }
61 }
62 return invalidIds
63 }
64
View as plain text