Update patch factory and add multi transformer with checking conflicts

This commit is contained in:
Jingfang Liu
2018-08-31 14:20:38 -07:00
parent 95f5becee1
commit d782abb214
6 changed files with 292 additions and 44 deletions

View File

@@ -20,7 +20,6 @@ import (
"fmt"
"github.com/evanphx/json-patch"
"github.com/krishicks/yaml-patch"
"github.com/kubernetes-sigs/kustomize/pkg/loader"
"github.com/kubernetes-sigs/kustomize/pkg/patch"
"github.com/kubernetes-sigs/kustomize/pkg/resource"
@@ -28,16 +27,32 @@ import (
"k8s.io/apimachinery/pkg/runtime/schema"
)
// PatchJson6902Factory makes PatchJson6902 transformers.
// PatchJson6902Factory makes PatchJson6902 transformers
type PatchJson6902Factory struct {
targetId resource.ResId
operationsYAML yamlpatch.Patch
operationsJSON jsonpatch.Patch
loader loader.Loader
}
// NewPatchJson6902Factory returns a new PatchJson6902Factory.
func NewPatchJson6902Factory(l loader.Loader, p patch.PatchJson6902) (*PatchJson6902Factory, error) {
func NewPatchJson6902Factory(l loader.Loader) PatchJson6902Factory {
return PatchJson6902Factory{loader: l}
}
// MakePatchJson6902Transformer returns a transformer for applying Json6902 patch
func (f PatchJson6902Factory) MakePatchJson6902Transformer(patches []patch.PatchJson6902) (transformers.Transformer, error) {
var ts []transformers.Transformer
for _, p := range patches {
t, err := f.makeOnePatchJson6902Transformer(p)
if err != nil {
return nil, err
}
if t != nil {
ts = append(ts, t)
}
}
return transformers.NewMultiTransformerWithConflictCheck(ts), nil
}
func (f PatchJson6902Factory) makeOnePatchJson6902Transformer(p patch.PatchJson6902) (transformers.Transformer, error) {
if p.Target == nil {
return nil, fmt.Errorf("must specify the target field in patchesJson6902")
}
@@ -57,26 +72,19 @@ func NewPatchJson6902Factory(l loader.Loader, p patch.PatchJson6902) (*PatchJson
)
if p.JsonPatch != nil {
return &PatchJson6902Factory{targetId: targetId, operationsYAML: p.JsonPatch}, nil
return newPatchJson6902YAMLTransformer(targetId, p.JsonPatch)
}
if p.Path != "" {
rawOp, err := l.Load(p.Path)
rawOp, err := f.loader.Load(p.Path)
if err != nil {
return nil, err
}
patch, err := jsonpatch.DecodePatch(rawOp)
decodedPatch, err := jsonpatch.DecodePatch(rawOp)
if err != nil {
return nil, err
}
return &PatchJson6902Factory{targetId: targetId, operationsJSON: patch}, nil
return newPatchJson6902JSONTransformer(targetId, decodedPatch)
}
return nil, nil
}
// MakePatchJson6902Transformer returns a transformer for applying Json6902 patch
func (f *PatchJson6902Factory) MakePatchJson6902Transformer() (transformers.Transformer, error) {
if f.operationsJSON != nil {
return newPatchJson6902JSONTransformer(f.targetId, f.operationsJSON)
}
return newPatchJson6902YAMLTransformer(f.targetId, f.operationsYAML)
}