...

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

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

     1  // Code generated by pluginator on PatchStrategicMergeTransformer; DO NOT EDIT.
     2  // pluginator {(devel)  unknown   }
     3  
     4  package builtins
     5  
     6  import (
     7  	"fmt"
     8  
     9  	"sigs.k8s.io/kustomize/api/resmap"
    10  	"sigs.k8s.io/kustomize/api/resource"
    11  	"sigs.k8s.io/kustomize/api/types"
    12  	"sigs.k8s.io/yaml"
    13  )
    14  
    15  type PatchStrategicMergeTransformerPlugin struct {
    16  	loadedPatches []*resource.Resource
    17  	Paths         []types.PatchStrategicMerge `json:"paths,omitempty" yaml:"paths,omitempty"`
    18  	Patches       string                      `json:"patches,omitempty" yaml:"patches,omitempty"`
    19  }
    20  
    21  func (p *PatchStrategicMergeTransformerPlugin) Config(
    22  	h *resmap.PluginHelpers, c []byte) (err error) {
    23  	err = yaml.Unmarshal(c, p)
    24  	if err != nil {
    25  		return err
    26  	}
    27  	if len(p.Paths) == 0 && p.Patches == "" {
    28  		return fmt.Errorf("empty file path and empty patch content")
    29  	}
    30  	if len(p.Paths) != 0 {
    31  		patches, err := loadFromPaths(h, p.Paths)
    32  		if err != nil {
    33  			return err
    34  		}
    35  		p.loadedPatches = append(p.loadedPatches, patches...)
    36  	}
    37  	if p.Patches != "" {
    38  		patches, err := h.ResmapFactory().RF().SliceFromBytes([]byte(p.Patches))
    39  		if err != nil {
    40  			return err
    41  		}
    42  		p.loadedPatches = append(p.loadedPatches, patches...)
    43  	}
    44  	if len(p.loadedPatches) == 0 {
    45  		return fmt.Errorf(
    46  			"patch appears to be empty; files=%v, Patch=%s", p.Paths, p.Patches)
    47  	}
    48  	return nil
    49  }
    50  
    51  func loadFromPaths(
    52  	h *resmap.PluginHelpers,
    53  	paths []types.PatchStrategicMerge) (
    54  	result []*resource.Resource, err error) {
    55  	var patches []*resource.Resource
    56  	for _, path := range paths {
    57  		// For legacy reasons, attempt to treat the path string as
    58  		// actual patch content.
    59  		patches, err = h.ResmapFactory().RF().SliceFromBytes([]byte(path))
    60  		if err != nil {
    61  			// Failing that, treat it as a file path.
    62  			patches, err = h.ResmapFactory().RF().SliceFromPatches(
    63  				h.Loader(), []types.PatchStrategicMerge{path})
    64  			if err != nil {
    65  				return
    66  			}
    67  		}
    68  		result = append(result, patches...)
    69  	}
    70  	return
    71  }
    72  
    73  func (p *PatchStrategicMergeTransformerPlugin) Transform(m resmap.ResMap) error {
    74  	for _, patch := range p.loadedPatches {
    75  		target, err := m.GetById(patch.OrgId())
    76  		if err != nil {
    77  			return err
    78  		}
    79  		if err = m.ApplySmPatch(
    80  			resource.MakeIdSet([]*resource.Resource{target}), patch); err != nil {
    81  			return err
    82  		}
    83  	}
    84  	return nil
    85  }
    86  
    87  func NewPatchStrategicMergeTransformerPlugin() resmap.TransformerPlugin {
    88  	return &PatchStrategicMergeTransformerPlugin{}
    89  }
    90  

View as plain text