...

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

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

     1  // Copyright 2020 The Kubernetes Authors.
     2  // SPDX-License-Identifier: Apache-2.0
     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  // Filter sets labels.
    17  type Filter struct {
    18  	// Labels is the set of labels to apply to the inputs
    19  	Labels labelMap `yaml:"labels,omitempty"`
    20  
    21  	// FsSlice identifies the label fields.
    22  	FsSlice types.FsSlice
    23  
    24  	trackableSetter filtersutil.TrackableSetter
    25  }
    26  
    27  var _ kio.Filter = Filter{}
    28  var _ kio.TrackableFilter = &Filter{}
    29  
    30  // WithMutationTracker registers a callback which will be invoked each time a field is mutated
    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, // Labels are MappingNodes.
    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