From 01ab069bd2a74f29a5e02fca3a9d8ff79465a145 Mon Sep 17 00:00:00 2001 From: koba1t Date: Wed, 13 Apr 2022 04:55:21 +0900 Subject: [PATCH] fix error message --- api/filters/replacement/replacement.go | 10 ++++++++++ api/filters/replacement/replacement_test.go | 2 +- kyaml/yaml/fns.go | 4 ++-- kyaml/yaml/fns_test.go | 2 +- 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/api/filters/replacement/replacement.go b/api/filters/replacement/replacement.go index 76cb6089f..e8d177661 100644 --- a/api/filters/replacement/replacement.go +++ b/api/filters/replacement/replacement.go @@ -7,6 +7,8 @@ import ( "fmt" "strings" + "errors" + "sigs.k8s.io/kustomize/api/internal/utils" "sigs.k8s.io/kustomize/api/resource" "sigs.k8s.io/kustomize/api/types" @@ -117,6 +119,14 @@ func applyToNode(node *yaml.RNode, value *yaml.RNode, target *types.TargetSelect var t *yaml.RNode var err error if target.Options != nil && target.Options.Create { + // create option is not supported in a wildcard matching. + // Because, PathMatcher is not supported create option. + // So, if create option is set, we fallback to PathGetter. + for _, f := range fieldPath { + if f == "*" { + return errors.New("cannot support create option in a multi-value target") + } + } t, err = node.Pipe(yaml.LookupCreate(value.YNode().Kind, fieldPath...)) } else { t, err = node.Pipe(&yaml.PathMatcher{Path: fieldPath}) diff --git a/api/filters/replacement/replacement_test.go b/api/filters/replacement/replacement_test.go index 6e4f46b0d..14e3adabe 100644 --- a/api/filters/replacement/replacement_test.go +++ b/api/filters/replacement/replacement_test.go @@ -1671,7 +1671,7 @@ spec: options: create: true `, - expectedErr: "cannot support create option in a multi-value target now", + expectedErr: "cannot support create option in a multi-value target", }, "multiple field paths in target": { input: `apiVersion: v1 diff --git a/kyaml/yaml/fns.go b/kyaml/yaml/fns.go index 7ef1a54ed..e693f88a1 100644 --- a/kyaml/yaml/fns.go +++ b/kyaml/yaml/fns.go @@ -542,8 +542,8 @@ func (l PathGetter) getFilter(part, nextPart string, fieldPath *[]string) (Filte // part is a hyphen return GetElementByIndex(-1), nil case part == "*": - // part is a asterisk - return nil, errors.Errorf("cannot support create option in a multi-value target now") + // PathGetter is not support for wildcard matching + return nil, errors.Errorf("wildcard is not supported in PathGetter") case IsListIndex(part): // part is surrounded by brackets return l.elemFilter(part) diff --git a/kyaml/yaml/fns_test.go b/kyaml/yaml/fns_test.go index 8346b7b88..e217a07b1 100644 --- a/kyaml/yaml/fns_test.go +++ b/kyaml/yaml/fns_test.go @@ -584,7 +584,7 @@ func TestLookup_Fn_create_with_wildcard_error(t *testing.T) { node, err := Parse(s) assert.NoError(t, err) _, err = node.Pipe(LookupCreate(yaml.MappingNode, "a", "b", "*", "t")) - assert.Error(t, err, "cannot support create option in a multi-value target now") + assert.Error(t, err, "wildcard is not supported in PathGetter") } func TestLookup(t *testing.T) {