mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-06-11 17:12:51 +00:00
Add TrackableFilter interface (#4410)
* add kio filter interface This interface is an extension of the Filter interface which can be used for filters which are capable of tracking which fields they mutate. * add TrackableSetter struct to filtersutil This struct provides an abstraction to help Filters implement the TrackableFilter interface * implement TrackableFilter with annotations This updates the annotations filter to implement the TrackableFilter interface by reusing the TrackableSetter abstraction provided by filtersutil. This is done to provide a generic and consistent experience across the filters * implement TrackableFilter with labels This updates the labels filter to implement the TrackableFilter interface by reusing the TrackableSetter abstraction provided by filtersutil. This is done to provide a generic and consistent experience across the filters
This commit is contained in:
@@ -31,3 +31,39 @@ func SetEntry(key, value, tag string) SetFn {
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
type TrackableSetter struct {
|
||||
// SetValueCallback will be invoked each time a field is set
|
||||
setValueCallback func(key, value, tag string, node *yaml.RNode)
|
||||
}
|
||||
|
||||
// WithMutationTracker registers a callback which will be invoked each time a field is mutated
|
||||
func (s *TrackableSetter) WithMutationTracker(callback func(key, value, tag string, node *yaml.RNode)) {
|
||||
s.setValueCallback = callback
|
||||
}
|
||||
|
||||
// SetScalar returns a SetFn to set a scalar value
|
||||
// if a mutation tracker has been registered, the tracker will be invoked each
|
||||
// time a scalar is set
|
||||
func (s TrackableSetter) SetScalar(value string) SetFn {
|
||||
origSetScalar := SetScalar(value)
|
||||
return func(node *yaml.RNode) error {
|
||||
if s.setValueCallback != nil {
|
||||
s.setValueCallback("", value, "", node)
|
||||
}
|
||||
return origSetScalar(node)
|
||||
}
|
||||
}
|
||||
|
||||
// SetEntry returns a SetFn to set an entry in a map
|
||||
// if a mutation tracker has been registered, the tracker will be invoked each
|
||||
// time an entry is set
|
||||
func (s TrackableSetter) SetEntry(key, value, tag string) SetFn {
|
||||
origSetEntry := SetEntry(key, value, tag)
|
||||
return func(node *yaml.RNode) error {
|
||||
if s.setValueCallback != nil {
|
||||
s.setValueCallback(key, value, tag, node)
|
||||
}
|
||||
return origSetEntry(node)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user