mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-07-19 18:48:32 +00:00
Merge pull request #4485 from roopeshvs/master
Support for multiple replacements in a single file when replacing using path
This commit is contained in:
@@ -5,6 +5,7 @@ package builtins
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"reflect"
|
||||||
|
|
||||||
"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"
|
||||||
@@ -35,11 +36,29 @@ func (p *ReplacementTransformerPlugin) Config(
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
repl := types.Replacement{}
|
// find if the path contains a a list of replacements or a single replacement
|
||||||
if err := yaml.Unmarshal(content, &repl); err != nil {
|
var replacement interface{}
|
||||||
|
err = yaml.Unmarshal(content, &replacement)
|
||||||
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
p.Replacements = append(p.Replacements, repl)
|
items := reflect.ValueOf(replacement)
|
||||||
|
switch items.Kind() {
|
||||||
|
case reflect.Slice:
|
||||||
|
repl := []types.Replacement{}
|
||||||
|
if err := yaml.Unmarshal(content, &repl); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
p.Replacements = append(p.Replacements, repl...)
|
||||||
|
case reflect.Map:
|
||||||
|
repl := types.Replacement{}
|
||||||
|
if err := yaml.Unmarshal(content, &repl); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
p.Replacements = append(p.Replacements, repl)
|
||||||
|
default:
|
||||||
|
return fmt.Errorf("unsupported replacement type encountered within replacement path: %v", items.Kind())
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
// replacement information is already loaded
|
// replacement information is already loaded
|
||||||
p.Replacements = append(p.Replacements, r.Replacement)
|
p.Replacements = append(p.Replacements, r.Replacement)
|
||||||
|
|||||||
@@ -110,6 +110,67 @@ spec:
|
|||||||
th.AssertActualEqualsExpected(m, expected)
|
th.AssertActualEqualsExpected(m, expected)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestReplacementsFieldWithPathMultiple(t *testing.T) {
|
||||||
|
th := kusttest_test.MakeEnhancedHarness(t)
|
||||||
|
defer th.Reset()
|
||||||
|
|
||||||
|
th.WriteK(".", `
|
||||||
|
resources:
|
||||||
|
- resource.yaml
|
||||||
|
|
||||||
|
replacements:
|
||||||
|
- path: replacement.yaml
|
||||||
|
`)
|
||||||
|
th.WriteF("replacement.yaml", `
|
||||||
|
- source:
|
||||||
|
kind: Deployment
|
||||||
|
fieldPath: spec.template.spec.containers.0.image
|
||||||
|
targets:
|
||||||
|
- select:
|
||||||
|
kind: Deployment
|
||||||
|
fieldPaths:
|
||||||
|
- spec.template.spec.containers.1.image
|
||||||
|
- source:
|
||||||
|
kind: Deployment
|
||||||
|
fieldPath: spec.template.spec.containers.0.name
|
||||||
|
targets:
|
||||||
|
- select:
|
||||||
|
kind: Deployment
|
||||||
|
fieldPaths:
|
||||||
|
- spec.template.spec.containers.1.name
|
||||||
|
`)
|
||||||
|
th.WriteF("resource.yaml", `
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: deploy
|
||||||
|
spec:
|
||||||
|
template:
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- image: foobar:1
|
||||||
|
name: replaced-with-digest
|
||||||
|
- image: postgres:1.8.0
|
||||||
|
name: postgresdb
|
||||||
|
`)
|
||||||
|
expected := `
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: deploy
|
||||||
|
spec:
|
||||||
|
template:
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- image: foobar:1
|
||||||
|
name: replaced-with-digest
|
||||||
|
- image: foobar:1
|
||||||
|
name: replaced-with-digest
|
||||||
|
`
|
||||||
|
m := th.Run(".", th.MakeDefaultOptions())
|
||||||
|
th.AssertActualEqualsExpected(m, expected)
|
||||||
|
}
|
||||||
|
|
||||||
func TestReplacementTransformerWithDiamondShape(t *testing.T) {
|
func TestReplacementTransformerWithDiamondShape(t *testing.T) {
|
||||||
th := kusttest_test.MakeEnhancedHarness(t)
|
th := kusttest_test.MakeEnhancedHarness(t)
|
||||||
defer th.Reset()
|
defer th.Reset()
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"reflect"
|
||||||
|
|
||||||
"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"
|
||||||
@@ -39,11 +40,29 @@ func (p *plugin) Config(
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
repl := types.Replacement{}
|
// find if the path contains a a list of replacements or a single replacement
|
||||||
if err := yaml.Unmarshal(content, &repl); err != nil {
|
var replacement interface{}
|
||||||
|
err = yaml.Unmarshal(content, &replacement)
|
||||||
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
p.Replacements = append(p.Replacements, repl)
|
items := reflect.ValueOf(replacement)
|
||||||
|
switch items.Kind() {
|
||||||
|
case reflect.Slice:
|
||||||
|
repl := []types.Replacement{}
|
||||||
|
if err := yaml.Unmarshal(content, &repl); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
p.Replacements = append(p.Replacements, repl...)
|
||||||
|
case reflect.Map:
|
||||||
|
repl := types.Replacement{}
|
||||||
|
if err := yaml.Unmarshal(content, &repl); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
p.Replacements = append(p.Replacements, repl)
|
||||||
|
default:
|
||||||
|
return fmt.Errorf("unsupported replacement type encountered within replacement path: %v", items.Kind())
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
// replacement information is already loaded
|
// replacement information is already loaded
|
||||||
p.Replacements = append(p.Replacements, r.Replacement)
|
p.Replacements = append(p.Replacements, r.Replacement)
|
||||||
|
|||||||
@@ -112,6 +112,68 @@ spec:
|
|||||||
`)
|
`)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestReplacementTransformerFromPathMultiple(t *testing.T) {
|
||||||
|
th := kusttest_test.MakeEnhancedHarness(t).
|
||||||
|
PrepBuiltin("ReplacementTransformer")
|
||||||
|
defer th.Reset()
|
||||||
|
|
||||||
|
th.WriteF("replacement.yaml", `
|
||||||
|
- source:
|
||||||
|
kind: Deployment
|
||||||
|
fieldPath: spec.template.spec.containers.0.image
|
||||||
|
targets:
|
||||||
|
- select:
|
||||||
|
kind: Deployment
|
||||||
|
fieldPaths:
|
||||||
|
- spec.template.spec.containers.1.image
|
||||||
|
- source:
|
||||||
|
kind: Deployment
|
||||||
|
fieldPath: spec.template.spec.containers.0.name
|
||||||
|
targets:
|
||||||
|
- select:
|
||||||
|
kind: Deployment
|
||||||
|
fieldPaths:
|
||||||
|
- spec.template.spec.containers.1.name`)
|
||||||
|
|
||||||
|
rm := th.LoadAndRunTransformer(`
|
||||||
|
apiVersion: builtin
|
||||||
|
kind: ReplacementTransformer
|
||||||
|
metadata:
|
||||||
|
name: notImportantHere
|
||||||
|
replacements:
|
||||||
|
- path: replacement.yaml
|
||||||
|
`, `
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: deploy
|
||||||
|
spec:
|
||||||
|
template:
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- image: foobar:1
|
||||||
|
name: replaced-with-digest
|
||||||
|
- image: postgres:1.8.0
|
||||||
|
name: postgresdb
|
||||||
|
|
||||||
|
`)
|
||||||
|
|
||||||
|
th.AssertActualEqualsExpected(rm, `
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: deploy
|
||||||
|
spec:
|
||||||
|
template:
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- image: foobar:1
|
||||||
|
name: replaced-with-digest
|
||||||
|
- image: foobar:1
|
||||||
|
name: replaced-with-digest
|
||||||
|
`)
|
||||||
|
}
|
||||||
|
|
||||||
func TestReplacementTransformerComplexType(t *testing.T) {
|
func TestReplacementTransformerComplexType(t *testing.T) {
|
||||||
th := kusttest_test.MakeEnhancedHarness(t).
|
th := kusttest_test.MakeEnhancedHarness(t).
|
||||||
PrepBuiltin("ReplacementTransformer")
|
PrepBuiltin("ReplacementTransformer")
|
||||||
|
|||||||
Reference in New Issue
Block a user