// ClientForGroupVersion returns a client for the specified groupVersion, creates one if none exists. Kind // in the GroupVersionKind may be empty. func (c *clientPoolImpl) ClientForGroupVersionKind(kind unversioned.GroupVersionKind) (*Client, error) { c.lock.Lock() defer c.lock.Unlock() gv := kind.GroupVersion() // do we have a client already configured? if existingClient, found := c.clients[gv]; found { return existingClient, nil } // avoid changing the original config confCopy := *c.config conf := &confCopy // we need to set the api path based on group version, if no group, default to legacy path conf.APIPath = c.apiPathResolverFunc(kind) // we need to make a client conf.GroupVersion = &gv if conf.NegotiatedSerializer == nil { streamingInfo, _ := api.Codecs.StreamingSerializerForMediaType("application/json;stream=watch", nil) conf.NegotiatedSerializer = serializer.NegotiatedSerializerWrapper(runtime.SerializerInfo{Serializer: dynamicCodec{}}, streamingInfo) } dynamicClient, err := NewClient(conf) if err != nil { return nil, err } c.clients[gv] = dynamicClient return dynamicClient, nil }
// ContentConfig returns a rest.ContentConfig for dynamic types. func ContentConfig() rest.ContentConfig { // TODO: it's questionable that this should be using anything other than unstructured schema and JSON codec := dynamicCodec{} streamingInfo, _ := api.Codecs.StreamingSerializerForMediaType("application/json;stream=watch", nil) return rest.ContentConfig{ AcceptContentTypes: runtime.ContentTypeJSON, ContentType: runtime.ContentTypeJSON, NegotiatedSerializer: serializer.NegotiatedSerializerWrapper(runtime.SerializerInfo{Serializer: codec}, streamingInfo), } }
func setDiscoveryDefaults(config *rest.Config) error { config.APIPath = "" config.GroupVersion = nil codec := runtime.NoopEncoder{Decoder: api.Codecs.UniversalDecoder()} config.NegotiatedSerializer = serializer.NegotiatedSerializerWrapper( runtime.SerializerInfo{Serializer: codec}, runtime.StreamSerializerInfo{}, ) if len(config.UserAgent) == 0 { config.UserAgent = rest.DefaultKubernetesUserAgent() } return nil }