...
1
2
3
4 package prefix
5
6 import (
7 "fmt"
8
9 "sigs.k8s.io/kustomize/api/filters/fieldspec"
10 "sigs.k8s.io/kustomize/api/filters/filtersutil"
11 "sigs.k8s.io/kustomize/api/types"
12 "sigs.k8s.io/kustomize/kyaml/kio"
13 "sigs.k8s.io/kustomize/kyaml/yaml"
14 )
15
16
17 type Filter struct {
18 Prefix string `json:"prefix,omitempty" yaml:"prefix,omitempty"`
19
20 FieldSpec types.FieldSpec `json:"fieldSpec,omitempty" yaml:"fieldSpec,omitempty"`
21
22 trackableSetter filtersutil.TrackableSetter
23 }
24
25 var _ kio.Filter = Filter{}
26 var _ kio.TrackableFilter = &Filter{}
27
28
29 func (f *Filter) WithMutationTracker(callback func(key, value, tag string, node *yaml.RNode)) {
30 f.trackableSetter.WithMutationTracker(callback)
31 }
32
33 func (f Filter) Filter(nodes []*yaml.RNode) ([]*yaml.RNode, error) {
34 return kio.FilterAll(yaml.FilterFunc(f.run)).Filter(nodes)
35 }
36
37 func (f Filter) run(node *yaml.RNode) (*yaml.RNode, error) {
38 err := node.PipeE(fieldspec.Filter{
39 FieldSpec: f.FieldSpec,
40 SetValue: f.evaluateField,
41 CreateKind: yaml.ScalarNode,
42 CreateTag: yaml.NodeTagString,
43 })
44 return node, err
45 }
46
47 func (f Filter) evaluateField(node *yaml.RNode) error {
48 return f.trackableSetter.SetScalar(fmt.Sprintf(
49 "%s%s", f.Prefix, node.YNode().Value))(node)
50 }
51
View as plain text