diff --git a/pkg/document/plugin/replacement/v1alpha1/transformer.go b/pkg/document/plugin/replacement/v1alpha1/transformer.go index e9ac1b9e3..591e26d25 100644 --- a/pkg/document/plugin/replacement/v1alpha1/transformer.go +++ b/pkg/document/plugin/replacement/v1alpha1/transformer.go @@ -169,8 +169,17 @@ func substitute(m resmap.ResMap, to *types.ReplTarget, replacement interface{}) tmp = append(tmp, part) } p = strings.Join(tmp, "[") + // Exclude substring portion from dot replacer + // substring can contain IP or any dot separated string + substringPattern := "" + p, substringPattern = extractSubstringPattern(p) pathSlice := strings.Split(p, ".") + // append back the extracted substring + if len(substringPattern) > 0 { + pathSlice[len(pathSlice)-1] = pathSlice[len(pathSlice)-1] + "%" + + substringPattern + "%" + } for i, part := range pathSlice { pathSlice[i] = strings.ReplaceAll(part, dotReplacer, ".") } diff --git a/pkg/document/plugin/replacement/v1alpha1/transformer_test.go b/pkg/document/plugin/replacement/v1alpha1/transformer_test.go index 6bc5f37b5..894bdd6a3 100644 --- a/pkg/document/plugin/replacement/v1alpha1/transformer_test.go +++ b/pkg/document/plugin/replacement/v1alpha1/transformer_test.go @@ -158,6 +158,49 @@ kind: ReplacementTransformer metadata: name: notImportantHere replacements: +- source: + value: 1.17.0 + target: + objref: + kind: Deployment + fieldrefs: + - spec.template.spec.containers[name=nginx-tagged].image%1.7.9% +`, + + in: ` +group: apps +apiVersion: v1 +kind: Deployment +metadata: + name: deploy1 +spec: + template: + spec: + containers: + - image: nginx:1.7.9 + name: nginx-tagged +`, + expectedOut: `apiVersion: v1 +group: apps +kind: Deployment +metadata: + name: deploy1 +spec: + template: + spec: + containers: + - image: nginx:1.17.0 + name: nginx-tagged +`, + }, + + { + cfg: ` +apiVersion: airshipit.org/v1alpha1 +kind: ReplacementTransformer +metadata: + name: notImportantHere +replacements: - source: objref: kind: Pod