From 0df588385336bdf01d10bff7dad48dedf67550d3 Mon Sep 17 00:00:00 2001 From: Jeffrey Regan Date: Mon, 20 May 2019 15:34:38 -0700 Subject: [PATCH] Add builtin JSON patch transformer --- pkg/target/kusttarget.go | 7 --- pkg/target/kusttarget_configplugin.go | 18 ++++++ plugin/builtin/PatchJson6902Transformer.go | 35 ++++++++++++ .../PatchJson6902Transformer.go | 36 ++++++++++++ .../PatchJson6902Transformer_test.go | 55 +++++++++++++++++++ 5 files changed, 144 insertions(+), 7 deletions(-) create mode 100644 plugin/builtin/PatchJson6902Transformer.go create mode 100644 plugin/builtin/patchjson6902transformer/PatchJson6902Transformer.go create mode 100644 plugin/builtin/patchjson6902transformer/PatchJson6902Transformer_test.go diff --git a/pkg/target/kusttarget.go b/pkg/target/kusttarget.go index ad339b4ed..975fd4738 100644 --- a/pkg/target/kusttarget.go +++ b/pkg/target/kusttarget.go @@ -15,7 +15,6 @@ import ( "sigs.k8s.io/kustomize/pkg/accumulator" "sigs.k8s.io/kustomize/pkg/ifc" "sigs.k8s.io/kustomize/pkg/ifc/transformer" - patchtransformer "sigs.k8s.io/kustomize/pkg/patch/transformer" "sigs.k8s.io/kustomize/pkg/pgmconfig" "sigs.k8s.io/kustomize/pkg/plugins" "sigs.k8s.io/kustomize/pkg/resmap" @@ -348,12 +347,6 @@ func (kt *KustTarget) newTransformer( return nil, err } r = append(r, lts...) - t, err = patchtransformer.NewPatchJson6902Factory(kt.ldr). - MakePatchJson6902Transformer(kt.kustomization.PatchesJson6902) - if err != nil { - return nil, err - } - r = append(r, t) tp, err := kt.loadTransformerPlugins() if err != nil { return nil, err diff --git a/pkg/target/kusttarget_configplugin.go b/pkg/target/kusttarget_configplugin.go index ff0a19584..ff3a79023 100644 --- a/pkg/target/kusttarget_configplugin.go +++ b/pkg/target/kusttarget_configplugin.go @@ -6,6 +6,7 @@ package target import ( "github.com/pkg/errors" "sigs.k8s.io/kustomize/pkg/image" + "sigs.k8s.io/kustomize/pkg/patch" "sigs.k8s.io/kustomize/pkg/plugins" "sigs.k8s.io/kustomize/pkg/transformers" "sigs.k8s.io/kustomize/pkg/transformers/config" @@ -68,6 +69,7 @@ func (kt *KustTarget) configureBuiltinTransformers( kt.configureBuiltinImageTagTransformer, kt.configureBuiltinLabelTransformer, kt.configureBuiltinAnnotationsTransformer, + kt.configureBuiltinPatchJson6902Transformer, } var result []transformers.Transformer for _, f := range configurators { @@ -122,6 +124,22 @@ func (kt *KustTarget) configureBuiltinConfigMapGenerator() ( return } +func (kt *KustTarget) configureBuiltinPatchJson6902Transformer( + tConfig *config.TransformerConfig) ( + result []transformers.Transformer, err error) { + var c struct { + Patches []patch.Json6902 + } + c.Patches = kt.kustomization.PatchesJson6902 + p := builtin.NewPatchJson6902TransformerPlugin() + err = kt.configureBuiltinPlugin(p, c, "patchJson6902") + if err != nil { + return nil, err + } + result = append(result, p) + return +} + func (kt *KustTarget) configureBuiltinLabelTransformer( tConfig *config.TransformerConfig) ( result []transformers.Transformer, err error) { diff --git a/plugin/builtin/PatchJson6902Transformer.go b/plugin/builtin/PatchJson6902Transformer.go new file mode 100644 index 000000000..48f6f7dc3 --- /dev/null +++ b/plugin/builtin/PatchJson6902Transformer.go @@ -0,0 +1,35 @@ +// Code generated by pluginator on PatchJson6902Transformer; DO NOT EDIT. +package builtin + +import ( + "sigs.k8s.io/kustomize/pkg/ifc" + "sigs.k8s.io/kustomize/pkg/patch" + "sigs.k8s.io/kustomize/pkg/patch/transformer" + "sigs.k8s.io/kustomize/pkg/resmap" + "sigs.k8s.io/yaml" +) + +type PatchJson6902TransformerPlugin struct { + ldr ifc.Loader + Patches []patch.Json6902 `json:"patches,omitempty" yaml:"patches,omitempty"` +} + +func NewPatchJson6902TransformerPlugin() *PatchJson6902TransformerPlugin { + return &PatchJson6902TransformerPlugin{} +} + +func (p *PatchJson6902TransformerPlugin) Config( + ldr ifc.Loader, rf *resmap.Factory, c []byte) (err error) { + p.ldr = ldr + p.Patches = nil + return yaml.Unmarshal(c, p) +} + +func (p *PatchJson6902TransformerPlugin) Transform(m resmap.ResMap) error { + t, err := transformer.NewPatchJson6902Factory(p.ldr). + MakePatchJson6902Transformer(p.Patches) + if err != nil { + return err + } + return t.Transform(m) +} diff --git a/plugin/builtin/patchjson6902transformer/PatchJson6902Transformer.go b/plugin/builtin/patchjson6902transformer/PatchJson6902Transformer.go new file mode 100644 index 000000000..79119f55c --- /dev/null +++ b/plugin/builtin/patchjson6902transformer/PatchJson6902Transformer.go @@ -0,0 +1,36 @@ +// Copyright 2019 The Kubernetes Authors. +// SPDX-License-Identifier: Apache-2.0 + +//go:generate go run sigs.k8s.io/kustomize/plugin/pluginator +package main + +import ( + "sigs.k8s.io/kustomize/pkg/ifc" + "sigs.k8s.io/kustomize/pkg/patch" + "sigs.k8s.io/kustomize/pkg/patch/transformer" + "sigs.k8s.io/kustomize/pkg/resmap" + "sigs.k8s.io/yaml" +) + +type plugin struct { + ldr ifc.Loader + Patches []patch.Json6902 `json:"patches,omitempty" yaml:"patches,omitempty"` +} + +var KustomizePlugin plugin + +func (p *plugin) Config( + ldr ifc.Loader, rf *resmap.Factory, c []byte) (err error) { + p.ldr = ldr + p.Patches = nil + return yaml.Unmarshal(c, p) +} + +func (p *plugin) Transform(m resmap.ResMap) error { + t, err := transformer.NewPatchJson6902Factory(p.ldr). + MakePatchJson6902Transformer(p.Patches) + if err != nil { + return err + } + return t.Transform(m) +} diff --git a/plugin/builtin/patchjson6902transformer/PatchJson6902Transformer_test.go b/plugin/builtin/patchjson6902transformer/PatchJson6902Transformer_test.go new file mode 100644 index 000000000..df5268817 --- /dev/null +++ b/plugin/builtin/patchjson6902transformer/PatchJson6902Transformer_test.go @@ -0,0 +1,55 @@ +// Copyright 2019 The Kubernetes Authors. +// SPDX-License-Identifier: Apache-2.0 + +package main_test + +import ( + "testing" + + "sigs.k8s.io/kustomize/pkg/kusttest" + "sigs.k8s.io/kustomize/plugin" +) + +func TestPatchJson6902Transformer(t *testing.T) { + tc := plugin.NewEnvForTest(t).Set() + defer tc.Reset() + + tc.BuildGoPlugin( + "builtin", "", "PatchJson6902Transformer") + + th := kusttest_test.NewKustTestPluginHarness(t, "/app") + + th.WriteF("/app/jsonpatch.json", `[ + {"op": "add", "path": "/spec/replica", "value": "3"} +]`) + + rm := th.LoadAndRunTransformer(` +apiVersion: builtin +kind: PatchJson6902Transformer +metadata: + name: notImportantHere +patches: +- target: + group: apps + version: v1 + kind: Deployment + name: myDeploy + path: jsonpatch.json +`, ` +apiVersion: apps/v1 +metadata: + name: myDeploy +kind: Deployment +spec: + replica: 1 +`) + + th.AssertActualEqualsExpected(rm, ` +apiVersion: apps/v1 +kind: Deployment +metadata: + name: myDeploy +spec: + replica: "3" +`) +}