...

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

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

     1  // Code generated by pluginator on PatchJson6902Transformer; DO NOT EDIT.
     2  // pluginator {(devel)  unknown   }
     3  
     4  package builtins
     5  
     6  import (
     7  	"fmt"
     8  
     9  	jsonpatch "gopkg.in/evanphx/json-patch.v4"
    10  	"sigs.k8s.io/kustomize/api/filters/patchjson6902"
    11  	"sigs.k8s.io/kustomize/api/ifc"
    12  	"sigs.k8s.io/kustomize/api/resmap"
    13  	"sigs.k8s.io/kustomize/api/types"
    14  	"sigs.k8s.io/kustomize/kyaml/errors"
    15  	"sigs.k8s.io/kustomize/kyaml/kio/kioutil"
    16  	"sigs.k8s.io/yaml"
    17  )
    18  
    19  type PatchJson6902TransformerPlugin struct {
    20  	ldr          ifc.Loader
    21  	decodedPatch jsonpatch.Patch
    22  	Target       *types.Selector `json:"target,omitempty" yaml:"target,omitempty"`
    23  	Path         string          `json:"path,omitempty" yaml:"path,omitempty"`
    24  	JsonOp       string          `json:"jsonOp,omitempty" yaml:"jsonOp,omitempty"`
    25  }
    26  
    27  func (p *PatchJson6902TransformerPlugin) Config(
    28  	h *resmap.PluginHelpers, c []byte) (err error) {
    29  	p.ldr = h.Loader()
    30  	err = yaml.Unmarshal(c, p)
    31  	if err != nil {
    32  		return err
    33  	}
    34  	if p.Target.Name == "" {
    35  		return fmt.Errorf("must specify the target name")
    36  	}
    37  	if p.Path == "" && p.JsonOp == "" {
    38  		return fmt.Errorf("empty file path and empty jsonOp")
    39  	}
    40  	if p.Path != "" {
    41  		if p.JsonOp != "" {
    42  			return fmt.Errorf("must specify a file path or jsonOp, not both")
    43  		}
    44  		rawOp, err := p.ldr.Load(p.Path)
    45  		if err != nil {
    46  			return err
    47  		}
    48  		p.JsonOp = string(rawOp)
    49  		if p.JsonOp == "" {
    50  			return fmt.Errorf("patch file '%s' empty seems to be empty", p.Path)
    51  		}
    52  	}
    53  	if p.JsonOp[0] != '[' {
    54  		// if it doesn't seem to be JSON, imagine
    55  		// it is YAML, and convert to JSON.
    56  		op, err := yaml.YAMLToJSON([]byte(p.JsonOp))
    57  		if err != nil {
    58  			return err
    59  		}
    60  		p.JsonOp = string(op)
    61  	}
    62  	p.decodedPatch, err = jsonpatch.DecodePatch([]byte(p.JsonOp))
    63  	if err != nil {
    64  		return errors.WrapPrefixf(err, "decoding %s", p.JsonOp)
    65  	}
    66  	if len(p.decodedPatch) == 0 {
    67  		return fmt.Errorf(
    68  			"patch appears to be empty; file=%s, JsonOp=%s", p.Path, p.JsonOp)
    69  	}
    70  	return err
    71  }
    72  
    73  func (p *PatchJson6902TransformerPlugin) Transform(m resmap.ResMap) error {
    74  	if p.Target == nil {
    75  		return fmt.Errorf("must specify a target for patch %s", p.JsonOp)
    76  	}
    77  	resources, err := m.Select(*p.Target)
    78  	if err != nil {
    79  		return err
    80  	}
    81  	for _, res := range resources {
    82  		internalAnnotations := kioutil.GetInternalAnnotations(&res.RNode)
    83  
    84  		err = res.ApplyFilter(patchjson6902.Filter{
    85  			Patch: p.JsonOp,
    86  		})
    87  		if err != nil {
    88  			return err
    89  		}
    90  
    91  		annotations := res.GetAnnotations()
    92  		for key, value := range internalAnnotations {
    93  			annotations[key] = value
    94  		}
    95  		err = res.SetAnnotations(annotations)
    96  		if err != nil {
    97  			return err
    98  		}
    99  	}
   100  	return nil
   101  }
   102  
   103  func NewPatchJson6902TransformerPlugin() resmap.TransformerPlugin {
   104  	return &PatchJson6902TransformerPlugin{}
   105  }
   106  

View as plain text