diff --git a/api/krusty/namereference_test.go b/api/krusty/namereference_test.go new file mode 100644 index 000000000..b3a715d60 --- /dev/null +++ b/api/krusty/namereference_test.go @@ -0,0 +1,44 @@ +package krusty_test + +import ( + "testing" + + kusttest_test "sigs.k8s.io/kustomize/api/testutils/kusttest" +) + +func TestEmptyFieldSpecValue(t *testing.T) { + th := kusttest_test.MakeHarness(t) + th.WriteK("/app", ` +generators: +- generators.yaml +configurations: +- kustomizeconfig.yaml +`) + th.WriteF("/app/generators.yaml", ` +apiVersion: builtin +kind: ConfigMapGenerator +metadata: + name: secret-example +labels: + app.kubernetes.io/name: secret-example +literals: +- this_is_a_secret_name= +`) + th.WriteF("/app/kustomizeconfig.yaml", ` +nameReference: +- kind: Secret + version: v1 + fieldSpecs: + - path: data/this_is_a_secret_name + kind: ConfigMap +`) + m := th.Run("/app", th.MakeDefaultOptions()) + th.AssertActualEqualsExpected(m, ` +apiVersion: v1 +data: + this_is_a_secret_name: "" +kind: ConfigMap +metadata: + name: secret-example-7hf4fh868h +`) +} diff --git a/kyaml/yaml/fns.go b/kyaml/yaml/fns.go index a889bae29..2edc5179e 100644 --- a/kyaml/yaml/fns.go +++ b/kyaml/yaml/fns.go @@ -468,6 +468,9 @@ func (s FieldSetter) Filter(rn *RNode) (*RNode, error) { if err := ErrorIfInvalid(rn, yaml.ScalarNode); err != nil { return rn, err } + if IsMissingOrNull(s.Value) { + return rn, nil + } // only apply the style if there is not an existing style // or we want to override it if !s.OverrideStyle || s.Value.YNode().Style == 0 { diff --git a/kyaml/yaml/fns_test.go b/kyaml/yaml/fns_test.go index e9590aa3f..0162aec0e 100644 --- a/kyaml/yaml/fns_test.go +++ b/kyaml/yaml/fns_test.go @@ -395,6 +395,19 @@ bar: buz assert.Equal(t, `baz `, assertNoErrorString(t)(k.String())) + // Empty value + node, err = Parse(` +foo +`) + assert.NoError(t, err) + instance = FieldSetter{} + k, err = instance.Filter(node) + assert.NoError(t, err) + assert.Equal(t, `foo +`, assertNoErrorString(t)(node.String())) + assert.Equal(t, `foo +`, assertNoErrorString(t)(k.String())) + // Encounter error node, err = Parse(` -a