mirror of
https://github.com/k3s-io/kubernetes.git
synced 2026-01-04 23:17:50 +00:00
Use NegotiatedSerializer in client
This commit is contained in:
@@ -39,11 +39,12 @@ import (
|
||||
"k8s.io/kubernetes/pkg/fields"
|
||||
"k8s.io/kubernetes/pkg/labels"
|
||||
"k8s.io/kubernetes/pkg/runtime"
|
||||
"k8s.io/kubernetes/pkg/runtime/serializer/streaming"
|
||||
"k8s.io/kubernetes/pkg/util/flowcontrol"
|
||||
"k8s.io/kubernetes/pkg/util/net"
|
||||
"k8s.io/kubernetes/pkg/util/sets"
|
||||
"k8s.io/kubernetes/pkg/watch"
|
||||
watchjson "k8s.io/kubernetes/pkg/watch/json"
|
||||
"k8s.io/kubernetes/pkg/watch/versioned"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -90,8 +91,9 @@ type Request struct {
|
||||
client HTTPClient
|
||||
verb string
|
||||
|
||||
baseURL *url.URL
|
||||
content ContentConfig
|
||||
baseURL *url.URL
|
||||
content ContentConfig
|
||||
serializers Serializers
|
||||
|
||||
// generic components accessible via method setters
|
||||
pathPrefix string
|
||||
@@ -121,7 +123,7 @@ type Request struct {
|
||||
}
|
||||
|
||||
// NewRequest creates a new request helper object for accessing runtime.Objects on a server.
|
||||
func NewRequest(client HTTPClient, verb string, baseURL *url.URL, versionedAPIPath string, content ContentConfig, backoff BackoffManager, throttle flowcontrol.RateLimiter) *Request {
|
||||
func NewRequest(client HTTPClient, verb string, baseURL *url.URL, versionedAPIPath string, content ContentConfig, serializers Serializers, backoff BackoffManager, throttle flowcontrol.RateLimiter) *Request {
|
||||
if backoff == nil {
|
||||
glog.V(2).Infof("Not implementing request backoff strategy.")
|
||||
backoff = &NoBackoff{}
|
||||
@@ -132,13 +134,14 @@ func NewRequest(client HTTPClient, verb string, baseURL *url.URL, versionedAPIPa
|
||||
pathPrefix = path.Join(pathPrefix, baseURL.Path)
|
||||
}
|
||||
r := &Request{
|
||||
client: client,
|
||||
verb: verb,
|
||||
baseURL: baseURL,
|
||||
pathPrefix: path.Join(pathPrefix, versionedAPIPath),
|
||||
content: content,
|
||||
backoffMgr: backoff,
|
||||
throttle: throttle,
|
||||
client: client,
|
||||
verb: verb,
|
||||
baseURL: baseURL,
|
||||
pathPrefix: path.Join(pathPrefix, versionedAPIPath),
|
||||
content: content,
|
||||
serializers: serializers,
|
||||
backoffMgr: backoff,
|
||||
throttle: throttle,
|
||||
}
|
||||
if len(content.ContentType) > 0 {
|
||||
r.SetHeader("Accept", content.ContentType+", */*")
|
||||
@@ -547,7 +550,7 @@ func (r *Request) Body(obj interface{}) *Request {
|
||||
if reflect.ValueOf(t).IsNil() {
|
||||
return r
|
||||
}
|
||||
data, err := runtime.Encode(r.content.Codec, t)
|
||||
data, err := runtime.Encode(r.serializers.Encoder, t)
|
||||
if err != nil {
|
||||
r.err = err
|
||||
return r
|
||||
@@ -670,7 +673,9 @@ func (r *Request) Watch() (watch.Interface, error) {
|
||||
}
|
||||
return nil, fmt.Errorf("for request '%+v', got status: %v", url, resp.StatusCode)
|
||||
}
|
||||
return watch.NewStreamWatcher(watchjson.NewDecoder(resp.Body, r.content.Codec)), nil
|
||||
framer := r.serializers.Framer.NewFrameReader(resp.Body)
|
||||
decoder := streaming.NewDecoder(framer, r.serializers.StreamingSerializer)
|
||||
return watch.NewStreamWatcher(versioned.NewDecoder(decoder, r.serializers.Decoder)), nil
|
||||
}
|
||||
|
||||
// updateURLMetrics is a convenience function for pushing metrics.
|
||||
@@ -738,7 +743,8 @@ func (r *Request) Stream() (io.ReadCloser, error) {
|
||||
return nil, fmt.Errorf("%v while accessing %v", resp.Status, url)
|
||||
}
|
||||
|
||||
if runtimeObject, err := runtime.Decode(r.content.Codec, bodyBytes); err == nil {
|
||||
// TODO: Check ContentType.
|
||||
if runtimeObject, err := runtime.Decode(r.serializers.Decoder, bodyBytes); err == nil {
|
||||
statusError := errors.FromObject(runtimeObject)
|
||||
|
||||
if _, ok := statusError.(errors.APIStatus); ok {
|
||||
@@ -876,7 +882,7 @@ func (r *Request) transformResponse(resp *http.Response, req *http.Request) Resu
|
||||
// default groupVersion, otherwise a status response won't be correctly
|
||||
// decoded.
|
||||
status := &unversioned.Status{}
|
||||
err := runtime.DecodeInto(r.content.Codec, body, status)
|
||||
err := runtime.DecodeInto(r.serializers.Decoder, body, status)
|
||||
if err == nil && len(status.Status) > 0 {
|
||||
isStatusResponse = true
|
||||
}
|
||||
@@ -898,11 +904,12 @@ func (r *Request) transformResponse(resp *http.Response, req *http.Request) Resu
|
||||
return Result{err: errors.FromObject(status)}
|
||||
}
|
||||
|
||||
// TODO: Check ContentType.
|
||||
return Result{
|
||||
body: body,
|
||||
contentType: resp.Header.Get("Content-Type"),
|
||||
statusCode: resp.StatusCode,
|
||||
decoder: r.content.Codec,
|
||||
decoder: r.serializers.Decoder,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user