// checkNamespace makes sure that the scope of gvk matches ns. It // returns an error if namespace is empty but gvk is a namespaced // kind, or if ns is non-empty and gvk is a namespaced kind. func checkNamespace(gvk schema.GroupVersionKind, ns string) error { group, err := registered.Group(gvk.Group) if err != nil { return err } mapping, err := group.RESTMapper.RESTMapping(gvk.GroupKind(), gvk.Version) if err != nil { return err } switch mapping.Scope.Name() { case meta.RESTScopeNameRoot: if ns != "" { return fmt.Errorf("namespace specified for a non-namespaced kind %s", gvk) } case meta.RESTScopeNameNamespace: if ns == "" { // Skipping this check for Events, since // controllers emit events that have no namespace, // even though Event is a namespaced resource. if gvk.Kind != "Event" { return fmt.Errorf("no namespace specified for a namespaced kind %s", gvk) } } } return nil }