...

Source file src/sigs.k8s.io/kustomize/api/filters/nameref/seqfilter.go

Documentation: sigs.k8s.io/kustomize/api/filters/nameref

     1  // Copyright 2022 The Kubernetes Authors.
     2  // SPDX-License-Identifier: Apache-2.0
     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  		// Kind: Role/ClusterRole
    26  		// FieldSpec is rules.resourceNames
    27  		err := sf.setScalarFn(node)
    28  		return node, err
    29  	case yaml.MappingNode:
    30  		// Kind: RoleBinding/ClusterRoleBinding
    31  		// FieldSpec is subjects
    32  		// Note: The corresponding fieldSpec had been changed from
    33  		// from path: subjects/name to just path: subjects. This is
    34  		// what get mutatefield to request the mapping of the whole
    35  		// map containing namespace and name instead of just a simple
    36  		// string field containing the name
    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  // applyFilterToSeq will apply the filter to each element in the sequence node
    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