mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-05-17 18:25:26 +00:00
implements to replacements value in the structured data
This commit is contained in:
@@ -2779,7 +2779,7 @@ spec:
|
|||||||
name: myingress
|
name: myingress
|
||||||
fieldPaths:
|
fieldPaths:
|
||||||
- spec.tls.0.hosts.0
|
- spec.tls.0.hosts.0
|
||||||
- spec.tls.0.secretName
|
- spec.tls.0.secretName
|
||||||
options:
|
options:
|
||||||
create: true
|
create: true
|
||||||
`,
|
`,
|
||||||
@@ -4498,3 +4498,74 @@ metadata:
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestValueInlineStructuredData(t *testing.T) {
|
||||||
|
testCases := map[string]struct {
|
||||||
|
input string
|
||||||
|
replacements string
|
||||||
|
expected string
|
||||||
|
expectedErr string
|
||||||
|
}{
|
||||||
|
"replacement contain jsonfield": {
|
||||||
|
input: `apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: target-configmap
|
||||||
|
data:
|
||||||
|
config.json: |-
|
||||||
|
{
|
||||||
|
"config": {
|
||||||
|
"id": "42",
|
||||||
|
"hostname": "REPLACE_TARGET_HOSTNAME"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
replacements: `replacements:
|
||||||
|
- source:
|
||||||
|
kind: ConfigMap
|
||||||
|
name: target-configmap
|
||||||
|
fieldPath: metadata.name
|
||||||
|
targets:
|
||||||
|
- select:
|
||||||
|
kind: ConfigMap
|
||||||
|
fieldPaths:
|
||||||
|
- data.config\.json.config.hostname
|
||||||
|
`,
|
||||||
|
expected: `apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: target-configmap
|
||||||
|
data:
|
||||||
|
config.json: |-
|
||||||
|
{
|
||||||
|
"config": {
|
||||||
|
"id": "42",
|
||||||
|
"hostname": "target-configmap"
|
||||||
|
}
|
||||||
|
}`,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for tn, tc := range testCases {
|
||||||
|
t.Run(tn, func(t *testing.T) {
|
||||||
|
f := Filter{}
|
||||||
|
err := yaml.Unmarshal([]byte(tc.replacements), &f)
|
||||||
|
if !assert.NoError(t, err) {
|
||||||
|
t.FailNow()
|
||||||
|
}
|
||||||
|
actual, err := filtertest.RunFilterE(t, tc.input, f)
|
||||||
|
if err != nil {
|
||||||
|
if tc.expectedErr == "" {
|
||||||
|
t.Errorf("unexpected error: %s\n", err.Error())
|
||||||
|
t.FailNow()
|
||||||
|
}
|
||||||
|
if !assert.Contains(t, err.Error(), tc.expectedErr) {
|
||||||
|
t.FailNow()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if !assert.Equal(t, strings.TrimSpace(tc.expected), strings.TrimSpace(actual)) {
|
||||||
|
t.FailNow()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -830,6 +830,10 @@ func (e *InvalidNodeKindError) Error() string {
|
|||||||
return msg
|
return msg
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (e *InvalidNodeKindError) Unwrap() error {
|
||||||
|
return errors.Errorf("InvalidNodeKindError")
|
||||||
|
}
|
||||||
|
|
||||||
func (e *InvalidNodeKindError) ActualNodeKind() Kind {
|
func (e *InvalidNodeKindError) ActualNodeKind() Kind {
|
||||||
return e.node.YNode().Kind
|
return e.node.YNode().Kind
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -137,10 +137,20 @@ func (p *PathMatcher) visitEveryElem(elem *RNode) error {
|
|||||||
func (p *PathMatcher) doField(rn *RNode) (*RNode, error) {
|
func (p *PathMatcher) doField(rn *RNode) (*RNode, error) {
|
||||||
// lookup the field
|
// lookup the field
|
||||||
field, err := rn.Pipe(Get(p.Path[0]))
|
field, err := rn.Pipe(Get(p.Path[0]))
|
||||||
if err != nil || (!IsCreate(p.Create) && field == nil) {
|
if err != nil {
|
||||||
|
// check error is an invalid kind error
|
||||||
|
invalidKindErr := &InvalidNodeKindError{}
|
||||||
|
if errors.As(err, &invalidKindErr) {
|
||||||
|
// if the field is valid json or yaml, continue to lookup the next part of the path
|
||||||
|
fmt.Print("-----------------------------\nOUTPUT: ", err)
|
||||||
|
}
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if !IsCreate(p.Create) && field == nil {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
if IsCreate(p.Create) && field == nil {
|
if IsCreate(p.Create) && field == nil {
|
||||||
var nextPart string
|
var nextPart string
|
||||||
if len(p.Path) > 1 {
|
if len(p.Path) > 1 {
|
||||||
|
|||||||
Reference in New Issue
Block a user