...

Source file src/sigs.k8s.io/kustomize/api/internal/plugins/builtinhelpers/builtins.go

Documentation: sigs.k8s.io/kustomize/api/internal/plugins/builtinhelpers

     1  // Copyright 2019 The Kubernetes Authors.
     2  // SPDX-License-Identifier: Apache-2.0
     3  
     4  package builtinhelpers
     5  
     6  import (
     7  	"sigs.k8s.io/kustomize/api/internal/builtins"
     8  	"sigs.k8s.io/kustomize/api/resmap"
     9  )
    10  
    11  //go:generate stringer -type=BuiltinPluginType
    12  type BuiltinPluginType int
    13  
    14  const (
    15  	Unknown BuiltinPluginType = iota
    16  	AnnotationsTransformer
    17  	ConfigMapGenerator
    18  	IAMPolicyGenerator
    19  	HashTransformer
    20  	ImageTagTransformer
    21  	LabelTransformer
    22  	NamespaceTransformer
    23  	PatchJson6902Transformer
    24  	PatchStrategicMergeTransformer
    25  	PatchTransformer
    26  	PrefixSuffixTransformer
    27  	PrefixTransformer
    28  	SuffixTransformer
    29  	ReplicaCountTransformer
    30  	SecretGenerator
    31  	ValueAddTransformer
    32  	HelmChartInflationGenerator
    33  	ReplacementTransformer
    34  )
    35  
    36  var stringToBuiltinPluginTypeMap map[string]BuiltinPluginType
    37  
    38  func init() { //nolint:gochecknoinits
    39  	stringToBuiltinPluginTypeMap = makeStringToBuiltinPluginTypeMap()
    40  }
    41  
    42  func makeStringToBuiltinPluginTypeMap() (result map[string]BuiltinPluginType) {
    43  	result = make(map[string]BuiltinPluginType, 23)
    44  	for k := range GeneratorFactories {
    45  		result[k.String()] = k
    46  	}
    47  	for k := range TransformerFactories {
    48  		result[k.String()] = k
    49  	}
    50  	return
    51  }
    52  
    53  func GetBuiltinPluginType(n string) BuiltinPluginType {
    54  	result, ok := stringToBuiltinPluginTypeMap[n]
    55  	if ok {
    56  		return result
    57  	}
    58  	return Unknown
    59  }
    60  
    61  var GeneratorFactories = map[BuiltinPluginType]func() resmap.GeneratorPlugin{
    62  	ConfigMapGenerator:          builtins.NewConfigMapGeneratorPlugin,
    63  	IAMPolicyGenerator:          builtins.NewIAMPolicyGeneratorPlugin,
    64  	SecretGenerator:             builtins.NewSecretGeneratorPlugin,
    65  	HelmChartInflationGenerator: builtins.NewHelmChartInflationGeneratorPlugin,
    66  }
    67  
    68  type MultiTransformer struct {
    69  	transformers []resmap.TransformerPlugin
    70  }
    71  
    72  func (t *MultiTransformer) Transform(m resmap.ResMap) error {
    73  	for _, transformer := range t.transformers {
    74  		if err := transformer.Transform(m); err != nil {
    75  			return err
    76  		}
    77  	}
    78  	return nil
    79  }
    80  
    81  func (t *MultiTransformer) Config(h *resmap.PluginHelpers, b []byte) error {
    82  	for _, transformer := range t.transformers {
    83  		if err := transformer.Config(h, b); err != nil {
    84  			return err
    85  		}
    86  	}
    87  	return nil
    88  }
    89  
    90  func NewMultiTransformer() resmap.TransformerPlugin {
    91  	return &MultiTransformer{[]resmap.TransformerPlugin{
    92  		builtins.NewPrefixTransformerPlugin(),
    93  		builtins.NewSuffixTransformerPlugin(),
    94  	}}
    95  }
    96  
    97  var TransformerFactories = map[BuiltinPluginType]func() resmap.TransformerPlugin{
    98  	AnnotationsTransformer:         builtins.NewAnnotationsTransformerPlugin,
    99  	HashTransformer:                builtins.NewHashTransformerPlugin,
   100  	ImageTagTransformer:            builtins.NewImageTagTransformerPlugin,
   101  	LabelTransformer:               builtins.NewLabelTransformerPlugin,
   102  	NamespaceTransformer:           builtins.NewNamespaceTransformerPlugin,
   103  	PatchJson6902Transformer:       builtins.NewPatchJson6902TransformerPlugin,
   104  	PatchStrategicMergeTransformer: builtins.NewPatchStrategicMergeTransformerPlugin,
   105  	PatchTransformer:               builtins.NewPatchTransformerPlugin,
   106  	PrefixSuffixTransformer:        NewMultiTransformer,
   107  	PrefixTransformer:              builtins.NewPrefixTransformerPlugin,
   108  	SuffixTransformer:              builtins.NewSuffixTransformerPlugin,
   109  	ReplacementTransformer:         builtins.NewReplacementTransformerPlugin,
   110  	ReplicaCountTransformer:        builtins.NewReplicaCountTransformerPlugin,
   111  	ValueAddTransformer:            builtins.NewValueAddTransformerPlugin,
   112  	// Do not wired SortOrderTransformer as a builtin plugin.
   113  	// We only want it to be available in the top-level kustomization.
   114  	// See: https://github.com/kubernetes-sigs/kustomize/issues/3913
   115  }
   116  

View as plain text