a503fa8673
Signed-off-by: Matt Moyer <moyerm@vmware.com>
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,
|
|
}
|
|
}
|