diff --git a/api/krusty/blankvalues_test.go b/api/krusty/blankvalues_test.go new file mode 100644 index 000000000..dfba4f365 --- /dev/null +++ b/api/krusty/blankvalues_test.go @@ -0,0 +1,49 @@ +package krusty_test + +import ( + "strings" + "testing" + + kusttest_test "sigs.k8s.io/kustomize/api/testutils/kusttest" +) + +// test for https://github.com/kubernetes-sigs/kustomize/issues/4240 +func TestBlankNamespace4240(t *testing.T) { + th := kusttest_test.MakeHarness(t) + th.WriteK(".", ` +resources: +- resource.yaml +`) + + th.WriteF("resource.yaml", ` +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: test +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: test +rules: [] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: test +subjects: +- kind: ServiceAccount + name: test + namespace: +roleRef: + kind: Role + name: test + apiGroup: rbac.authorization.k8s.io +`) + + err := th.RunWithErr(".", th.MakeDefaultOptions()) + if !strings.Contains(err.Error(), "Invalid Input: namespace is blank for resource") { + t.Fatalf("unexpected error: %q", err) + } +} diff --git a/api/resmap/reswrangler.go b/api/resmap/reswrangler.go index 93d82e64d..8b8d7834b 100644 --- a/api/resmap/reswrangler.go +++ b/api/resmap/reswrangler.go @@ -442,7 +442,7 @@ func getNamespacesForRoleBinding(r *resource.Resource) (map[string]bool, error) if n, ok3 := ns.(string); ok3 { result[n] = true } else { - return nil, errors.New("Invalid Input: namespace is blank") + return nil, errors.New(fmt.Sprintf("Invalid Input: namespace is blank for resource %q\n", r.CurId())) } } }