From 1218a0c229a873645853dfb1aea6479df3b60d96 Mon Sep 17 00:00:00 2001 From: Marcin Trojanowski Date: Mon, 21 Aug 2023 17:20:15 +0200 Subject: [PATCH] regex support flag in replacement transformer Signed-off-by: Marcin Trojanowski --- api/filters/replacement/replacement.go | 2 +- api/filters/replacement/replacement_test.go | 84 +++++++++++++++++++++ api/types/replacement.go | 3 + 3 files changed, 88 insertions(+), 1 deletion(-) diff --git a/api/filters/replacement/replacement.go b/api/filters/replacement/replacement.go index bea5690c404..06c82b13734 100644 --- a/api/filters/replacement/replacement.go +++ b/api/filters/replacement/replacement.go @@ -198,7 +198,7 @@ func copyValueToTarget(target *yaml.RNode, value *yaml.RNode, selector *types.Ta if err != nil { return errors.WrapPrefixf(err, fieldRetrievalError(fp, createKind != 0)) } - if len(targetFields) == 0 { + if len(targetFields) == 0 && !selector.Options.RegexFindMode { return errors.Errorf(fieldRetrievalError(fp, createKind != 0)) } diff --git a/api/filters/replacement/replacement_test.go b/api/filters/replacement/replacement_test.go index 7619e5fc9d3..3d220fd98fb 100644 --- a/api/filters/replacement/replacement_test.go +++ b/api/filters/replacement/replacement_test.go @@ -19,6 +19,90 @@ func TestFilter(t *testing.T) { expected string expectedErr string }{ + "regexsimpleempty": { + input: `apiVersion: v1 +kind: Deployment +metadata: + name: deploy +spec: + template: + spec: + containers: + - image: nginx:1.7.9 + name: nginx-tagged + - image: postgres:1.8.0 + name: postgresdb +`, + replacements: `replacements: +- source: + kind: Deployment + name: deploy + fieldPath: spec.template.spec.containers.0.image + targets: + - select: + kind: Deployment + name: deploy + options: + regexfindmode: true + fieldPaths: + - spec.template.spec.containers.[name=myservice-*].image +`, + expected: `apiVersion: v1 +kind: Deployment +metadata: + name: deploy +spec: + template: + spec: + containers: + - image: nginx:1.7.9 + name: nginx-tagged + - image: postgres:1.8.0 + name: postgresdb +`, + }, + "regexsimple": { + input: `apiVersion: v1 +kind: Deployment +metadata: + name: deploy +spec: + template: + spec: + containers: + - image: nginx:1.7.9 + name: nginx-tagged + - image: postgres:1.8.0 + name: myservice-postgresdb +`, + replacements: `replacements: +- source: + kind: Deployment + name: deploy + fieldPath: spec.template.spec.containers.0.image + targets: + - select: + kind: Deployment + name: deploy + options: + regexfindmode: true + fieldPaths: + - spec.template.spec.containers.[name=myservice-*].image +`, + expected: `apiVersion: v1 +kind: Deployment +metadata: + name: deploy +spec: + template: + spec: + containers: + - image: nginx:1.7.9 + name: nginx-tagged + - image: nginx:1.7.9 + name: myservice-postgresdb +`, + }, "simple": { input: `apiVersion: v1 kind: Deployment diff --git a/api/types/replacement.go b/api/types/replacement.go index cb4163429ad..9fcc17cce30 100644 --- a/api/types/replacement.go +++ b/api/types/replacement.go @@ -77,6 +77,9 @@ type FieldOptions struct { // If field missing, add it. Create bool `json:"create,omitempty" yaml:"create,omitempty"` + + // Allows to Find Field values using regex primitives. + RegexFindMode bool `json:"regexfindmode,omitempty" yaml:"regexfindmode,omitempty"` } func (fo *FieldOptions) String() string {