mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-05-18 08:51:45 +00:00
91 lines
2.3 KiB
Go
91 lines
2.3 KiB
Go
// Code generated by pluginator on PatchStrategicMergeTransformer; DO NOT EDIT.
|
|
package builtin
|
|
|
|
import (
|
|
"fmt"
|
|
"sigs.k8s.io/kustomize/v3/pkg/ifc"
|
|
"sigs.k8s.io/kustomize/v3/pkg/resmap"
|
|
"sigs.k8s.io/kustomize/v3/pkg/resource"
|
|
"sigs.k8s.io/kustomize/v3/pkg/types"
|
|
"sigs.k8s.io/yaml"
|
|
)
|
|
|
|
type PatchStrategicMergeTransformerPlugin struct {
|
|
ldr ifc.Loader
|
|
rf *resmap.Factory
|
|
loadedPatches []*resource.Resource
|
|
Paths []types.PatchStrategicMerge `json:"paths,omitempty" yaml:"paths,omitempty"`
|
|
Patches string `json:"patches,omitempty" yaml:"patches,omitempty"`
|
|
}
|
|
|
|
//noinspection GoUnusedGlobalVariable
|
|
func NewPatchStrategicMergeTransformerPlugin() *PatchStrategicMergeTransformerPlugin {
|
|
return &PatchStrategicMergeTransformerPlugin{}
|
|
}
|
|
|
|
func (p *PatchStrategicMergeTransformerPlugin) Config(
|
|
ldr ifc.Loader, rf *resmap.Factory, c []byte) (err error) {
|
|
p.ldr = ldr
|
|
p.rf = rf
|
|
err = yaml.Unmarshal(c, p)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if len(p.Paths) == 0 && p.Patches == "" {
|
|
return fmt.Errorf("empty file path and empty patch content")
|
|
}
|
|
if len(p.Paths) != 0 {
|
|
for _, onePath := range p.Paths {
|
|
res, err := p.rf.RF().SliceFromBytes([]byte(onePath))
|
|
if err == nil {
|
|
p.loadedPatches = append(p.loadedPatches, res...)
|
|
continue
|
|
}
|
|
res, err = p.rf.RF().SliceFromPatches(ldr, []types.PatchStrategicMerge{onePath})
|
|
if err != nil {
|
|
return err
|
|
}
|
|
p.loadedPatches = append(p.loadedPatches, res...)
|
|
}
|
|
}
|
|
if p.Patches != "" {
|
|
res, err := p.rf.RF().SliceFromBytes([]byte(p.Patches))
|
|
if err != nil {
|
|
return err
|
|
}
|
|
p.loadedPatches = append(p.loadedPatches, res...)
|
|
}
|
|
|
|
if len(p.loadedPatches) == 0 {
|
|
return fmt.Errorf(
|
|
"patch appears to be empty; files=%v, Patch=%s", p.Paths, p.Patches)
|
|
}
|
|
return err
|
|
}
|
|
|
|
func (p *PatchStrategicMergeTransformerPlugin) Transform(m resmap.ResMap) error {
|
|
patches, err := p.rf.MergePatches(p.loadedPatches)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for _, patch := range patches.Resources() {
|
|
target, err := m.GetById(patch.OrgId())
|
|
if err != nil {
|
|
return err
|
|
}
|
|
err = target.Patch(patch.Kunstructured)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
// remove the resource from resmap
|
|
// when the patch is to $patch: delete that target
|
|
if len(target.Map()) == 0 {
|
|
err = m.Remove(target.CurId())
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
}
|
|
return nil
|
|
}
|