From 58216d1d3345d57e52cab9a914aec445c94436f4 Mon Sep 17 00:00:00 2001 From: Donny Xia Date: Mon, 8 Feb 2021 13:11:24 -0800 Subject: [PATCH] fix forward slash in value add path --- api/filters/valueadd/valueadd.go | 12 +++++++++++- api/filters/valueadd/valueadd_test.go | 14 ++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/api/filters/valueadd/valueadd.go b/api/filters/valueadd/valueadd.go index 1aa724c2f..326466a45 100644 --- a/api/filters/valueadd/valueadd.go +++ b/api/filters/valueadd/valueadd.go @@ -98,7 +98,17 @@ var _ kio.Filter = Filter{} func (f Filter) Filter(nodes []*yaml.RNode) ([]*yaml.RNode, error) { _, err := kio.FilterAll(yaml.FilterFunc( func(node *yaml.RNode) (*yaml.RNode, error) { - fields := strings.Split(f.FieldPath, "/") + var fields []string + // if there is forward slash '/' in the field name, a back slash '\' + // will be used to escape it. + for _, f := range strings.Split(f.FieldPath, "/") { + if len(fields) > 0 && strings.HasSuffix(fields[len(fields)-1], "\\") { + concatField := strings.TrimSuffix(fields[len(fields)-1], "\\") + "/" + f + fields = append(fields[:len(fields)-1], concatField) + } else { + fields = append(fields, f) + } + } // TODO: support SequenceNode. // Presumably here one could look for array indices (digits) at // the end of the field path (as described in IETF RFC 6902 JSON), diff --git a/api/filters/valueadd/valueadd_test.go b/api/filters/valueadd/valueadd_test.go index 66edbd249..8c66a72a9 100644 --- a/api/filters/valueadd/valueadd_test.go +++ b/api/filters/valueadd/valueadd_test.go @@ -94,6 +94,20 @@ spec: FilePathPosition: 2, }, }, + "backSlash": { + input: ` +kind: SomeKind +`, + expectedOutput: ` +kind: SomeKind +spec: + resourceRef/external: valueAdded +`, + filter: Filter{ + Value: "valueAdded", + FieldPath: "spec/resourceRef\\/external", + }, + }, } for tn, tc := range testCases {