...
1
2
3
4 package replicacount
5
6 import (
7 "strconv"
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 Replica types.Replica `json:"replica,omitempty" yaml:"replica,omitempty"`
19 FieldSpec types.FieldSpec `json:"fieldSpec,omitempty" yaml:"fieldSpec,omitempty"`
20
21 trackableSetter filtersutil.TrackableSetter
22 }
23
24 var _ kio.Filter = Filter{}
25 var _ kio.TrackableFilter = &Filter{}
26
27
28 func (rc *Filter) WithMutationTracker(callback func(key, value, tag string, node *yaml.RNode)) {
29 rc.trackableSetter.WithMutationTracker(callback)
30 }
31
32 func (rc Filter) Filter(nodes []*yaml.RNode) ([]*yaml.RNode, error) {
33 return kio.FilterAll(yaml.FilterFunc(rc.run)).Filter(nodes)
34 }
35
36 func (rc Filter) run(node *yaml.RNode) (*yaml.RNode, error) {
37 err := node.PipeE(fieldspec.Filter{
38 FieldSpec: rc.FieldSpec,
39 SetValue: rc.set,
40 CreateKind: yaml.ScalarNode,
41 CreateTag: yaml.NodeTagInt,
42 })
43 return node, err
44 }
45
46 func (rc Filter) set(node *yaml.RNode) error {
47 return rc.trackableSetter.SetEntry("", strconv.FormatInt(rc.Replica.Count, 10), yaml.NodeTagInt)(node)
48 }
49
View as plain text