-
Notifications
You must be signed in to change notification settings - Fork 8
/
filter.go
42 lines (30 loc) · 887 Bytes
/
filter.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package job
import (
"sort"
"github.com/boz/kcache/filter"
"github.com/boz/kcache/nsname"
batchv1 "k8s.io/api/batch/v1"
)
func PodsFilter(sources ...*batchv1.Job) filter.ComparableFilter {
// make a copy and sort
srcs := make([]*batchv1.Job, len(sources))
copy(srcs, sources)
sort.Slice(srcs, func(i, j int) bool {
if srcs[i].Namespace != srcs[j].Namespace {
return srcs[i].Namespace < srcs[j].Namespace
}
return srcs[i].Name < srcs[j].Name
})
filters := make([]filter.Filter, 0, len(srcs))
for _, svc := range srcs {
var sfilter filter.Filter
if sel := svc.Spec.Selector; sel != nil {
sfilter = filter.LabelSelector(sel)
} else {
sfilter = filter.Labels(svc.Spec.Template.Labels)
}
nsfilter := filter.NSName(nsname.New(svc.GetNamespace(), ""))
filters = append(filters, filter.And(nsfilter, sfilter))
}
return filter.Or(filters...)
}