...

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

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

     1  // Copyright 2019 The Kubernetes Authors.
     2  // SPDX-License-Identifier: Apache-2.0
     3  
     4  package fsslice
     5  
     6  import (
     7  	"sigs.k8s.io/kustomize/api/filters/fieldspec"
     8  	"sigs.k8s.io/kustomize/api/filters/filtersutil"
     9  	"sigs.k8s.io/kustomize/api/types"
    10  	"sigs.k8s.io/kustomize/kyaml/yaml"
    11  )
    12  
    13  var _ yaml.Filter = Filter{}
    14  
    15  // Filter ranges over an FsSlice to modify fields on a single object.
    16  // An FsSlice is a range of FieldSpecs. A FieldSpec is a GVK plus a path.
    17  type Filter struct {
    18  	// FieldSpecList list of FieldSpecs to set
    19  	FsSlice types.FsSlice `yaml:"fsSlice"`
    20  
    21  	// SetValue is called on each field that matches one of the FieldSpecs
    22  	SetValue filtersutil.SetFn
    23  
    24  	// CreateKind is used to create fields that do not exist
    25  	CreateKind yaml.Kind
    26  
    27  	// CreateTag is used to set the tag if encountering a null field
    28  	CreateTag string
    29  }
    30  
    31  func (fltr Filter) Filter(obj *yaml.RNode) (*yaml.RNode, error) {
    32  	for i := range fltr.FsSlice {
    33  		// apply this FieldSpec
    34  		// create a new filter for each iteration because they
    35  		// store internal state about the field paths
    36  		_, err := (&fieldspec.Filter{
    37  			FieldSpec:  fltr.FsSlice[i],
    38  			SetValue:   fltr.SetValue,
    39  			CreateKind: fltr.CreateKind,
    40  			CreateTag:  fltr.CreateTag,
    41  		}).Filter(obj)
    42  		if err != nil {
    43  			return nil, err
    44  		}
    45  	}
    46  	return obj, nil
    47  }
    48  

View as plain text