77 lines
1.5 KiB
Go
77 lines
1.5 KiB
Go
|
/*
|
||
|
Copyright 2020 VMware, Inc.
|
||
|
SPDX-License-Identifier: Apache-2.0
|
||
|
*/
|
||
|
|
||
|
package controllerlib
|
||
|
|
||
|
import (
|
||
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||
|
"k8s.io/apimachinery/pkg/util/sets"
|
||
|
)
|
||
|
|
||
|
type Filter interface {
|
||
|
Add(obj metav1.Object) bool
|
||
|
Update(oldObj, newObj metav1.Object) bool
|
||
|
Delete(obj metav1.Object) bool
|
||
|
|
||
|
Parent(obj metav1.Object) Key
|
||
|
}
|
||
|
|
||
|
var _ Filter = FilterFuncs{}
|
||
|
|
||
|
type ParentFunc func(obj metav1.Object) Key
|
||
|
|
||
|
type FilterFuncs struct {
|
||
|
ParentFunc ParentFunc
|
||
|
AddFunc func(obj metav1.Object) bool
|
||
|
UpdateFunc func(oldObj, newObj metav1.Object) bool
|
||
|
DeleteFunc func(obj metav1.Object) bool
|
||
|
}
|
||
|
|
||
|
func (f FilterFuncs) Parent(obj metav1.Object) Key {
|
||
|
if f.ParentFunc == nil {
|
||
|
return Key{
|
||
|
Namespace: obj.GetNamespace(),
|
||
|
Name: obj.GetName(),
|
||
|
}
|
||
|
}
|
||
|
return f.ParentFunc(obj)
|
||
|
}
|
||
|
|
||
|
func (f FilterFuncs) Add(obj metav1.Object) bool {
|
||
|
if f.AddFunc == nil {
|
||
|
return false
|
||
|
}
|
||
|
return f.AddFunc(obj)
|
||
|
}
|
||
|
|
||
|
func (f FilterFuncs) Update(oldObj, newObj metav1.Object) bool {
|
||
|
if f.UpdateFunc == nil {
|
||
|
return false
|
||
|
}
|
||
|
return f.UpdateFunc(oldObj, newObj)
|
||
|
}
|
||
|
|
||
|
func (f FilterFuncs) Delete(obj metav1.Object) bool {
|
||
|
if f.DeleteFunc == nil {
|
||
|
return false
|
||
|
}
|
||
|
return f.DeleteFunc(obj)
|
||
|
}
|
||
|
|
||
|
func FilterByNames(parentFunc ParentFunc, names ...string) Filter {
|
||
|
set := sets.NewString(names...)
|
||
|
has := func(obj metav1.Object) bool {
|
||
|
return set.Has(obj.GetName())
|
||
|
}
|
||
|
return FilterFuncs{
|
||
|
ParentFunc: parentFunc,
|
||
|
AddFunc: has,
|
||
|
UpdateFunc: func(oldObj, newObj metav1.Object) bool {
|
||
|
return has(newObj)
|
||
|
},
|
||
|
DeleteFunc: has,
|
||
|
}
|
||
|
}
|