// 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 }
// interfacesFor returns the default Codec and ResourceVersioner for a given version // string, or an error if the version is not known. func interfacesFor(version schema.GroupVersion) (*meta.VersionInterfaces, error) { switch version { case v1beta1.SchemeGroupVersion: return &meta.VersionInterfaces{ ObjectConvertor: api.Scheme, MetadataAccessor: accessor, }, nil default: g, _ := registered.Group(federation.GroupName) return nil, fmt.Errorf("unsupported storage version: %s (valid: %v)", version, g.GroupVersions) } }
func setConfigDefaults(config *rest.Config) error { // if certificates group is not registered, return an error g, err := registered.Group("certificates.k8s.io") if err != nil { return err } config.APIPath = "/apis" if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() } // TODO: Unconditionally set the config.Version, until we fix the config. //if config.Version == "" { copyGroupVersion := g.GroupVersion config.GroupVersion = ©GroupVersion //} config.NegotiatedSerializer = serializer.DirectCodecFactory{CodecFactory: api.Codecs} return nil }