...
1
2
3
4 package nameref
5
6 import (
7 "fmt"
8
9 "sigs.k8s.io/kustomize/kyaml/yaml"
10 )
11
12 type setFn func(*yaml.RNode) error
13
14 type seqFilter struct {
15 setScalarFn setFn
16 setMappingFn setFn
17 }
18
19 func (sf seqFilter) Filter(node *yaml.RNode) (*yaml.RNode, error) {
20 if yaml.IsMissingOrNull(node) {
21 return node, nil
22 }
23 switch node.YNode().Kind {
24 case yaml.ScalarNode:
25
26
27 err := sf.setScalarFn(node)
28 return node, err
29 case yaml.MappingNode:
30
31
32
33
34
35
36
37 err := sf.setMappingFn(node)
38 return node, err
39 default:
40 return node, fmt.Errorf(
41 "%#v is expected to be either a string or a map of string", node)
42 }
43 }
44
45
46 func applyFilterToSeq(filter yaml.Filter, node *yaml.RNode) error {
47 if node.YNode().Kind != yaml.SequenceNode {
48 return fmt.Errorf("expect a sequence node but got %v", node.YNode().Kind)
49 }
50
51 for _, elem := range node.Content() {
52 rnode := yaml.NewRNode(elem)
53 err := rnode.PipeE(filter)
54 if err != nil {
55 return err
56 }
57 }
58
59 return nil
60 }
61
View as plain text