From 2bfc7cc1b0bf0afb7b87594c8be48b6d17454923 Mon Sep 17 00:00:00 2001 From: Natasha Sarkar Date: Fri, 3 Sep 2021 11:10:53 -0700 Subject: [PATCH] throw error instead of panic when replacements source.fieldPath doesn't exist (#4166) * test for missing source.fieldPath in replacements * throw error instead of panic when replacements source.fieldPath doesn't exist --- api/filters/replacement/replacement.go | 7 +++-- api/filters/replacement/replacement_test.go | 32 +++++++++++++++++++++ 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/api/filters/replacement/replacement.go b/api/filters/replacement/replacement.go index 7988c322b6..0aacd074e6 100644 --- a/api/filters/replacement/replacement.go +++ b/api/filters/replacement/replacement.go @@ -131,10 +131,11 @@ func getReplacement(nodes []*yaml.RNode, r *types.Replacement) (*yaml.RNode, err if err != nil { return nil, err } - if !rn.IsNilOrEmpty() { - return getRefinedValue(r.Source.Options, rn) + if rn.IsNilOrEmpty() { + return nil, fmt.Errorf("fieldPath `%s` is missing for replacement source %s", r.Source.FieldPath, r.Source) } - return rn, nil + + return getRefinedValue(r.Source.Options, rn) } func getRefinedValue(options *types.FieldOptions, rn *yaml.RNode) (*yaml.RNode, error) { diff --git a/api/filters/replacement/replacement_test.go b/api/filters/replacement/replacement_test.go index 4ac654181a..9380865e20 100644 --- a/api/filters/replacement/replacement_test.go +++ b/api/filters/replacement/replacement_test.go @@ -1556,6 +1556,38 @@ spec: name: postgresdb `, }, + + "replacement source.fieldPath does not exist": { + input: `apiVersion: v1 +kind: ConfigMap +metadata: + name: ports-from +data: + grpcPort: 8080 +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: ports-to +data: + grpcPort: 8081 +`, + replacements: `replacements: +- source: + kind: ConfigMap + name: ports-from + fieldPath: data.httpPort + targets: + - select: + kind: ConfigMap + name: ports-to + fieldPaths: + - data.grpcPort + options: + create: true +`, + expectedErr: "fieldPath `data.httpPort` is missing for replacement source ~G_~V_ConfigMap|~X|ports-from:data.httpPort", + }, } for tn, tc := range testCases {