...
1
2
3
4 package labels
5
6 import (
7 "sigs.k8s.io/kustomize/api/filters/filtersutil"
8 "sigs.k8s.io/kustomize/api/filters/fsslice"
9 "sigs.k8s.io/kustomize/api/types"
10 "sigs.k8s.io/kustomize/kyaml/kio"
11 "sigs.k8s.io/kustomize/kyaml/yaml"
12 )
13
14 type labelMap map[string]string
15
16
17 type Filter struct {
18
19 Labels labelMap `yaml:"labels,omitempty"`
20
21
22 FsSlice types.FsSlice
23
24 trackableSetter filtersutil.TrackableSetter
25 }
26
27 var _ kio.Filter = Filter{}
28 var _ kio.TrackableFilter = &Filter{}
29
30
31 func (f *Filter) WithMutationTracker(callback func(key, value, tag string, node *yaml.RNode)) {
32 f.trackableSetter.WithMutationTracker(callback)
33 }
34
35 func (f Filter) Filter(nodes []*yaml.RNode) ([]*yaml.RNode, error) {
36 keys := yaml.SortedMapKeys(f.Labels)
37 _, err := kio.FilterAll(yaml.FilterFunc(
38 func(node *yaml.RNode) (*yaml.RNode, error) {
39 for _, k := range keys {
40 if err := node.PipeE(fsslice.Filter{
41 FsSlice: f.FsSlice,
42 SetValue: f.trackableSetter.SetEntry(
43 k, f.Labels[k], yaml.NodeTagString),
44 CreateKind: yaml.MappingNode,
45 CreateTag: yaml.NodeTagMap,
46 }); err != nil {
47 return nil, err
48 }
49 }
50 return node, nil
51 })).Filter(nodes)
52 return nodes, err
53 }
54
View as plain text