mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-05-17 18:25:26 +00:00
Introduce resmap.ApplyFilter.
This commit is contained in:
@@ -27,16 +27,10 @@ func (p *AnnotationsTransformerPlugin) Transform(m resmap.ResMap) error {
|
|||||||
if len(p.Annotations) == 0 {
|
if len(p.Annotations) == 0 {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
for _, r := range m.Resources() {
|
return m.ApplyFilter(annotations.Filter{
|
||||||
err := r.ApplyFilter(annotations.Filter{
|
Annotations: p.Annotations,
|
||||||
Annotations: p.Annotations,
|
FsSlice: p.FieldSpecs,
|
||||||
FsSlice: p.FieldSpecs,
|
})
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewAnnotationsTransformerPlugin() resmap.TransformerPlugin {
|
func NewAnnotationsTransformerPlugin() resmap.TransformerPlugin {
|
||||||
|
|||||||
@@ -25,24 +25,15 @@ func (p *ImageTagTransformerPlugin) Config(
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (p *ImageTagTransformerPlugin) Transform(m resmap.ResMap) error {
|
func (p *ImageTagTransformerPlugin) Transform(m resmap.ResMap) error {
|
||||||
for _, r := range m.Resources() {
|
if err := m.ApplyFilter(imagetag.LegacyFilter{
|
||||||
// traverse all fields at first
|
ImageTag: p.ImageTag,
|
||||||
err := r.ApplyFilter(imagetag.LegacyFilter{
|
}); err != nil {
|
||||||
ImageTag: p.ImageTag,
|
return err
|
||||||
})
|
|
||||||
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
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return nil
|
return m.ApplyFilter(imagetag.Filter{
|
||||||
|
ImageTag: p.ImageTag,
|
||||||
|
FsSlice: p.FieldSpecs,
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewImageTagTransformerPlugin() resmap.TransformerPlugin {
|
func NewImageTagTransformerPlugin() resmap.TransformerPlugin {
|
||||||
|
|||||||
@@ -27,16 +27,10 @@ func (p *LabelTransformerPlugin) Transform(m resmap.ResMap) error {
|
|||||||
if len(p.Labels) == 0 {
|
if len(p.Labels) == 0 {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
for _, r := range m.Resources() {
|
return m.ApplyFilter(labels.Filter{
|
||||||
err := r.ApplyFilter(labels.Filter{
|
Labels: p.Labels,
|
||||||
Labels: p.Labels,
|
FsSlice: p.FieldSpecs,
|
||||||
FsSlice: p.FieldSpecs,
|
})
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewLabelTransformerPlugin() resmap.TransformerPlugin {
|
func NewLabelTransformerPlugin() resmap.TransformerPlugin {
|
||||||
|
|||||||
@@ -73,12 +73,11 @@ func (p *PrefixSuffixTransformerPlugin) Transform(m resmap.ResMap) error {
|
|||||||
r.StorePreviousId()
|
r.StorePreviousId()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
err := r.ApplyFilter(prefixsuffix.Filter{
|
if err := r.ApplyFilter(prefixsuffix.Filter{
|
||||||
Prefix: p.Prefix,
|
Prefix: p.Prefix,
|
||||||
Suffix: p.Suffix,
|
Suffix: p.Suffix,
|
||||||
FieldSpec: fs,
|
FieldSpec: fs,
|
||||||
})
|
}); err != nil {
|
||||||
if err != nil {
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ import (
|
|||||||
"sigs.k8s.io/kustomize/api/filters/replacement"
|
"sigs.k8s.io/kustomize/api/filters/replacement"
|
||||||
"sigs.k8s.io/kustomize/api/resmap"
|
"sigs.k8s.io/kustomize/api/resmap"
|
||||||
"sigs.k8s.io/kustomize/api/types"
|
"sigs.k8s.io/kustomize/api/types"
|
||||||
kyaml "sigs.k8s.io/kustomize/kyaml/yaml"
|
|
||||||
"sigs.k8s.io/yaml"
|
"sigs.k8s.io/yaml"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -50,14 +49,9 @@ func (p *ReplacementTransformerPlugin) Config(
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (p *ReplacementTransformerPlugin) Transform(m resmap.ResMap) (err error) {
|
func (p *ReplacementTransformerPlugin) Transform(m resmap.ResMap) (err error) {
|
||||||
var nodes []*kyaml.RNode
|
return m.ApplyFilter(replacement.Filter{
|
||||||
for _, r := range m.Resources() {
|
|
||||||
nodes = append(nodes, r.Node())
|
|
||||||
}
|
|
||||||
_, err = replacement.Filter{
|
|
||||||
Replacements: p.Replacements,
|
Replacements: p.Replacements,
|
||||||
}.Filter(nodes)
|
})
|
||||||
return err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewReplacementTransformerPlugin() resmap.TransformerPlugin {
|
func NewReplacementTransformerPlugin() resmap.TransformerPlugin {
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import (
|
|||||||
"sigs.k8s.io/kustomize/api/ifc"
|
"sigs.k8s.io/kustomize/api/ifc"
|
||||||
"sigs.k8s.io/kustomize/api/resource"
|
"sigs.k8s.io/kustomize/api/resource"
|
||||||
"sigs.k8s.io/kustomize/api/types"
|
"sigs.k8s.io/kustomize/api/types"
|
||||||
|
"sigs.k8s.io/kustomize/kyaml/kio"
|
||||||
"sigs.k8s.io/kustomize/kyaml/resid"
|
"sigs.k8s.io/kustomize/kyaml/resid"
|
||||||
"sigs.k8s.io/kustomize/kyaml/yaml"
|
"sigs.k8s.io/kustomize/kyaml/yaml"
|
||||||
)
|
)
|
||||||
@@ -173,7 +174,7 @@ type ResMap interface {
|
|||||||
// in the resid.DefaultNamespace entry.
|
// in the resid.DefaultNamespace entry.
|
||||||
GroupedByCurrentNamespace() map[string][]*resource.Resource
|
GroupedByCurrentNamespace() map[string][]*resource.Resource
|
||||||
|
|
||||||
// GroupByOrginalNamespace performs as GroupByNamespace
|
// GroupedByOriginalNamespace performs as GroupByNamespace
|
||||||
// but use the original namespace instead of the current
|
// but use the original namespace instead of the current
|
||||||
// one to perform the grouping.
|
// one to perform the grouping.
|
||||||
GroupedByOriginalNamespace() map[string][]*resource.Resource
|
GroupedByOriginalNamespace() map[string][]*resource.Resource
|
||||||
@@ -253,4 +254,14 @@ type ResMap interface {
|
|||||||
|
|
||||||
// RemoveBuildAnnotations removes annotations created by the build process.
|
// RemoveBuildAnnotations removes annotations created by the build process.
|
||||||
RemoveBuildAnnotations()
|
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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import (
|
|||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"sigs.k8s.io/kustomize/api/resource"
|
"sigs.k8s.io/kustomize/api/resource"
|
||||||
"sigs.k8s.io/kustomize/api/types"
|
"sigs.k8s.io/kustomize/api/types"
|
||||||
|
"sigs.k8s.io/kustomize/kyaml/kio"
|
||||||
"sigs.k8s.io/kustomize/kyaml/resid"
|
"sigs.k8s.io/kustomize/kyaml/resid"
|
||||||
kyaml "sigs.k8s.io/kustomize/kyaml/yaml"
|
kyaml "sigs.k8s.io/kustomize/kyaml/yaml"
|
||||||
)
|
)
|
||||||
@@ -423,6 +424,7 @@ func getNamespacesForRoleBinding(r *resource.Resource) map[string]bool {
|
|||||||
if r.GetKind() != "RoleBinding" {
|
if r.GetKind() != "RoleBinding" {
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
//nolint staticcheck
|
||||||
subjects, err := r.GetSlice("subjects")
|
subjects, err := r.GetSlice("subjects")
|
||||||
if err != nil || subjects == nil {
|
if err != nil || subjects == nil {
|
||||||
return result
|
return result
|
||||||
@@ -617,3 +619,41 @@ func (m *resWrangler) RemoveBuildAnnotations() {
|
|||||||
r.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
|
||||||
|
}
|
||||||
|
|||||||
@@ -11,12 +11,16 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
|
"sigs.k8s.io/kustomize/api/filters/labels"
|
||||||
"sigs.k8s.io/kustomize/api/provider"
|
"sigs.k8s.io/kustomize/api/provider"
|
||||||
. "sigs.k8s.io/kustomize/api/resmap"
|
. "sigs.k8s.io/kustomize/api/resmap"
|
||||||
"sigs.k8s.io/kustomize/api/resource"
|
"sigs.k8s.io/kustomize/api/resource"
|
||||||
|
kusttest_test "sigs.k8s.io/kustomize/api/testutils/kusttest"
|
||||||
resmaptest_test "sigs.k8s.io/kustomize/api/testutils/resmaptest"
|
resmaptest_test "sigs.k8s.io/kustomize/api/testutils/resmaptest"
|
||||||
"sigs.k8s.io/kustomize/api/types"
|
"sigs.k8s.io/kustomize/api/types"
|
||||||
|
"sigs.k8s.io/kustomize/kyaml/kio"
|
||||||
"sigs.k8s.io/kustomize/kyaml/resid"
|
"sigs.k8s.io/kustomize/kyaml/resid"
|
||||||
|
"sigs.k8s.io/kustomize/kyaml/yaml"
|
||||||
)
|
)
|
||||||
|
|
||||||
var depProvider = provider.NewDefaultDepProvider()
|
var depProvider = provider.NewDefaultDepProvider()
|
||||||
@@ -1144,6 +1148,186 @@ func addNamespace(namespace string, base string) string {
|
|||||||
return res
|
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) {
|
func TestApplySmPatch_Deletion(t *testing.T) {
|
||||||
target := `
|
target := `
|
||||||
apiVersion: apps/v1
|
apiVersion: apps/v1
|
||||||
|
|||||||
@@ -54,6 +54,10 @@ var buildAnnotations = []string{
|
|||||||
buildAnnotationAllowKindChange,
|
buildAnnotationAllowKindChange,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func NewResource(rn *kyaml.RNode) *Resource {
|
||||||
|
return &Resource{node: rn}
|
||||||
|
}
|
||||||
|
|
||||||
func (r *Resource) AsRNode() *kyaml.RNode {
|
func (r *Resource) AsRNode() *kyaml.RNode {
|
||||||
return r.node.Copy()
|
return r.node.Copy()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,8 +19,15 @@ func assertActualEqualsExpectedWithTweak(
|
|||||||
ht hasGetT,
|
ht hasGetT,
|
||||||
m resmap.ResMap,
|
m resmap.ResMap,
|
||||||
tweaker func([]byte) []byte, expected string) {
|
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 {
|
if m == nil {
|
||||||
ht.GetT().Fatalf("Map should not be nil.")
|
t.Fatalf("Map should not be nil.")
|
||||||
}
|
}
|
||||||
// Ignore leading linefeed in expected value
|
// Ignore leading linefeed in expected value
|
||||||
// to ease readability of tests.
|
// to ease readability of tests.
|
||||||
@@ -29,13 +36,13 @@ func assertActualEqualsExpectedWithTweak(
|
|||||||
}
|
}
|
||||||
actual, err := m.AsYaml()
|
actual, err := m.AsYaml()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ht.GetT().Fatalf("Unexpected err: %v", err)
|
t.Fatalf("Unexpected err: %v", err)
|
||||||
}
|
}
|
||||||
if tweaker != nil {
|
if tweaker != nil {
|
||||||
actual = tweaker(actual)
|
actual = tweaker(actual)
|
||||||
}
|
}
|
||||||
if string(actual) != expected {
|
if string(actual) != expected {
|
||||||
reportDiffAndFail(ht.GetT(), actual, expected)
|
reportDiffAndFail(t, actual, expected)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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/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/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/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/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/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
||||||
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
|
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 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4=
|
||||||
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
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/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/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/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=
|
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/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/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/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/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 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM=
|
||||||
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
|
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/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=
|
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.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.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/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
|
||||||
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
|
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
|
||||||
|
|||||||
@@ -31,14 +31,8 @@ func (p *plugin) Transform(m resmap.ResMap) error {
|
|||||||
if len(p.Annotations) == 0 {
|
if len(p.Annotations) == 0 {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
for _, r := range m.Resources() {
|
return m.ApplyFilter(annotations.Filter{
|
||||||
err := r.ApplyFilter(annotations.Filter{
|
Annotations: p.Annotations,
|
||||||
Annotations: p.Annotations,
|
FsSlice: p.FieldSpecs,
|
||||||
FsSlice: p.FieldSpecs,
|
})
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,22 +29,13 @@ func (p *plugin) Config(
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (p *plugin) Transform(m resmap.ResMap) error {
|
func (p *plugin) Transform(m resmap.ResMap) error {
|
||||||
for _, r := range m.Resources() {
|
if err := m.ApplyFilter(imagetag.LegacyFilter{
|
||||||
// traverse all fields at first
|
ImageTag: p.ImageTag,
|
||||||
err := r.ApplyFilter(imagetag.LegacyFilter{
|
}); err != nil {
|
||||||
ImageTag: p.ImageTag,
|
return err
|
||||||
})
|
|
||||||
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
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return nil
|
return m.ApplyFilter(imagetag.Filter{
|
||||||
|
ImageTag: p.ImageTag,
|
||||||
|
FsSlice: p.FieldSpecs,
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,14 +31,8 @@ func (p *plugin) Transform(m resmap.ResMap) error {
|
|||||||
if len(p.Labels) == 0 {
|
if len(p.Labels) == 0 {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
for _, r := range m.Resources() {
|
return m.ApplyFilter(labels.Filter{
|
||||||
err := r.ApplyFilter(labels.Filter{
|
Labels: p.Labels,
|
||||||
Labels: p.Labels,
|
FsSlice: p.FieldSpecs,
|
||||||
FsSlice: p.FieldSpecs,
|
})
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -77,12 +77,11 @@ func (p *plugin) Transform(m resmap.ResMap) error {
|
|||||||
r.StorePreviousId()
|
r.StorePreviousId()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
err := r.ApplyFilter(prefixsuffix.Filter{
|
if err := r.ApplyFilter(prefixsuffix.Filter{
|
||||||
Prefix: p.Prefix,
|
Prefix: p.Prefix,
|
||||||
Suffix: p.Suffix,
|
Suffix: p.Suffix,
|
||||||
FieldSpec: fs,
|
FieldSpec: fs,
|
||||||
})
|
}); err != nil {
|
||||||
if err != nil {
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ import (
|
|||||||
"sigs.k8s.io/kustomize/api/filters/replacement"
|
"sigs.k8s.io/kustomize/api/filters/replacement"
|
||||||
"sigs.k8s.io/kustomize/api/resmap"
|
"sigs.k8s.io/kustomize/api/resmap"
|
||||||
"sigs.k8s.io/kustomize/api/types"
|
"sigs.k8s.io/kustomize/api/types"
|
||||||
kyaml "sigs.k8s.io/kustomize/kyaml/yaml"
|
|
||||||
"sigs.k8s.io/yaml"
|
"sigs.k8s.io/yaml"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -54,12 +53,7 @@ func (p *plugin) Config(
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (p *plugin) Transform(m resmap.ResMap) (err error) {
|
func (p *plugin) Transform(m resmap.ResMap) (err error) {
|
||||||
var nodes []*kyaml.RNode
|
return m.ApplyFilter(replacement.Filter{
|
||||||
for _, r := range m.Resources() {
|
|
||||||
nodes = append(nodes, r.Node())
|
|
||||||
}
|
|
||||||
_, err = replacement.Filter{
|
|
||||||
Replacements: p.Replacements,
|
Replacements: p.Replacements,
|
||||||
}.Filter(nodes)
|
})
|
||||||
return err
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ go 1.16
|
|||||||
|
|
||||||
require (
|
require (
|
||||||
sigs.k8s.io/kustomize/api v0.8.9
|
sigs.k8s.io/kustomize/api v0.8.9
|
||||||
sigs.k8s.io/kustomize/kyaml v0.10.19
|
|
||||||
sigs.k8s.io/yaml v1.2.0
|
sigs.k8s.io/yaml v1.2.0
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user