diff --git a/api/builtins/AnnotationsTransformer.go b/api/builtins/AnnotationsTransformer.go index 68d351e18..7064fa80c 100644 --- a/api/builtins/AnnotationsTransformer.go +++ b/api/builtins/AnnotationsTransformer.go @@ -27,16 +27,10 @@ func (p *AnnotationsTransformerPlugin) Transform(m resmap.ResMap) error { if len(p.Annotations) == 0 { return nil } - for _, r := range m.Resources() { - err := r.ApplyFilter(annotations.Filter{ - Annotations: p.Annotations, - FsSlice: p.FieldSpecs, - }) - if err != nil { - return err - } - } - return nil + return m.ApplyFilter(annotations.Filter{ + Annotations: p.Annotations, + FsSlice: p.FieldSpecs, + }) } func NewAnnotationsTransformerPlugin() resmap.TransformerPlugin { diff --git a/api/builtins/ImageTagTransformer.go b/api/builtins/ImageTagTransformer.go index a09ef163d..52a44d385 100644 --- a/api/builtins/ImageTagTransformer.go +++ b/api/builtins/ImageTagTransformer.go @@ -25,24 +25,15 @@ func (p *ImageTagTransformerPlugin) Config( } func (p *ImageTagTransformerPlugin) Transform(m resmap.ResMap) error { - for _, r := range m.Resources() { - // traverse all fields at first - err := r.ApplyFilter(imagetag.LegacyFilter{ - ImageTag: p.ImageTag, - }) - if err != nil { - return err - } - // then use user specified field specs - err = r.ApplyFilter(imagetag.Filter{ - ImageTag: p.ImageTag, - FsSlice: p.FieldSpecs, - }) - if err != nil { - return err - } + if err := m.ApplyFilter(imagetag.LegacyFilter{ + ImageTag: p.ImageTag, + }); err != nil { + return err } - return nil + return m.ApplyFilter(imagetag.Filter{ + ImageTag: p.ImageTag, + FsSlice: p.FieldSpecs, + }) } func NewImageTagTransformerPlugin() resmap.TransformerPlugin { diff --git a/api/builtins/LabelTransformer.go b/api/builtins/LabelTransformer.go index 647e57efd..af601da5b 100644 --- a/api/builtins/LabelTransformer.go +++ b/api/builtins/LabelTransformer.go @@ -27,16 +27,10 @@ func (p *LabelTransformerPlugin) Transform(m resmap.ResMap) error { if len(p.Labels) == 0 { return nil } - for _, r := range m.Resources() { - err := r.ApplyFilter(labels.Filter{ - Labels: p.Labels, - FsSlice: p.FieldSpecs, - }) - if err != nil { - return err - } - } - return nil + return m.ApplyFilter(labels.Filter{ + Labels: p.Labels, + FsSlice: p.FieldSpecs, + }) } func NewLabelTransformerPlugin() resmap.TransformerPlugin { diff --git a/api/builtins/PrefixSuffixTransformer.go b/api/builtins/PrefixSuffixTransformer.go index ec9e8f7dc..57a81a0fc 100644 --- a/api/builtins/PrefixSuffixTransformer.go +++ b/api/builtins/PrefixSuffixTransformer.go @@ -73,12 +73,11 @@ func (p *PrefixSuffixTransformerPlugin) Transform(m resmap.ResMap) error { r.StorePreviousId() } } - err := r.ApplyFilter(prefixsuffix.Filter{ + if err := r.ApplyFilter(prefixsuffix.Filter{ Prefix: p.Prefix, Suffix: p.Suffix, FieldSpec: fs, - }) - if err != nil { + }); err != nil { return err } } diff --git a/api/builtins/ReplacementTransformer.go b/api/builtins/ReplacementTransformer.go index 0e04d05fb..21e42c81e 100644 --- a/api/builtins/ReplacementTransformer.go +++ b/api/builtins/ReplacementTransformer.go @@ -9,7 +9,6 @@ import ( "sigs.k8s.io/kustomize/api/filters/replacement" "sigs.k8s.io/kustomize/api/resmap" "sigs.k8s.io/kustomize/api/types" - kyaml "sigs.k8s.io/kustomize/kyaml/yaml" "sigs.k8s.io/yaml" ) @@ -50,14 +49,9 @@ func (p *ReplacementTransformerPlugin) Config( } func (p *ReplacementTransformerPlugin) Transform(m resmap.ResMap) (err error) { - var nodes []*kyaml.RNode - for _, r := range m.Resources() { - nodes = append(nodes, r.Node()) - } - _, err = replacement.Filter{ + return m.ApplyFilter(replacement.Filter{ Replacements: p.Replacements, - }.Filter(nodes) - return err + }) } func NewReplacementTransformerPlugin() resmap.TransformerPlugin { diff --git a/api/resmap/resmap.go b/api/resmap/resmap.go index 766dbb1de..704276cf1 100644 --- a/api/resmap/resmap.go +++ b/api/resmap/resmap.go @@ -9,6 +9,7 @@ import ( "sigs.k8s.io/kustomize/api/ifc" "sigs.k8s.io/kustomize/api/resource" "sigs.k8s.io/kustomize/api/types" + "sigs.k8s.io/kustomize/kyaml/kio" "sigs.k8s.io/kustomize/kyaml/resid" "sigs.k8s.io/kustomize/kyaml/yaml" ) @@ -173,7 +174,7 @@ type ResMap interface { // in the resid.DefaultNamespace entry. GroupedByCurrentNamespace() map[string][]*resource.Resource - // GroupByOrginalNamespace performs as GroupByNamespace + // GroupedByOriginalNamespace performs as GroupByNamespace // but use the original namespace instead of the current // one to perform the grouping. GroupedByOriginalNamespace() map[string][]*resource.Resource @@ -253,4 +254,14 @@ type ResMap interface { // RemoveBuildAnnotations removes annotations created by the build process. RemoveBuildAnnotations() + + // ApplyFilter applies an RNode filter to all Resources in the ResMap. + // TODO: Send/recover ancillary Resource data to/from subprocesses. + // Assure that the ancillary data in Resource (everything not in the RNode) + // is sent to and re-captured from transformer subprocess (as the process + // might edit that information). One way to do this would be to solely use + // RNode metadata annotation reading and writing instead of using Resource + // struct data members, i.e. the Resource struct is replaced by RNode + // and use of (slow) k8s metadata annotations inside the RNode. + ApplyFilter(f kio.Filter) error } diff --git a/api/resmap/reswrangler.go b/api/resmap/reswrangler.go index 378ecf0e3..eb78376ab 100644 --- a/api/resmap/reswrangler.go +++ b/api/resmap/reswrangler.go @@ -10,6 +10,7 @@ import ( "github.com/pkg/errors" "sigs.k8s.io/kustomize/api/resource" "sigs.k8s.io/kustomize/api/types" + "sigs.k8s.io/kustomize/kyaml/kio" "sigs.k8s.io/kustomize/kyaml/resid" kyaml "sigs.k8s.io/kustomize/kyaml/yaml" ) @@ -423,6 +424,7 @@ func getNamespacesForRoleBinding(r *resource.Resource) map[string]bool { if r.GetKind() != "RoleBinding" { return result } + //nolint staticcheck subjects, err := r.GetSlice("subjects") if err != nil || subjects == nil { return result @@ -617,3 +619,41 @@ func (m *resWrangler) RemoveBuildAnnotations() { r.RemoveBuildAnnotations() } } + +// ApplyFilter implements ResMap. +func (m *resWrangler) ApplyFilter(f kio.Filter) error { + reverseLookup := make(map[*kyaml.RNode]*resource.Resource, len(m.rList)) + nodes := make([]*kyaml.RNode, len(m.rList)) + for i, r := range m.rList { + ptr := r.Node() + nodes[i] = ptr + reverseLookup[ptr] = r + } + // The filter can modify nodes, but also delete and create them. + // The filtered list might be smaller or larger than the nodes list. + filtered, err := f.Filter(nodes) + if err != nil { + return err + } + // Rebuild the resmap from the filtered RNodes. + var nRList []*resource.Resource + for _, rn := range filtered { + if rn.IsNilOrEmpty() { + // A node might make it through the filter as an object, + // but still be empty. Drop such entries. + continue + } + res, ok := reverseLookup[rn] + if !ok { + // A node was created; make a Resource to wrap it. + // Leave remaining Resource fields empty. + // At time of writing, seeking to eliminate those fields. + // Alternatively, could just return error on creation attempt + // until remaining fields eliminated. + res = resource.NewResource(rn) + } + nRList = append(nRList, res) + } + m.rList = nRList + return nil +} diff --git a/api/resmap/reswrangler_test.go b/api/resmap/reswrangler_test.go index 1e038b3d1..3e1f7d5c6 100644 --- a/api/resmap/reswrangler_test.go +++ b/api/resmap/reswrangler_test.go @@ -11,12 +11,16 @@ import ( "testing" "github.com/stretchr/testify/assert" + "sigs.k8s.io/kustomize/api/filters/labels" "sigs.k8s.io/kustomize/api/provider" . "sigs.k8s.io/kustomize/api/resmap" "sigs.k8s.io/kustomize/api/resource" + kusttest_test "sigs.k8s.io/kustomize/api/testutils/kusttest" resmaptest_test "sigs.k8s.io/kustomize/api/testutils/resmaptest" "sigs.k8s.io/kustomize/api/types" + "sigs.k8s.io/kustomize/kyaml/kio" "sigs.k8s.io/kustomize/kyaml/resid" + "sigs.k8s.io/kustomize/kyaml/yaml" ) var depProvider = provider.NewDefaultDepProvider() @@ -1144,6 +1148,186 @@ func addNamespace(namespace string, base string) string { return res } +// DeleteOddsFilter deletes the odd entries, removing nodes. +// This is a ridiculous filter for testing. +type DeleteOddsFilter struct{} + +func (f DeleteOddsFilter) Filter( + nodes []*yaml.RNode) (result []*yaml.RNode, err error) { + for i := range nodes { + if i%2 == 0 { + // Keep the even entries, drop the odd entries. + result = append(result, nodes[i]) + } + } + return +} + +// CloneOddsFilter deletes even entries and clones odd entries, +// making new nodes. +// This is a ridiculous filter for testing. +type CloneOddsFilter struct{} + +func (f CloneOddsFilter) Filter( + nodes []*yaml.RNode) (result []*yaml.RNode, err error) { + for i := range nodes { + if i%2 != 0 { + newNode := nodes[i].Copy() + // Add suffix to the name, so that it's unique (w/r to this test). + newNode.SetName(newNode.GetName() + "Clone") + // Return a ptr to the copy. + result = append(result, nodes[i], newNode) + } + } + return +} + +func TestApplyFilter(t *testing.T) { + tests := map[string]struct { + input string + f kio.Filter + expected string + }{ + "labels": { + input: ` +apiVersion: example.com/v1 +kind: Beans +metadata: + name: myBeans +--- +apiVersion: example.com/v1 +kind: Franks +metadata: + name: myFranks +`, + f: labels.Filter{ + Labels: map[string]string{ + "a": "foo", + "b": "bar", + }, + FsSlice: types.FsSlice{ + { + Gvk: resid.NewGvk("example.com", "v1", "Beans"), + Path: "metadata/labels", + CreateIfNotPresent: true, + }, + }, + }, + expected: ` +apiVersion: example.com/v1 +kind: Beans +metadata: + labels: + a: foo + b: bar + name: myBeans +--- +apiVersion: example.com/v1 +kind: Franks +metadata: + name: myFranks +`, + }, + "deleteOddNodes": { + input: ` +apiVersion: example.com/v1 +kind: Zero +metadata: + name: r0 +--- +apiVersion: example.com/v1 +kind: One +metadata: + name: r1 +--- +apiVersion: example.com/v1 +kind: Two +metadata: + name: r2 +--- +apiVersion: example.com/v1 +kind: Three +metadata: + name: r3 +`, + f: DeleteOddsFilter{}, + expected: ` +apiVersion: example.com/v1 +kind: Zero +metadata: + name: r0 +--- +apiVersion: example.com/v1 +kind: Two +metadata: + name: r2 +`, + }, + "cloneOddNodes": { + // input list has five entries + input: ` +apiVersion: example.com/v1 +kind: Zero +metadata: + name: r0 +--- +apiVersion: example.com/v1 +kind: One +metadata: + name: r1 +--- +apiVersion: example.com/v1 +kind: Two +metadata: + name: r2 +--- +apiVersion: example.com/v1 +kind: Three +metadata: + name: r3 +--- +apiVersion: example.com/v1 +kind: Four +metadata: + name: r4 +`, + f: CloneOddsFilter{}, + // output has four, but half are newly created nodes. + expected: ` +apiVersion: example.com/v1 +kind: One +metadata: + name: r1 +--- +apiVersion: example.com/v1 +kind: One +metadata: + name: r1Clone +--- +apiVersion: example.com/v1 +kind: Three +metadata: + name: r3 +--- +apiVersion: example.com/v1 +kind: Three +metadata: + name: r3Clone +`, + }, + } + for name := range tests { + tc := tests[name] + t.Run(name, func(t *testing.T) { + m, err := rmF.NewResMapFromBytes([]byte(tc.input)) + assert.NoError(t, err) + assert.NoError(t, m.ApplyFilter(tc.f)) + kusttest_test.AssertActualEqualsExpectedWithTweak( + t, m, nil, tc.expected) + }) + } +} + func TestApplySmPatch_Deletion(t *testing.T) { target := ` apiVersion: apps/v1 diff --git a/api/resource/resource.go b/api/resource/resource.go index 8667b9f1e..54ca906f9 100644 --- a/api/resource/resource.go +++ b/api/resource/resource.go @@ -54,6 +54,10 @@ var buildAnnotations = []string{ buildAnnotationAllowKindChange, } +func NewResource(rn *kyaml.RNode) *Resource { + return &Resource{node: rn} +} + func (r *Resource) AsRNode() *kyaml.RNode { return r.node.Copy() } diff --git a/api/testutils/kusttest/hasgett.go b/api/testutils/kusttest/hasgett.go index 22df9b245..33496b9d2 100644 --- a/api/testutils/kusttest/hasgett.go +++ b/api/testutils/kusttest/hasgett.go @@ -19,8 +19,15 @@ func assertActualEqualsExpectedWithTweak( ht hasGetT, m resmap.ResMap, tweaker func([]byte) []byte, expected string) { + AssertActualEqualsExpectedWithTweak(ht.GetT(), m, tweaker, expected) +} + +func AssertActualEqualsExpectedWithTweak( + t *testing.T, + m resmap.ResMap, + tweaker func([]byte) []byte, expected string) { if m == nil { - ht.GetT().Fatalf("Map should not be nil.") + t.Fatalf("Map should not be nil.") } // Ignore leading linefeed in expected value // to ease readability of tests. @@ -29,13 +36,13 @@ func assertActualEqualsExpectedWithTweak( } actual, err := m.AsYaml() if err != nil { - ht.GetT().Fatalf("Unexpected err: %v", err) + t.Fatalf("Unexpected err: %v", err) } if tweaker != nil { actual = tweaker(actual) } if string(actual) != expected { - reportDiffAndFail(ht.GetT(), actual, expected) + reportDiffAndFail(t, actual, expected) } } diff --git a/cmd/pluginator/go.sum b/cmd/pluginator/go.sum index c22eb6b1a..051120cf7 100644 --- a/cmd/pluginator/go.sum +++ b/cmd/pluginator/go.sum @@ -30,6 +30,7 @@ github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZm github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= +github.com/evanphx/json-patch v4.5.0+incompatible h1:ouOWdg56aJriqS0huScTkVXPC5IcNrDCXZ6OoTAWu7M= github.com/evanphx/json-patch v4.5.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= @@ -68,6 +69,7 @@ github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gnostic v0.5.1/go.mod h1:6U4PtQXGIEt/Z3h5MAT7FNofLnw9vXk2cUuW7uA/OeU= @@ -76,6 +78,7 @@ github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmg github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/imdario/mergo v0.3.5 h1:JboBksRwiiAJWvIYJVo46AfV+IAIKZpfrSzVKj42R4Q= github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= @@ -163,6 +166,7 @@ github.com/xlab/treeprint v0.0.0-20181112141820-a009c3971eca h1:1CFlNzQhALwjS9mB github.com/xlab/treeprint v0.0.0-20181112141820-a009c3971eca/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5 h1:+FNtrFTmVw0YZGpBGX56XDee331t6JAXeK2bcyhLOOc= go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5/go.mod h1:nmDLcffg48OtT/PSW0Hg7FvpRQsQh5OSqIylirxKC7o= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= diff --git a/plugin/builtin/annotationstransformer/AnnotationsTransformer.go b/plugin/builtin/annotationstransformer/AnnotationsTransformer.go index 00bc1656f..09b81bd8c 100644 --- a/plugin/builtin/annotationstransformer/AnnotationsTransformer.go +++ b/plugin/builtin/annotationstransformer/AnnotationsTransformer.go @@ -31,14 +31,8 @@ func (p *plugin) Transform(m resmap.ResMap) error { if len(p.Annotations) == 0 { return nil } - for _, r := range m.Resources() { - err := r.ApplyFilter(annotations.Filter{ - Annotations: p.Annotations, - FsSlice: p.FieldSpecs, - }) - if err != nil { - return err - } - } - return nil + return m.ApplyFilter(annotations.Filter{ + Annotations: p.Annotations, + FsSlice: p.FieldSpecs, + }) } diff --git a/plugin/builtin/imagetagtransformer/ImageTagTransformer.go b/plugin/builtin/imagetagtransformer/ImageTagTransformer.go index db0d06496..c93e70cf1 100644 --- a/plugin/builtin/imagetagtransformer/ImageTagTransformer.go +++ b/plugin/builtin/imagetagtransformer/ImageTagTransformer.go @@ -29,22 +29,13 @@ func (p *plugin) Config( } func (p *plugin) Transform(m resmap.ResMap) error { - for _, r := range m.Resources() { - // traverse all fields at first - err := r.ApplyFilter(imagetag.LegacyFilter{ - ImageTag: p.ImageTag, - }) - if err != nil { - return err - } - // then use user specified field specs - err = r.ApplyFilter(imagetag.Filter{ - ImageTag: p.ImageTag, - FsSlice: p.FieldSpecs, - }) - if err != nil { - return err - } + if err := m.ApplyFilter(imagetag.LegacyFilter{ + ImageTag: p.ImageTag, + }); err != nil { + return err } - return nil + return m.ApplyFilter(imagetag.Filter{ + ImageTag: p.ImageTag, + FsSlice: p.FieldSpecs, + }) } diff --git a/plugin/builtin/labeltransformer/LabelTransformer.go b/plugin/builtin/labeltransformer/LabelTransformer.go index f362dd638..513da6881 100644 --- a/plugin/builtin/labeltransformer/LabelTransformer.go +++ b/plugin/builtin/labeltransformer/LabelTransformer.go @@ -31,14 +31,8 @@ func (p *plugin) Transform(m resmap.ResMap) error { if len(p.Labels) == 0 { return nil } - for _, r := range m.Resources() { - err := r.ApplyFilter(labels.Filter{ - Labels: p.Labels, - FsSlice: p.FieldSpecs, - }) - if err != nil { - return err - } - } - return nil + return m.ApplyFilter(labels.Filter{ + Labels: p.Labels, + FsSlice: p.FieldSpecs, + }) } diff --git a/plugin/builtin/prefixsuffixtransformer/PrefixSuffixTransformer.go b/plugin/builtin/prefixsuffixtransformer/PrefixSuffixTransformer.go index d566b3a58..40ed1b840 100644 --- a/plugin/builtin/prefixsuffixtransformer/PrefixSuffixTransformer.go +++ b/plugin/builtin/prefixsuffixtransformer/PrefixSuffixTransformer.go @@ -77,12 +77,11 @@ func (p *plugin) Transform(m resmap.ResMap) error { r.StorePreviousId() } } - err := r.ApplyFilter(prefixsuffix.Filter{ + if err := r.ApplyFilter(prefixsuffix.Filter{ Prefix: p.Prefix, Suffix: p.Suffix, FieldSpec: fs, - }) - if err != nil { + }); err != nil { return err } } diff --git a/plugin/builtin/replacementtransformer/ReplacementTransformer.go b/plugin/builtin/replacementtransformer/ReplacementTransformer.go index 0b9fd993c..595ef6bc2 100644 --- a/plugin/builtin/replacementtransformer/ReplacementTransformer.go +++ b/plugin/builtin/replacementtransformer/ReplacementTransformer.go @@ -10,7 +10,6 @@ import ( "sigs.k8s.io/kustomize/api/filters/replacement" "sigs.k8s.io/kustomize/api/resmap" "sigs.k8s.io/kustomize/api/types" - kyaml "sigs.k8s.io/kustomize/kyaml/yaml" "sigs.k8s.io/yaml" ) @@ -54,12 +53,7 @@ func (p *plugin) Config( } func (p *plugin) Transform(m resmap.ResMap) (err error) { - var nodes []*kyaml.RNode - for _, r := range m.Resources() { - nodes = append(nodes, r.Node()) - } - _, err = replacement.Filter{ + return m.ApplyFilter(replacement.Filter{ Replacements: p.Replacements, - }.Filter(nodes) - return err + }) } diff --git a/plugin/builtin/replacementtransformer/go.mod b/plugin/builtin/replacementtransformer/go.mod index f3e9599fb..36ea1f263 100644 --- a/plugin/builtin/replacementtransformer/go.mod +++ b/plugin/builtin/replacementtransformer/go.mod @@ -4,7 +4,6 @@ go 1.16 require ( sigs.k8s.io/kustomize/api v0.8.9 - sigs.k8s.io/kustomize/kyaml v0.10.19 sigs.k8s.io/yaml v1.2.0 )