Skip to content

Commit

Permalink
implements to replacements value in the structured data
Browse files Browse the repository at this point in the history
  • Loading branch information
koba1t committed Sep 8, 2024
1 parent b7cdd91 commit 4be13cf
Show file tree
Hide file tree
Showing 3 changed files with 85 additions and 2 deletions.
73 changes: 72 additions & 1 deletion api/filters/replacement/replacement_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2779,7 +2779,7 @@ spec:
name: myingress
fieldPaths:
- spec.tls.0.hosts.0
- spec.tls.0.secretName
- spec.tls.0.secretName
options:
create: true
`,
Expand Down Expand Up @@ -2855,3 +2855,74 @@ spec:
})
}
}

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()
}
})
}
}
4 changes: 4 additions & 0 deletions kyaml/yaml/fns.go
Original file line number Diff line number Diff line change
Expand Up @@ -830,6 +830,10 @@ func (e *InvalidNodeKindError) Error() string {
return msg
}

func (e *InvalidNodeKindError) Unwrap() error {
return errors.Errorf("InvalidNodeKindError")
}

func (e *InvalidNodeKindError) ActualNodeKind() Kind {
return e.node.YNode().Kind
}
Expand Down
10 changes: 9 additions & 1 deletion kyaml/yaml/match.go
Original file line number Diff line number Diff line change
Expand Up @@ -137,10 +137,18 @@ func (p *PathMatcher) visitEveryElem(elem *RNode) error {
func (p *PathMatcher) doField(rn *RNode) (*RNode, error) {
// lookup the field
field, err := rn.Pipe(Get(p.Path[0]))
if err != nil || (!IsCreate(p.Create) && field == nil) {
if err != nil {
invalidKindErr := &InvalidNodeKindError{}
if errors.As(err, &invalidKindErr) {
fmt.Print("-----------------------------\nOUTPUT: ", err)
}
return nil, err
}

if !IsCreate(p.Create) && field == nil {
return nil, nil
}

if IsCreate(p.Create) && field == nil {
var nextPart string
if len(p.Path) > 1 {
Expand Down

0 comments on commit 4be13cf

Please sign in to comment.