...

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

Documentation: sigs.k8s.io/kustomize/api/internal/builtins

     1  // Code generated by pluginator on ReplacementTransformer; DO NOT EDIT.
     2  // pluginator {(devel)  unknown   }
     3  
     4  package builtins
     5  
     6  import (
     7  	"fmt"
     8  	"reflect"
     9  
    10  	"sigs.k8s.io/kustomize/api/filters/replacement"
    11  	"sigs.k8s.io/kustomize/api/resmap"
    12  	"sigs.k8s.io/kustomize/api/types"
    13  	"sigs.k8s.io/yaml"
    14  )
    15  
    16  // Replace values in targets with values from a source
    17  type ReplacementTransformerPlugin struct {
    18  	ReplacementList []types.ReplacementField `json:"replacements,omitempty" yaml:"replacements,omitempty"`
    19  	Replacements    []types.Replacement      `json:"omitempty" yaml:"omitempty"`
    20  }
    21  
    22  func (p *ReplacementTransformerPlugin) Config(
    23  	h *resmap.PluginHelpers, c []byte) (err error) {
    24  	p.ReplacementList = []types.ReplacementField{}
    25  	if err := yaml.Unmarshal(c, p); err != nil {
    26  		return err
    27  	}
    28  
    29  	for _, r := range p.ReplacementList {
    30  		if r.Path != "" && (r.Source != nil || len(r.Targets) != 0) {
    31  			return fmt.Errorf("cannot specify both path and inline replacement")
    32  		}
    33  		if r.Path != "" {
    34  			// load the replacement from the path
    35  			content, err := h.Loader().Load(r.Path)
    36  			if err != nil {
    37  				return err
    38  			}
    39  			// find if the path contains a a list of replacements or a single replacement
    40  			var replacement interface{}
    41  			err = yaml.Unmarshal(content, &replacement)
    42  			if err != nil {
    43  				return err
    44  			}
    45  			items := reflect.ValueOf(replacement)
    46  			switch items.Kind() {
    47  			case reflect.Slice:
    48  				repl := []types.Replacement{}
    49  				if err := yaml.Unmarshal(content, &repl); err != nil {
    50  					return err
    51  				}
    52  				p.Replacements = append(p.Replacements, repl...)
    53  			case reflect.Map:
    54  				repl := types.Replacement{}
    55  				if err := yaml.Unmarshal(content, &repl); err != nil {
    56  					return err
    57  				}
    58  				p.Replacements = append(p.Replacements, repl)
    59  			default:
    60  				return fmt.Errorf("unsupported replacement type encountered within replacement path: %v", items.Kind())
    61  			}
    62  		} else {
    63  			// replacement information is already loaded
    64  			p.Replacements = append(p.Replacements, r.Replacement)
    65  		}
    66  	}
    67  	return nil
    68  }
    69  
    70  func (p *ReplacementTransformerPlugin) Transform(m resmap.ResMap) (err error) {
    71  	return m.ApplyFilter(replacement.Filter{
    72  		Replacements: p.Replacements,
    73  	})
    74  }
    75  
    76  func NewReplacementTransformerPlugin() resmap.TransformerPlugin {
    77  	return &ReplacementTransformerPlugin{}
    78  }
    79  

View as plain text