mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-04 04:08:16 +00:00 
			
		
		
		
	Merge pull request #39350 from sttts/sttts-pkg-apiserver-move
Automatic merge from submit-queue (batch tested with PRs 39075, 39350, 39353) Move pkg/apiserver to pkg/genericapiserver/api
This commit is contained in:
		@@ -30,8 +30,6 @@ go_library(
 | 
				
			|||||||
        "//pkg/api/errors:go_default_library",
 | 
					        "//pkg/api/errors:go_default_library",
 | 
				
			||||||
        "//pkg/api/rest:go_default_library",
 | 
					        "//pkg/api/rest:go_default_library",
 | 
				
			||||||
        "//pkg/apis/meta/v1:go_default_library",
 | 
					        "//pkg/apis/meta/v1:go_default_library",
 | 
				
			||||||
        "//pkg/apiserver/filters:go_default_library",
 | 
					 | 
				
			||||||
        "//pkg/apiserver/handlers/responsewriters:go_default_library",
 | 
					 | 
				
			||||||
        "//pkg/auth/handlers:go_default_library",
 | 
					        "//pkg/auth/handlers:go_default_library",
 | 
				
			||||||
        "//pkg/client/cache:go_default_library",
 | 
					        "//pkg/client/cache:go_default_library",
 | 
				
			||||||
        "//pkg/client/clientset_generated/clientset:go_default_library",
 | 
					        "//pkg/client/clientset_generated/clientset:go_default_library",
 | 
				
			||||||
@@ -41,6 +39,8 @@ go_library(
 | 
				
			|||||||
        "//pkg/client/transport:go_default_library",
 | 
					        "//pkg/client/transport:go_default_library",
 | 
				
			||||||
        "//pkg/controller:go_default_library",
 | 
					        "//pkg/controller:go_default_library",
 | 
				
			||||||
        "//pkg/genericapiserver:go_default_library",
 | 
					        "//pkg/genericapiserver:go_default_library",
 | 
				
			||||||
 | 
					        "//pkg/genericapiserver/api/filters:go_default_library",
 | 
				
			||||||
 | 
					        "//pkg/genericapiserver/api/handlers/responsewriters:go_default_library",
 | 
				
			||||||
        "//pkg/genericapiserver/filters:go_default_library",
 | 
					        "//pkg/genericapiserver/filters:go_default_library",
 | 
				
			||||||
        "//pkg/labels:go_default_library",
 | 
					        "//pkg/labels:go_default_library",
 | 
				
			||||||
        "//pkg/registry/generic:go_default_library",
 | 
					        "//pkg/registry/generic:go_default_library",
 | 
				
			||||||
@@ -69,10 +69,10 @@ go_test(
 | 
				
			|||||||
        "//pkg/api:go_default_library",
 | 
					        "//pkg/api:go_default_library",
 | 
				
			||||||
        "//pkg/api/v1:go_default_library",
 | 
					        "//pkg/api/v1:go_default_library",
 | 
				
			||||||
        "//pkg/apis/meta/v1:go_default_library",
 | 
					        "//pkg/apis/meta/v1:go_default_library",
 | 
				
			||||||
        "//pkg/apiserver/request:go_default_library",
 | 
					 | 
				
			||||||
        "//pkg/auth/user:go_default_library",
 | 
					        "//pkg/auth/user:go_default_library",
 | 
				
			||||||
        "//pkg/client/cache:go_default_library",
 | 
					        "//pkg/client/cache:go_default_library",
 | 
				
			||||||
        "//pkg/client/listers/core/v1:go_default_library",
 | 
					        "//pkg/client/listers/core/v1:go_default_library",
 | 
				
			||||||
 | 
					        "//pkg/genericapiserver/api/request:go_default_library",
 | 
				
			||||||
        "//pkg/runtime:go_default_library",
 | 
					        "//pkg/runtime:go_default_library",
 | 
				
			||||||
        "//pkg/util/diff:go_default_library",
 | 
					        "//pkg/util/diff:go_default_library",
 | 
				
			||||||
        "//pkg/util/sets:go_default_library",
 | 
					        "//pkg/util/sets:go_default_library",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,12 +23,12 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/api"
 | 
						"k8s.io/kubernetes/pkg/api"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/api/rest"
 | 
						"k8s.io/kubernetes/pkg/api/rest"
 | 
				
			||||||
	apiserverfilters "k8s.io/kubernetes/pkg/apiserver/filters"
 | 
					 | 
				
			||||||
	authhandlers "k8s.io/kubernetes/pkg/auth/handlers"
 | 
						authhandlers "k8s.io/kubernetes/pkg/auth/handlers"
 | 
				
			||||||
	kubeclientset "k8s.io/kubernetes/pkg/client/clientset_generated/clientset"
 | 
						kubeclientset "k8s.io/kubernetes/pkg/client/clientset_generated/clientset"
 | 
				
			||||||
	kubeinformers "k8s.io/kubernetes/pkg/client/informers/informers_generated"
 | 
						kubeinformers "k8s.io/kubernetes/pkg/client/informers/informers_generated"
 | 
				
			||||||
	v1listers "k8s.io/kubernetes/pkg/client/listers/core/v1"
 | 
						v1listers "k8s.io/kubernetes/pkg/client/listers/core/v1"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/genericapiserver"
 | 
						"k8s.io/kubernetes/pkg/genericapiserver"
 | 
				
			||||||
 | 
						genericapifilters "k8s.io/kubernetes/pkg/genericapiserver/api/filters"
 | 
				
			||||||
	genericfilters "k8s.io/kubernetes/pkg/genericapiserver/filters"
 | 
						genericfilters "k8s.io/kubernetes/pkg/genericapiserver/filters"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/registry/generic"
 | 
						"k8s.io/kubernetes/pkg/registry/generic"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/util/wait"
 | 
						"k8s.io/kubernetes/pkg/util/wait"
 | 
				
			||||||
@@ -181,23 +181,23 @@ func (h *handlerChainConfig) handlerChain(apiHandler http.Handler, c *genericapi
 | 
				
			|||||||
	// add this as a filter so that we never collide with "already registered" failures on `/apis`
 | 
						// add this as a filter so that we never collide with "already registered" failures on `/apis`
 | 
				
			||||||
	handler := WithAPIs(apiHandler, h.informers.Apiregistration().InternalVersion().APIServices(), h.serviceLister, h.endpointsLister)
 | 
						handler := WithAPIs(apiHandler, h.informers.Apiregistration().InternalVersion().APIServices(), h.serviceLister, h.endpointsLister)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	handler = apiserverfilters.WithAuthorization(handler, c.RequestContextMapper, c.Authorizer)
 | 
						handler = genericapifilters.WithAuthorization(handler, c.RequestContextMapper, c.Authorizer)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// this mux is NOT protected by authorization, but DOES have authentication information
 | 
						// this mux is NOT protected by authorization, but DOES have authentication information
 | 
				
			||||||
	// this is so that everyone can hit the proxy and we can properly identify the user.  The backing
 | 
						// this is so that everyone can hit the proxy and we can properly identify the user.  The backing
 | 
				
			||||||
	// API server will deal with authorization
 | 
						// API server will deal with authorization
 | 
				
			||||||
	handler = WithProxyMux(handler, h.proxyMux)
 | 
						handler = WithProxyMux(handler, h.proxyMux)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	handler = apiserverfilters.WithImpersonation(handler, c.RequestContextMapper, c.Authorizer)
 | 
						handler = genericapifilters.WithImpersonation(handler, c.RequestContextMapper, c.Authorizer)
 | 
				
			||||||
	// audit to stdout to help with debugging as we get this started
 | 
						// audit to stdout to help with debugging as we get this started
 | 
				
			||||||
	handler = apiserverfilters.WithAudit(handler, c.RequestContextMapper, os.Stdout)
 | 
						handler = genericapifilters.WithAudit(handler, c.RequestContextMapper, os.Stdout)
 | 
				
			||||||
	handler = authhandlers.WithAuthentication(handler, c.RequestContextMapper, c.Authenticator, authhandlers.Unauthorized(c.SupportsBasicAuth))
 | 
						handler = authhandlers.WithAuthentication(handler, c.RequestContextMapper, c.Authenticator, authhandlers.Unauthorized(c.SupportsBasicAuth))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	handler = genericfilters.WithCORS(handler, c.CorsAllowedOriginList, nil, nil, nil, "true")
 | 
						handler = genericfilters.WithCORS(handler, c.CorsAllowedOriginList, nil, nil, nil, "true")
 | 
				
			||||||
	handler = genericfilters.WithPanicRecovery(handler, c.RequestContextMapper)
 | 
						handler = genericfilters.WithPanicRecovery(handler, c.RequestContextMapper)
 | 
				
			||||||
	handler = genericfilters.WithTimeoutForNonLongRunningRequests(handler, c.RequestContextMapper, c.LongRunningFunc)
 | 
						handler = genericfilters.WithTimeoutForNonLongRunningRequests(handler, c.RequestContextMapper, c.LongRunningFunc)
 | 
				
			||||||
	handler = genericfilters.WithMaxInFlightLimit(handler, c.MaxRequestsInFlight, c.MaxMutatingRequestsInFlight, c.RequestContextMapper, c.LongRunningFunc)
 | 
						handler = genericfilters.WithMaxInFlightLimit(handler, c.MaxRequestsInFlight, c.MaxMutatingRequestsInFlight, c.RequestContextMapper, c.LongRunningFunc)
 | 
				
			||||||
	handler = apiserverfilters.WithRequestInfo(handler, genericapiserver.NewRequestInfoResolver(c), c.RequestContextMapper)
 | 
						handler = genericapifilters.WithRequestInfo(handler, genericapiserver.NewRequestInfoResolver(c), c.RequestContextMapper)
 | 
				
			||||||
	handler = api.WithRequestContext(handler, c.RequestContextMapper)
 | 
						handler = api.WithRequestContext(handler, c.RequestContextMapper)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return handler, nil
 | 
						return handler, nil
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,8 +23,8 @@ import (
 | 
				
			|||||||
	"k8s.io/kubernetes/pkg/api"
 | 
						"k8s.io/kubernetes/pkg/api"
 | 
				
			||||||
	apierrors "k8s.io/kubernetes/pkg/api/errors"
 | 
						apierrors "k8s.io/kubernetes/pkg/api/errors"
 | 
				
			||||||
	metav1 "k8s.io/kubernetes/pkg/apis/meta/v1"
 | 
						metav1 "k8s.io/kubernetes/pkg/apis/meta/v1"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/apiserver/handlers/responsewriters"
 | 
					 | 
				
			||||||
	v1listers "k8s.io/kubernetes/pkg/client/listers/core/v1"
 | 
						v1listers "k8s.io/kubernetes/pkg/client/listers/core/v1"
 | 
				
			||||||
 | 
						"k8s.io/kubernetes/pkg/genericapiserver/api/handlers/responsewriters"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/labels"
 | 
						"k8s.io/kubernetes/pkg/labels"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/runtime"
 | 
						"k8s.io/kubernetes/pkg/runtime"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -22,9 +22,9 @@ import (
 | 
				
			|||||||
	"sync"
 | 
						"sync"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/api"
 | 
						"k8s.io/kubernetes/pkg/api"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/apiserver/handlers/responsewriters"
 | 
					 | 
				
			||||||
	"k8s.io/kubernetes/pkg/client/restclient"
 | 
						"k8s.io/kubernetes/pkg/client/restclient"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/client/transport"
 | 
						"k8s.io/kubernetes/pkg/client/transport"
 | 
				
			||||||
 | 
						"k8s.io/kubernetes/pkg/genericapiserver/api/handlers/responsewriters"
 | 
				
			||||||
	genericrest "k8s.io/kubernetes/pkg/registry/generic/rest"
 | 
						genericrest "k8s.io/kubernetes/pkg/registry/generic/rest"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/runtime"
 | 
						"k8s.io/kubernetes/pkg/runtime"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/util/httpstream/spdy"
 | 
						"k8s.io/kubernetes/pkg/util/httpstream/spdy"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -26,8 +26,8 @@ import (
 | 
				
			|||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/api"
 | 
						"k8s.io/kubernetes/pkg/api"
 | 
				
			||||||
	apiserverrequest "k8s.io/kubernetes/pkg/apiserver/request"
 | 
					 | 
				
			||||||
	"k8s.io/kubernetes/pkg/auth/user"
 | 
						"k8s.io/kubernetes/pkg/auth/user"
 | 
				
			||||||
 | 
						genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/util/sets"
 | 
						"k8s.io/kubernetes/pkg/util/sets"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"k8s.io/kubernetes/cmd/kubernetes-discovery/pkg/apis/apiregistration"
 | 
						"k8s.io/kubernetes/cmd/kubernetes-discovery/pkg/apis/apiregistration"
 | 
				
			||||||
@@ -62,13 +62,13 @@ func (m *fakeRequestContextMapper) Get(req *http.Request) (api.Context, bool) {
 | 
				
			|||||||
		ctx = api.WithUser(ctx, m.user)
 | 
							ctx = api.WithUser(ctx, m.user)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	resolver := &apiserverrequest.RequestInfoFactory{
 | 
						resolver := &genericapirequest.RequestInfoFactory{
 | 
				
			||||||
		APIPrefixes:          sets.NewString("api", "apis"),
 | 
							APIPrefixes:          sets.NewString("api", "apis"),
 | 
				
			||||||
		GrouplessAPIPrefixes: sets.NewString("api"),
 | 
							GrouplessAPIPrefixes: sets.NewString("api"),
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	info, err := resolver.NewRequestInfo(req)
 | 
						info, err := resolver.NewRequestInfo(req)
 | 
				
			||||||
	if err == nil {
 | 
						if err == nil {
 | 
				
			||||||
		ctx = apiserverrequest.WithRequestInfo(ctx, info)
 | 
							ctx = genericapirequest.WithRequestInfo(ctx, info)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return ctx, true
 | 
						return ctx, true
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -96,9 +96,6 @@ pkg/apis/policy/install
 | 
				
			|||||||
pkg/apis/rbac/install
 | 
					pkg/apis/rbac/install
 | 
				
			||||||
pkg/apis/storage/install
 | 
					pkg/apis/storage/install
 | 
				
			||||||
pkg/apis/storage/validation
 | 
					pkg/apis/storage/validation
 | 
				
			||||||
pkg/apiserver/audit
 | 
					 | 
				
			||||||
pkg/apiserver/handlers/responsewriters
 | 
					 | 
				
			||||||
pkg/apiserver/openapi
 | 
					 | 
				
			||||||
pkg/auth/authenticator
 | 
					pkg/auth/authenticator
 | 
				
			||||||
pkg/auth/authorizer/union
 | 
					pkg/auth/authorizer/union
 | 
				
			||||||
pkg/client/conditions
 | 
					pkg/client/conditions
 | 
				
			||||||
@@ -179,6 +176,9 @@ pkg/controller/volume/reconciler
 | 
				
			|||||||
pkg/controller/volume/statusupdater
 | 
					pkg/controller/volume/statusupdater
 | 
				
			||||||
pkg/conversion/queryparams
 | 
					pkg/conversion/queryparams
 | 
				
			||||||
pkg/credentialprovider/aws
 | 
					pkg/credentialprovider/aws
 | 
				
			||||||
 | 
					pkg/genericapiserver/api/audit
 | 
				
			||||||
 | 
					pkg/genericapiserver/api/handlers/responsewriters
 | 
				
			||||||
 | 
					pkg/genericapiserver/api/openapi
 | 
				
			||||||
pkg/genericapiserver/filters
 | 
					pkg/genericapiserver/filters
 | 
				
			||||||
pkg/genericapiserver/mux
 | 
					pkg/genericapiserver/mux
 | 
				
			||||||
pkg/genericapiserver/routes
 | 
					pkg/genericapiserver/routes
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -58,7 +58,7 @@ func (e *StatusError) Error() string {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Status allows access to e's status without having to know the detailed workings
 | 
					// Status allows access to e's status without having to know the detailed workings
 | 
				
			||||||
// of StatusError. Used by pkg/apiserver.
 | 
					// of StatusError.
 | 
				
			||||||
func (e *StatusError) Status() metav1.Status {
 | 
					func (e *StatusError) Status() metav1.Status {
 | 
				
			||||||
	return e.ErrStatus
 | 
						return e.ErrStatus
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,18 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
Copyright 2016 The Kubernetes Authors.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Licensed under the Apache License, Version 2.0 (the "License");
 | 
					 | 
				
			||||||
you may not use this file except in compliance with the License.
 | 
					 | 
				
			||||||
You may obtain a copy of the License at
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    http://www.apache.org/licenses/LICENSE-2.0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Unless required by applicable law or agreed to in writing, software
 | 
					 | 
				
			||||||
distributed under the License is distributed on an "AS IS" BASIS,
 | 
					 | 
				
			||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
					 | 
				
			||||||
See the License for the specific language governing permissions and
 | 
					 | 
				
			||||||
limitations under the License.
 | 
					 | 
				
			||||||
*/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// Package errors contains HTTP handler related errors
 | 
					 | 
				
			||||||
package errors // import "k8s.io/kubernetes/pkg/apiserver/handlers/errors"
 | 
					 | 
				
			||||||
@@ -1,27 +0,0 @@
 | 
				
			|||||||
package(default_visibility = ["//visibility:public"])
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
licenses(["notice"])
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
load(
 | 
					 | 
				
			||||||
    "@io_bazel_rules_go//go:def.bzl",
 | 
					 | 
				
			||||||
    "go_library",
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
go_library(
 | 
					 | 
				
			||||||
    name = "go_default_library",
 | 
					 | 
				
			||||||
    srcs = [
 | 
					 | 
				
			||||||
        "doc.go",
 | 
					 | 
				
			||||||
        "writers.go",
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
    tags = ["automanaged"],
 | 
					 | 
				
			||||||
    deps = [
 | 
					 | 
				
			||||||
        "//pkg/api/rest:go_default_library",
 | 
					 | 
				
			||||||
        "//pkg/apiserver/handlers/errors:go_default_library",
 | 
					 | 
				
			||||||
        "//pkg/apiserver/handlers/negotiation:go_default_library",
 | 
					 | 
				
			||||||
        "//pkg/runtime:go_default_library",
 | 
					 | 
				
			||||||
        "//pkg/runtime/schema:go_default_library",
 | 
					 | 
				
			||||||
        "//pkg/util/flushwriter:go_default_library",
 | 
					 | 
				
			||||||
        "//pkg/util/runtime:go_default_library",
 | 
					 | 
				
			||||||
        "//pkg/util/wsstream:go_default_library",
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
@@ -33,16 +33,16 @@ go_library(
 | 
				
			|||||||
        "//pkg/apimachinery:go_default_library",
 | 
					        "//pkg/apimachinery:go_default_library",
 | 
				
			||||||
        "//pkg/apimachinery/registered:go_default_library",
 | 
					        "//pkg/apimachinery/registered:go_default_library",
 | 
				
			||||||
        "//pkg/apis/meta/v1:go_default_library",
 | 
					        "//pkg/apis/meta/v1:go_default_library",
 | 
				
			||||||
        "//pkg/apiserver:go_default_library",
 | 
					 | 
				
			||||||
        "//pkg/apiserver/filters:go_default_library",
 | 
					 | 
				
			||||||
        "//pkg/apiserver/openapi:go_default_library",
 | 
					 | 
				
			||||||
        "//pkg/apiserver/request:go_default_library",
 | 
					 | 
				
			||||||
        "//pkg/auth/authenticator:go_default_library",
 | 
					        "//pkg/auth/authenticator:go_default_library",
 | 
				
			||||||
        "//pkg/auth/authorizer:go_default_library",
 | 
					        "//pkg/auth/authorizer:go_default_library",
 | 
				
			||||||
        "//pkg/auth/authorizer/union:go_default_library",
 | 
					        "//pkg/auth/authorizer/union:go_default_library",
 | 
				
			||||||
        "//pkg/auth/handlers:go_default_library",
 | 
					        "//pkg/auth/handlers:go_default_library",
 | 
				
			||||||
        "//pkg/auth/user:go_default_library",
 | 
					        "//pkg/auth/user:go_default_library",
 | 
				
			||||||
        "//pkg/client/restclient:go_default_library",
 | 
					        "//pkg/client/restclient:go_default_library",
 | 
				
			||||||
 | 
					        "//pkg/genericapiserver/api:go_default_library",
 | 
				
			||||||
 | 
					        "//pkg/genericapiserver/api/filters:go_default_library",
 | 
				
			||||||
 | 
					        "//pkg/genericapiserver/api/openapi:go_default_library",
 | 
				
			||||||
 | 
					        "//pkg/genericapiserver/api/request:go_default_library",
 | 
				
			||||||
        "//pkg/genericapiserver/authenticator:go_default_library",
 | 
					        "//pkg/genericapiserver/authenticator:go_default_library",
 | 
				
			||||||
        "//pkg/genericapiserver/authorizer:go_default_library",
 | 
					        "//pkg/genericapiserver/authorizer:go_default_library",
 | 
				
			||||||
        "//pkg/genericapiserver/filters:go_default_library",
 | 
					        "//pkg/genericapiserver/filters:go_default_library",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -26,11 +26,11 @@ go_library(
 | 
				
			|||||||
        "//pkg/api/rest:go_default_library",
 | 
					        "//pkg/api/rest:go_default_library",
 | 
				
			||||||
        "//pkg/apis/extensions:go_default_library",
 | 
					        "//pkg/apis/extensions:go_default_library",
 | 
				
			||||||
        "//pkg/apis/meta/v1:go_default_library",
 | 
					        "//pkg/apis/meta/v1:go_default_library",
 | 
				
			||||||
        "//pkg/apiserver/handlers:go_default_library",
 | 
					 | 
				
			||||||
        "//pkg/apiserver/handlers/negotiation:go_default_library",
 | 
					 | 
				
			||||||
        "//pkg/apiserver/handlers/responsewriters:go_default_library",
 | 
					 | 
				
			||||||
        "//pkg/apiserver/metrics:go_default_library",
 | 
					 | 
				
			||||||
        "//pkg/conversion:go_default_library",
 | 
					        "//pkg/conversion:go_default_library",
 | 
				
			||||||
 | 
					        "//pkg/genericapiserver/api/handlers:go_default_library",
 | 
				
			||||||
 | 
					        "//pkg/genericapiserver/api/handlers/negotiation:go_default_library",
 | 
				
			||||||
 | 
					        "//pkg/genericapiserver/api/handlers/responsewriters:go_default_library",
 | 
				
			||||||
 | 
					        "//pkg/genericapiserver/api/metrics:go_default_library",
 | 
				
			||||||
        "//pkg/runtime:go_default_library",
 | 
					        "//pkg/runtime:go_default_library",
 | 
				
			||||||
        "//pkg/runtime/schema:go_default_library",
 | 
					        "//pkg/runtime/schema:go_default_library",
 | 
				
			||||||
        "//pkg/util/errors:go_default_library",
 | 
					        "//pkg/util/errors:go_default_library",
 | 
				
			||||||
@@ -58,12 +58,12 @@ go_test(
 | 
				
			|||||||
        "//pkg/api/testing:go_default_library",
 | 
					        "//pkg/api/testing:go_default_library",
 | 
				
			||||||
        "//pkg/api/v1:go_default_library",
 | 
					        "//pkg/api/v1:go_default_library",
 | 
				
			||||||
        "//pkg/apis/meta/v1:go_default_library",
 | 
					        "//pkg/apis/meta/v1:go_default_library",
 | 
				
			||||||
        "//pkg/apiserver/filters:go_default_library",
 | 
					 | 
				
			||||||
        "//pkg/apiserver/handlers:go_default_library",
 | 
					 | 
				
			||||||
        "//pkg/apiserver/handlers/responsewriters:go_default_library",
 | 
					 | 
				
			||||||
        "//pkg/apiserver/request:go_default_library",
 | 
					 | 
				
			||||||
        "//pkg/apiserver/testing:go_default_library",
 | 
					 | 
				
			||||||
        "//pkg/fields:go_default_library",
 | 
					        "//pkg/fields:go_default_library",
 | 
				
			||||||
 | 
					        "//pkg/genericapiserver/api/filters:go_default_library",
 | 
				
			||||||
 | 
					        "//pkg/genericapiserver/api/handlers:go_default_library",
 | 
				
			||||||
 | 
					        "//pkg/genericapiserver/api/handlers/responsewriters:go_default_library",
 | 
				
			||||||
 | 
					        "//pkg/genericapiserver/api/request:go_default_library",
 | 
				
			||||||
 | 
					        "//pkg/genericapiserver/api/testing:go_default_library",
 | 
				
			||||||
        "//pkg/labels:go_default_library",
 | 
					        "//pkg/labels:go_default_library",
 | 
				
			||||||
        "//pkg/runtime:go_default_library",
 | 
					        "//pkg/runtime:go_default_library",
 | 
				
			||||||
        "//pkg/runtime/schema:go_default_library",
 | 
					        "//pkg/runtime/schema:go_default_library",
 | 
				
			||||||
@@ -14,10 +14,10 @@ See the License for the specific language governing permissions and
 | 
				
			|||||||
limitations under the License.
 | 
					limitations under the License.
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
package apiserver
 | 
					package api
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/apiserver/metrics"
 | 
						"k8s.io/kubernetes/pkg/genericapiserver/api/metrics"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func init() {
 | 
					func init() {
 | 
				
			||||||
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
 | 
				
			|||||||
limitations under the License.
 | 
					limitations under the License.
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
package apiserver
 | 
					package api
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"bytes"
 | 
						"bytes"
 | 
				
			||||||
@@ -43,11 +43,11 @@ import (
 | 
				
			|||||||
	"k8s.io/kubernetes/pkg/api/v1"
 | 
						"k8s.io/kubernetes/pkg/api/v1"
 | 
				
			||||||
	apiv1 "k8s.io/kubernetes/pkg/api/v1"
 | 
						apiv1 "k8s.io/kubernetes/pkg/api/v1"
 | 
				
			||||||
	metav1 "k8s.io/kubernetes/pkg/apis/meta/v1"
 | 
						metav1 "k8s.io/kubernetes/pkg/apis/meta/v1"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/apiserver/filters"
 | 
					 | 
				
			||||||
	"k8s.io/kubernetes/pkg/apiserver/handlers/responsewriters"
 | 
					 | 
				
			||||||
	"k8s.io/kubernetes/pkg/apiserver/request"
 | 
					 | 
				
			||||||
	apiservertesting "k8s.io/kubernetes/pkg/apiserver/testing"
 | 
					 | 
				
			||||||
	"k8s.io/kubernetes/pkg/fields"
 | 
						"k8s.io/kubernetes/pkg/fields"
 | 
				
			||||||
 | 
						genericapifilters "k8s.io/kubernetes/pkg/genericapiserver/api/filters"
 | 
				
			||||||
 | 
						"k8s.io/kubernetes/pkg/genericapiserver/api/handlers/responsewriters"
 | 
				
			||||||
 | 
						"k8s.io/kubernetes/pkg/genericapiserver/api/request"
 | 
				
			||||||
 | 
						genericapitesting "k8s.io/kubernetes/pkg/genericapiserver/api/testing"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/labels"
 | 
						"k8s.io/kubernetes/pkg/labels"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/runtime"
 | 
						"k8s.io/kubernetes/pkg/runtime"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/runtime/schema"
 | 
						"k8s.io/kubernetes/pkg/runtime/schema"
 | 
				
			||||||
@@ -129,11 +129,11 @@ func addGrouplessTypes() {
 | 
				
			|||||||
		TimeoutSeconds  *int64 `json:"timeoutSeconds,omitempty"`
 | 
							TimeoutSeconds  *int64 `json:"timeoutSeconds,omitempty"`
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	api.Scheme.AddKnownTypes(grouplessGroupVersion,
 | 
						api.Scheme.AddKnownTypes(grouplessGroupVersion,
 | 
				
			||||||
		&apiservertesting.Simple{}, &apiservertesting.SimpleList{}, &ListOptions{}, &metav1.ExportOptions{},
 | 
							&genericapitesting.Simple{}, &genericapitesting.SimpleList{}, &ListOptions{}, &metav1.ExportOptions{},
 | 
				
			||||||
		&v1.DeleteOptions{}, &apiservertesting.SimpleGetOptions{}, &apiservertesting.SimpleRoot{})
 | 
							&v1.DeleteOptions{}, &genericapitesting.SimpleGetOptions{}, &genericapitesting.SimpleRoot{})
 | 
				
			||||||
	api.Scheme.AddKnownTypes(grouplessInternalGroupVersion,
 | 
						api.Scheme.AddKnownTypes(grouplessInternalGroupVersion,
 | 
				
			||||||
		&apiservertesting.Simple{}, &apiservertesting.SimpleList{}, &api.ListOptions{}, &metav1.ExportOptions{},
 | 
							&genericapitesting.Simple{}, &genericapitesting.SimpleList{}, &api.ListOptions{}, &metav1.ExportOptions{},
 | 
				
			||||||
		&apiservertesting.SimpleGetOptions{}, &apiservertesting.SimpleRoot{})
 | 
							&genericapitesting.SimpleGetOptions{}, &genericapitesting.SimpleRoot{})
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func addTestTypes() {
 | 
					func addTestTypes() {
 | 
				
			||||||
@@ -147,13 +147,13 @@ func addTestTypes() {
 | 
				
			|||||||
		TimeoutSeconds  *int64 `json:"timeoutSeconds,omitempty"`
 | 
							TimeoutSeconds  *int64 `json:"timeoutSeconds,omitempty"`
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	api.Scheme.AddKnownTypes(testGroupVersion,
 | 
						api.Scheme.AddKnownTypes(testGroupVersion,
 | 
				
			||||||
		&apiservertesting.Simple{}, &apiservertesting.SimpleList{}, &ListOptions{}, &metav1.ExportOptions{},
 | 
							&genericapitesting.Simple{}, &genericapitesting.SimpleList{}, &ListOptions{}, &metav1.ExportOptions{},
 | 
				
			||||||
		&v1.DeleteOptions{}, &apiservertesting.SimpleGetOptions{}, &apiservertesting.SimpleRoot{},
 | 
							&v1.DeleteOptions{}, &genericapitesting.SimpleGetOptions{}, &genericapitesting.SimpleRoot{},
 | 
				
			||||||
		&SimpleXGSubresource{})
 | 
							&SimpleXGSubresource{})
 | 
				
			||||||
	api.Scheme.AddKnownTypes(testGroupVersion, &v1.Pod{})
 | 
						api.Scheme.AddKnownTypes(testGroupVersion, &v1.Pod{})
 | 
				
			||||||
	api.Scheme.AddKnownTypes(testInternalGroupVersion,
 | 
						api.Scheme.AddKnownTypes(testInternalGroupVersion,
 | 
				
			||||||
		&apiservertesting.Simple{}, &apiservertesting.SimpleList{}, &api.ListOptions{}, &metav1.ExportOptions{},
 | 
							&genericapitesting.Simple{}, &genericapitesting.SimpleList{}, &api.ListOptions{}, &metav1.ExportOptions{},
 | 
				
			||||||
		&apiservertesting.SimpleGetOptions{}, &apiservertesting.SimpleRoot{},
 | 
							&genericapitesting.SimpleGetOptions{}, &genericapitesting.SimpleRoot{},
 | 
				
			||||||
		&SimpleXGSubresource{})
 | 
							&SimpleXGSubresource{})
 | 
				
			||||||
	api.Scheme.AddKnownTypes(testInternalGroupVersion, &api.Pod{})
 | 
						api.Scheme.AddKnownTypes(testInternalGroupVersion, &api.Pod{})
 | 
				
			||||||
	// Register SimpleXGSubresource in both testGroupVersion and testGroup2Version, and also their
 | 
						// Register SimpleXGSubresource in both testGroupVersion and testGroup2Version, and also their
 | 
				
			||||||
@@ -175,8 +175,8 @@ func addNewTestTypes() {
 | 
				
			|||||||
		TimeoutSeconds  *int64 `json:"timeoutSeconds,omitempty"`
 | 
							TimeoutSeconds  *int64 `json:"timeoutSeconds,omitempty"`
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	api.Scheme.AddKnownTypes(newGroupVersion,
 | 
						api.Scheme.AddKnownTypes(newGroupVersion,
 | 
				
			||||||
		&apiservertesting.Simple{}, &apiservertesting.SimpleList{}, &ListOptions{}, &metav1.ExportOptions{},
 | 
							&genericapitesting.Simple{}, &genericapitesting.SimpleList{}, &ListOptions{}, &metav1.ExportOptions{},
 | 
				
			||||||
		&api.DeleteOptions{}, &apiservertesting.SimpleGetOptions{}, &apiservertesting.SimpleRoot{},
 | 
							&api.DeleteOptions{}, &genericapitesting.SimpleGetOptions{}, &genericapitesting.SimpleRoot{},
 | 
				
			||||||
		&v1.Pod{},
 | 
							&v1.Pod{},
 | 
				
			||||||
	)
 | 
						)
 | 
				
			||||||
	versioned.AddToGroupVersion(api.Scheme, newGroupVersion)
 | 
						versioned.AddToGroupVersion(api.Scheme, newGroupVersion)
 | 
				
			||||||
@@ -315,7 +315,7 @@ func handleInternal(storage map[string]rest.Storage, admissionControl admission.
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestSimpleSetupRight(t *testing.T) {
 | 
					func TestSimpleSetupRight(t *testing.T) {
 | 
				
			||||||
	s := &apiservertesting.Simple{ObjectMeta: apiv1.ObjectMeta{Name: "aName"}}
 | 
						s := &genericapitesting.Simple{ObjectMeta: apiv1.ObjectMeta{Name: "aName"}}
 | 
				
			||||||
	wire, err := runtime.Encode(codec, s)
 | 
						wire, err := runtime.Encode(codec, s)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Fatal(err)
 | 
							t.Fatal(err)
 | 
				
			||||||
@@ -330,7 +330,7 @@ func TestSimpleSetupRight(t *testing.T) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestSimpleOptionsSetupRight(t *testing.T) {
 | 
					func TestSimpleOptionsSetupRight(t *testing.T) {
 | 
				
			||||||
	s := &apiservertesting.SimpleGetOptions{}
 | 
						s := &genericapitesting.SimpleGetOptions{}
 | 
				
			||||||
	wire, err := runtime.Encode(codec, s)
 | 
						wire, err := runtime.Encode(codec, s)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Fatal(err)
 | 
							t.Fatal(err)
 | 
				
			||||||
@@ -348,11 +348,11 @@ type SimpleRESTStorage struct {
 | 
				
			|||||||
	lock sync.Mutex
 | 
						lock sync.Mutex
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	errors map[string]error
 | 
						errors map[string]error
 | 
				
			||||||
	list   []apiservertesting.Simple
 | 
						list   []genericapitesting.Simple
 | 
				
			||||||
	item   apiservertesting.Simple
 | 
						item   genericapitesting.Simple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	updated *apiservertesting.Simple
 | 
						updated *genericapitesting.Simple
 | 
				
			||||||
	created *apiservertesting.Simple
 | 
						created *genericapitesting.Simple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	stream *SimpleStream
 | 
						stream *SimpleStream
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -385,7 +385,7 @@ func (storage *SimpleRESTStorage) Export(ctx api.Context, name string, opts meta
 | 
				
			|||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	s, ok := obj.(*apiservertesting.Simple)
 | 
						s, ok := obj.(*genericapitesting.Simple)
 | 
				
			||||||
	if !ok {
 | 
						if !ok {
 | 
				
			||||||
		return nil, fmt.Errorf("unexpected object")
 | 
							return nil, fmt.Errorf("unexpected object")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -397,7 +397,7 @@ func (storage *SimpleRESTStorage) Export(ctx api.Context, name string, opts meta
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
func (storage *SimpleRESTStorage) List(ctx api.Context, options *api.ListOptions) (runtime.Object, error) {
 | 
					func (storage *SimpleRESTStorage) List(ctx api.Context, options *api.ListOptions) (runtime.Object, error) {
 | 
				
			||||||
	storage.checkContext(ctx)
 | 
						storage.checkContext(ctx)
 | 
				
			||||||
	result := &apiservertesting.SimpleList{
 | 
						result := &genericapitesting.SimpleList{
 | 
				
			||||||
		Items: storage.list,
 | 
							Items: storage.list,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	storage.requestedLabelSelector = labels.Everything()
 | 
						storage.requestedLabelSelector = labels.Everything()
 | 
				
			||||||
@@ -468,22 +468,22 @@ func (storage *SimpleRESTStorage) Delete(ctx api.Context, id string, options *ap
 | 
				
			|||||||
	var obj runtime.Object = &metav1.Status{Status: metav1.StatusSuccess}
 | 
						var obj runtime.Object = &metav1.Status{Status: metav1.StatusSuccess}
 | 
				
			||||||
	var err error
 | 
						var err error
 | 
				
			||||||
	if storage.injectedFunction != nil {
 | 
						if storage.injectedFunction != nil {
 | 
				
			||||||
		obj, err = storage.injectedFunction(&apiservertesting.Simple{ObjectMeta: apiv1.ObjectMeta{Name: id}})
 | 
							obj, err = storage.injectedFunction(&genericapitesting.Simple{ObjectMeta: apiv1.ObjectMeta{Name: id}})
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return obj, err
 | 
						return obj, err
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (storage *SimpleRESTStorage) New() runtime.Object {
 | 
					func (storage *SimpleRESTStorage) New() runtime.Object {
 | 
				
			||||||
	return &apiservertesting.Simple{}
 | 
						return &genericapitesting.Simple{}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (storage *SimpleRESTStorage) NewList() runtime.Object {
 | 
					func (storage *SimpleRESTStorage) NewList() runtime.Object {
 | 
				
			||||||
	return &apiservertesting.SimpleList{}
 | 
						return &genericapitesting.SimpleList{}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (storage *SimpleRESTStorage) Create(ctx api.Context, obj runtime.Object) (runtime.Object, error) {
 | 
					func (storage *SimpleRESTStorage) Create(ctx api.Context, obj runtime.Object) (runtime.Object, error) {
 | 
				
			||||||
	storage.checkContext(ctx)
 | 
						storage.checkContext(ctx)
 | 
				
			||||||
	storage.created = obj.(*apiservertesting.Simple)
 | 
						storage.created = obj.(*genericapitesting.Simple)
 | 
				
			||||||
	if err := storage.errors["create"]; err != nil {
 | 
						if err := storage.errors["create"]; err != nil {
 | 
				
			||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -500,7 +500,7 @@ func (storage *SimpleRESTStorage) Update(ctx api.Context, name string, objInfo r
 | 
				
			|||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, false, err
 | 
							return nil, false, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	storage.updated = obj.(*apiservertesting.Simple)
 | 
						storage.updated = obj.(*genericapitesting.Simple)
 | 
				
			||||||
	if err := storage.errors["update"]; err != nil {
 | 
						if err := storage.errors["update"]; err != nil {
 | 
				
			||||||
		return nil, false, err
 | 
							return nil, false, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -577,7 +577,7 @@ type ConnecterRESTStorage struct {
 | 
				
			|||||||
var _ = rest.Connecter(&ConnecterRESTStorage{})
 | 
					var _ = rest.Connecter(&ConnecterRESTStorage{})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (s *ConnecterRESTStorage) New() runtime.Object {
 | 
					func (s *ConnecterRESTStorage) New() runtime.Object {
 | 
				
			||||||
	return &apiservertesting.Simple{}
 | 
						return &genericapitesting.Simple{}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (s *ConnecterRESTStorage) Connect(ctx api.Context, id string, options runtime.Object, responder rest.Responder) (http.Handler, error) {
 | 
					func (s *ConnecterRESTStorage) Connect(ctx api.Context, id string, options runtime.Object, responder rest.Responder) (http.Handler, error) {
 | 
				
			||||||
@@ -631,7 +631,7 @@ type GetWithOptionsRESTStorage struct {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (r *GetWithOptionsRESTStorage) Get(ctx api.Context, name string, options runtime.Object) (runtime.Object, error) {
 | 
					func (r *GetWithOptionsRESTStorage) Get(ctx api.Context, name string, options runtime.Object) (runtime.Object, error) {
 | 
				
			||||||
	if _, ok := options.(*apiservertesting.SimpleGetOptions); !ok {
 | 
						if _, ok := options.(*genericapitesting.SimpleGetOptions); !ok {
 | 
				
			||||||
		return nil, fmt.Errorf("Unexpected options object: %#v", options)
 | 
							return nil, fmt.Errorf("Unexpected options object: %#v", options)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	r.optionsReceived = options
 | 
						r.optionsReceived = options
 | 
				
			||||||
@@ -640,9 +640,9 @@ func (r *GetWithOptionsRESTStorage) Get(ctx api.Context, name string, options ru
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
func (r *GetWithOptionsRESTStorage) NewGetOptions() (runtime.Object, bool, string) {
 | 
					func (r *GetWithOptionsRESTStorage) NewGetOptions() (runtime.Object, bool, string) {
 | 
				
			||||||
	if len(r.takesPath) > 0 {
 | 
						if len(r.takesPath) > 0 {
 | 
				
			||||||
		return &apiservertesting.SimpleGetOptions{}, true, r.takesPath
 | 
							return &genericapitesting.SimpleGetOptions{}, true, r.takesPath
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return &apiservertesting.SimpleGetOptions{}, false, ""
 | 
						return &genericapitesting.SimpleGetOptions{}, false, ""
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var _ rest.GetterWithOptions = &GetWithOptionsRESTStorage{}
 | 
					var _ rest.GetterWithOptions = &GetWithOptionsRESTStorage{}
 | 
				
			||||||
@@ -654,7 +654,7 @@ type NamedCreaterRESTStorage struct {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
func (storage *NamedCreaterRESTStorage) Create(ctx api.Context, name string, obj runtime.Object) (runtime.Object, error) {
 | 
					func (storage *NamedCreaterRESTStorage) Create(ctx api.Context, name string, obj runtime.Object) (runtime.Object, error) {
 | 
				
			||||||
	storage.checkContext(ctx)
 | 
						storage.checkContext(ctx)
 | 
				
			||||||
	storage.created = obj.(*apiservertesting.Simple)
 | 
						storage.created = obj.(*genericapitesting.Simple)
 | 
				
			||||||
	storage.createdName = name
 | 
						storage.createdName = name
 | 
				
			||||||
	if err := storage.errors["create"]; err != nil {
 | 
						if err := storage.errors["create"]; err != nil {
 | 
				
			||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
@@ -798,7 +798,7 @@ func TestNotFound(t *testing.T) {
 | 
				
			|||||||
type UnimplementedRESTStorage struct{}
 | 
					type UnimplementedRESTStorage struct{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (UnimplementedRESTStorage) New() runtime.Object {
 | 
					func (UnimplementedRESTStorage) New() runtime.Object {
 | 
				
			||||||
	return &apiservertesting.Simple{}
 | 
						return &genericapitesting.Simple{}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// TestUnimplementedRESTStorage ensures that if a rest.Storage does not implement a given
 | 
					// TestUnimplementedRESTStorage ensures that if a rest.Storage does not implement a given
 | 
				
			||||||
@@ -1115,7 +1115,7 @@ func TestErrorList(t *testing.T) {
 | 
				
			|||||||
func TestNonEmptyList(t *testing.T) {
 | 
					func TestNonEmptyList(t *testing.T) {
 | 
				
			||||||
	storage := map[string]rest.Storage{}
 | 
						storage := map[string]rest.Storage{}
 | 
				
			||||||
	simpleStorage := SimpleRESTStorage{
 | 
						simpleStorage := SimpleRESTStorage{
 | 
				
			||||||
		list: []apiservertesting.Simple{
 | 
							list: []genericapitesting.Simple{
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				ObjectMeta: apiv1.ObjectMeta{Name: "something", Namespace: "other"},
 | 
									ObjectMeta: apiv1.ObjectMeta{Name: "something", Namespace: "other"},
 | 
				
			||||||
				Other:      "foo",
 | 
									Other:      "foo",
 | 
				
			||||||
@@ -1141,7 +1141,7 @@ func TestNonEmptyList(t *testing.T) {
 | 
				
			|||||||
		t.Logf("Data: %s", string(body))
 | 
							t.Logf("Data: %s", string(body))
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var listOut apiservertesting.SimpleList
 | 
						var listOut genericapitesting.SimpleList
 | 
				
			||||||
	body, err := extractBody(resp, &listOut)
 | 
						body, err := extractBody(resp, &listOut)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Fatalf("unexpected error: %v", err)
 | 
							t.Fatalf("unexpected error: %v", err)
 | 
				
			||||||
@@ -1166,7 +1166,7 @@ func TestNonEmptyList(t *testing.T) {
 | 
				
			|||||||
func TestSelfLinkSkipsEmptyName(t *testing.T) {
 | 
					func TestSelfLinkSkipsEmptyName(t *testing.T) {
 | 
				
			||||||
	storage := map[string]rest.Storage{}
 | 
						storage := map[string]rest.Storage{}
 | 
				
			||||||
	simpleStorage := SimpleRESTStorage{
 | 
						simpleStorage := SimpleRESTStorage{
 | 
				
			||||||
		list: []apiservertesting.Simple{
 | 
							list: []genericapitesting.Simple{
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				ObjectMeta: apiv1.ObjectMeta{Namespace: "other"},
 | 
									ObjectMeta: apiv1.ObjectMeta{Namespace: "other"},
 | 
				
			||||||
				Other:      "foo",
 | 
									Other:      "foo",
 | 
				
			||||||
@@ -1191,7 +1191,7 @@ func TestSelfLinkSkipsEmptyName(t *testing.T) {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
		t.Logf("Data: %s", string(body))
 | 
							t.Logf("Data: %s", string(body))
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	var listOut apiservertesting.SimpleList
 | 
						var listOut genericapitesting.SimpleList
 | 
				
			||||||
	body, err := extractBody(resp, &listOut)
 | 
						body, err := extractBody(resp, &listOut)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Fatalf("unexpected error: %v", err)
 | 
							t.Fatalf("unexpected error: %v", err)
 | 
				
			||||||
@@ -1241,7 +1241,7 @@ func TestMetadata(t *testing.T) {
 | 
				
			|||||||
func TestExport(t *testing.T) {
 | 
					func TestExport(t *testing.T) {
 | 
				
			||||||
	storage := map[string]rest.Storage{}
 | 
						storage := map[string]rest.Storage{}
 | 
				
			||||||
	simpleStorage := SimpleRESTStorage{
 | 
						simpleStorage := SimpleRESTStorage{
 | 
				
			||||||
		item: apiservertesting.Simple{
 | 
							item: genericapitesting.Simple{
 | 
				
			||||||
			ObjectMeta: apiv1.ObjectMeta{
 | 
								ObjectMeta: apiv1.ObjectMeta{
 | 
				
			||||||
				ResourceVersion:   "1234",
 | 
									ResourceVersion:   "1234",
 | 
				
			||||||
				CreationTimestamp: metav1.NewTime(time.Unix(10, 10)),
 | 
									CreationTimestamp: metav1.NewTime(time.Unix(10, 10)),
 | 
				
			||||||
@@ -1269,7 +1269,7 @@ func TestExport(t *testing.T) {
 | 
				
			|||||||
		resp.Body.Close()
 | 
							resp.Body.Close()
 | 
				
			||||||
		t.Fatalf("unexpected response: %#v\n%s\n", resp, string(data))
 | 
							t.Fatalf("unexpected response: %#v\n%s\n", resp, string(data))
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	var itemOut apiservertesting.Simple
 | 
						var itemOut genericapitesting.Simple
 | 
				
			||||||
	body, err := extractBody(resp, &itemOut)
 | 
						body, err := extractBody(resp, &itemOut)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Errorf("unexpected error: %v", err)
 | 
							t.Errorf("unexpected error: %v", err)
 | 
				
			||||||
@@ -1290,7 +1290,7 @@ func TestExport(t *testing.T) {
 | 
				
			|||||||
func TestGet(t *testing.T) {
 | 
					func TestGet(t *testing.T) {
 | 
				
			||||||
	storage := map[string]rest.Storage{}
 | 
						storage := map[string]rest.Storage{}
 | 
				
			||||||
	simpleStorage := SimpleRESTStorage{
 | 
						simpleStorage := SimpleRESTStorage{
 | 
				
			||||||
		item: apiservertesting.Simple{
 | 
							item: genericapitesting.Simple{
 | 
				
			||||||
			Other: "foo",
 | 
								Other: "foo",
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -1312,7 +1312,7 @@ func TestGet(t *testing.T) {
 | 
				
			|||||||
	if resp.StatusCode != http.StatusOK {
 | 
						if resp.StatusCode != http.StatusOK {
 | 
				
			||||||
		t.Fatalf("unexpected response: %#v", resp)
 | 
							t.Fatalf("unexpected response: %#v", resp)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	var itemOut apiservertesting.Simple
 | 
						var itemOut genericapitesting.Simple
 | 
				
			||||||
	body, err := extractBody(resp, &itemOut)
 | 
						body, err := extractBody(resp, &itemOut)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Errorf("unexpected error: %v", err)
 | 
							t.Errorf("unexpected error: %v", err)
 | 
				
			||||||
@@ -1329,7 +1329,7 @@ func TestGet(t *testing.T) {
 | 
				
			|||||||
func TestGetPretty(t *testing.T) {
 | 
					func TestGetPretty(t *testing.T) {
 | 
				
			||||||
	storage := map[string]rest.Storage{}
 | 
						storage := map[string]rest.Storage{}
 | 
				
			||||||
	simpleStorage := SimpleRESTStorage{
 | 
						simpleStorage := SimpleRESTStorage{
 | 
				
			||||||
		item: apiservertesting.Simple{
 | 
							item: genericapitesting.Simple{
 | 
				
			||||||
			Other: "foo",
 | 
								Other: "foo",
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -1379,13 +1379,13 @@ func TestGetPretty(t *testing.T) {
 | 
				
			|||||||
		if resp.StatusCode != http.StatusOK {
 | 
							if resp.StatusCode != http.StatusOK {
 | 
				
			||||||
			t.Fatal(err)
 | 
								t.Fatal(err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		var itemOut apiservertesting.Simple
 | 
							var itemOut genericapitesting.Simple
 | 
				
			||||||
		body, err := extractBody(resp, &itemOut)
 | 
							body, err := extractBody(resp, &itemOut)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			t.Fatal(err)
 | 
								t.Fatal(err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		// to get stable ordering we need to use a go type
 | 
							// to get stable ordering we need to use a go type
 | 
				
			||||||
		unstructured := apiservertesting.Simple{}
 | 
							unstructured := genericapitesting.Simple{}
 | 
				
			||||||
		if err := json.Unmarshal([]byte(body), &unstructured); err != nil {
 | 
							if err := json.Unmarshal([]byte(body), &unstructured); err != nil {
 | 
				
			||||||
			t.Fatal(err)
 | 
								t.Fatal(err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@@ -1487,7 +1487,7 @@ func TestGetWithOptions(t *testing.T) {
 | 
				
			|||||||
	storage := map[string]rest.Storage{}
 | 
						storage := map[string]rest.Storage{}
 | 
				
			||||||
	simpleStorage := GetWithOptionsRESTStorage{
 | 
						simpleStorage := GetWithOptionsRESTStorage{
 | 
				
			||||||
		SimpleRESTStorage: &SimpleRESTStorage{
 | 
							SimpleRESTStorage: &SimpleRESTStorage{
 | 
				
			||||||
			item: apiservertesting.Simple{
 | 
								item: genericapitesting.Simple{
 | 
				
			||||||
				Other: "foo",
 | 
									Other: "foo",
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
@@ -1504,7 +1504,7 @@ func TestGetWithOptions(t *testing.T) {
 | 
				
			|||||||
	if resp.StatusCode != http.StatusOK {
 | 
						if resp.StatusCode != http.StatusOK {
 | 
				
			||||||
		t.Fatalf("unexpected response: %#v", resp)
 | 
							t.Fatalf("unexpected response: %#v", resp)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	var itemOut apiservertesting.Simple
 | 
						var itemOut genericapitesting.Simple
 | 
				
			||||||
	body, err := extractBody(resp, &itemOut)
 | 
						body, err := extractBody(resp, &itemOut)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Errorf("unexpected error: %v", err)
 | 
							t.Errorf("unexpected error: %v", err)
 | 
				
			||||||
@@ -1514,7 +1514,7 @@ func TestGetWithOptions(t *testing.T) {
 | 
				
			|||||||
		t.Errorf("Unexpected data: %#v, expected %#v (%s)", itemOut, simpleStorage.item, string(body))
 | 
							t.Errorf("Unexpected data: %#v, expected %#v (%s)", itemOut, simpleStorage.item, string(body))
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	opts, ok := simpleStorage.optionsReceived.(*apiservertesting.SimpleGetOptions)
 | 
						opts, ok := simpleStorage.optionsReceived.(*genericapitesting.SimpleGetOptions)
 | 
				
			||||||
	if !ok {
 | 
						if !ok {
 | 
				
			||||||
		t.Errorf("Unexpected options object received: %#v", simpleStorage.optionsReceived)
 | 
							t.Errorf("Unexpected options object received: %#v", simpleStorage.optionsReceived)
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
@@ -1528,7 +1528,7 @@ func TestGetWithOptionsAndPath(t *testing.T) {
 | 
				
			|||||||
	storage := map[string]rest.Storage{}
 | 
						storage := map[string]rest.Storage{}
 | 
				
			||||||
	simpleStorage := GetWithOptionsRESTStorage{
 | 
						simpleStorage := GetWithOptionsRESTStorage{
 | 
				
			||||||
		SimpleRESTStorage: &SimpleRESTStorage{
 | 
							SimpleRESTStorage: &SimpleRESTStorage{
 | 
				
			||||||
			item: apiservertesting.Simple{
 | 
								item: genericapitesting.Simple{
 | 
				
			||||||
				Other: "foo",
 | 
									Other: "foo",
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
@@ -1546,7 +1546,7 @@ func TestGetWithOptionsAndPath(t *testing.T) {
 | 
				
			|||||||
	if resp.StatusCode != http.StatusOK {
 | 
						if resp.StatusCode != http.StatusOK {
 | 
				
			||||||
		t.Fatalf("unexpected response: %#v", resp)
 | 
							t.Fatalf("unexpected response: %#v", resp)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	var itemOut apiservertesting.Simple
 | 
						var itemOut genericapitesting.Simple
 | 
				
			||||||
	body, err := extractBody(resp, &itemOut)
 | 
						body, err := extractBody(resp, &itemOut)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Errorf("unexpected error: %v", err)
 | 
							t.Errorf("unexpected error: %v", err)
 | 
				
			||||||
@@ -1556,7 +1556,7 @@ func TestGetWithOptionsAndPath(t *testing.T) {
 | 
				
			|||||||
		t.Errorf("Unexpected data: %#v, expected %#v (%s)", itemOut, simpleStorage.item, string(body))
 | 
							t.Errorf("Unexpected data: %#v, expected %#v (%s)", itemOut, simpleStorage.item, string(body))
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	opts, ok := simpleStorage.optionsReceived.(*apiservertesting.SimpleGetOptions)
 | 
						opts, ok := simpleStorage.optionsReceived.(*genericapitesting.SimpleGetOptions)
 | 
				
			||||||
	if !ok {
 | 
						if !ok {
 | 
				
			||||||
		t.Errorf("Unexpected options object received: %#v", simpleStorage.optionsReceived)
 | 
							t.Errorf("Unexpected options object received: %#v", simpleStorage.optionsReceived)
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
@@ -1568,7 +1568,7 @@ func TestGetWithOptionsAndPath(t *testing.T) {
 | 
				
			|||||||
func TestGetAlternateSelfLink(t *testing.T) {
 | 
					func TestGetAlternateSelfLink(t *testing.T) {
 | 
				
			||||||
	storage := map[string]rest.Storage{}
 | 
						storage := map[string]rest.Storage{}
 | 
				
			||||||
	simpleStorage := SimpleRESTStorage{
 | 
						simpleStorage := SimpleRESTStorage{
 | 
				
			||||||
		item: apiservertesting.Simple{
 | 
							item: genericapitesting.Simple{
 | 
				
			||||||
			Other: "foo",
 | 
								Other: "foo",
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -1590,7 +1590,7 @@ func TestGetAlternateSelfLink(t *testing.T) {
 | 
				
			|||||||
	if resp.StatusCode != http.StatusOK {
 | 
						if resp.StatusCode != http.StatusOK {
 | 
				
			||||||
		t.Fatalf("unexpected response: %#v", resp)
 | 
							t.Fatalf("unexpected response: %#v", resp)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	var itemOut apiservertesting.Simple
 | 
						var itemOut genericapitesting.Simple
 | 
				
			||||||
	body, err := extractBody(resp, &itemOut)
 | 
						body, err := extractBody(resp, &itemOut)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Fatalf("unexpected error: %v", err)
 | 
							t.Fatalf("unexpected error: %v", err)
 | 
				
			||||||
@@ -1606,7 +1606,7 @@ func TestGetAlternateSelfLink(t *testing.T) {
 | 
				
			|||||||
func TestGetNamespaceSelfLink(t *testing.T) {
 | 
					func TestGetNamespaceSelfLink(t *testing.T) {
 | 
				
			||||||
	storage := map[string]rest.Storage{}
 | 
						storage := map[string]rest.Storage{}
 | 
				
			||||||
	simpleStorage := SimpleRESTStorage{
 | 
						simpleStorage := SimpleRESTStorage{
 | 
				
			||||||
		item: apiservertesting.Simple{
 | 
							item: genericapitesting.Simple{
 | 
				
			||||||
			Other: "foo",
 | 
								Other: "foo",
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -1628,7 +1628,7 @@ func TestGetNamespaceSelfLink(t *testing.T) {
 | 
				
			|||||||
	if resp.StatusCode != http.StatusOK {
 | 
						if resp.StatusCode != http.StatusOK {
 | 
				
			||||||
		t.Fatalf("unexpected response: %#v", resp)
 | 
							t.Fatalf("unexpected response: %#v", resp)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	var itemOut apiservertesting.Simple
 | 
						var itemOut genericapitesting.Simple
 | 
				
			||||||
	body, err := extractBody(resp, &itemOut)
 | 
						body, err := extractBody(resp, &itemOut)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Fatalf("unexpected error: %v", err)
 | 
							t.Fatalf("unexpected error: %v", err)
 | 
				
			||||||
@@ -1722,7 +1722,7 @@ func TestConnect(t *testing.T) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
func TestConnectResponderObject(t *testing.T) {
 | 
					func TestConnectResponderObject(t *testing.T) {
 | 
				
			||||||
	itemID := "theID"
 | 
						itemID := "theID"
 | 
				
			||||||
	simple := &apiservertesting.Simple{Other: "foo"}
 | 
						simple := &genericapitesting.Simple{Other: "foo"}
 | 
				
			||||||
	connectStorage := &ConnecterRESTStorage{}
 | 
						connectStorage := &ConnecterRESTStorage{}
 | 
				
			||||||
	connectStorage.handlerFunc = func() http.Handler {
 | 
						connectStorage.handlerFunc = func() http.Handler {
 | 
				
			||||||
		return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
 | 
							return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
 | 
				
			||||||
@@ -1806,7 +1806,7 @@ func TestConnectResponderError(t *testing.T) {
 | 
				
			|||||||
func TestConnectWithOptionsRouteParams(t *testing.T) {
 | 
					func TestConnectWithOptionsRouteParams(t *testing.T) {
 | 
				
			||||||
	connectStorage := &ConnecterRESTStorage{
 | 
						connectStorage := &ConnecterRESTStorage{
 | 
				
			||||||
		connectHandler:      &OutputConnect{},
 | 
							connectHandler:      &OutputConnect{},
 | 
				
			||||||
		emptyConnectOptions: &apiservertesting.SimpleGetOptions{},
 | 
							emptyConnectOptions: &genericapitesting.SimpleGetOptions{},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	storage := map[string]rest.Storage{
 | 
						storage := map[string]rest.Storage{
 | 
				
			||||||
		"simple":         &SimpleRESTStorage{},
 | 
							"simple":         &SimpleRESTStorage{},
 | 
				
			||||||
@@ -1837,7 +1837,7 @@ func TestConnectWithOptions(t *testing.T) {
 | 
				
			|||||||
		connectHandler: &OutputConnect{
 | 
							connectHandler: &OutputConnect{
 | 
				
			||||||
			response: responseText,
 | 
								response: responseText,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		emptyConnectOptions: &apiservertesting.SimpleGetOptions{},
 | 
							emptyConnectOptions: &genericapitesting.SimpleGetOptions{},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	storage := map[string]rest.Storage{
 | 
						storage := map[string]rest.Storage{
 | 
				
			||||||
		"simple":         &SimpleRESTStorage{},
 | 
							"simple":         &SimpleRESTStorage{},
 | 
				
			||||||
@@ -1869,7 +1869,7 @@ func TestConnectWithOptions(t *testing.T) {
 | 
				
			|||||||
	if connectStorage.receivedResponder == nil {
 | 
						if connectStorage.receivedResponder == nil {
 | 
				
			||||||
		t.Errorf("Unexpected responder")
 | 
							t.Errorf("Unexpected responder")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	opts, ok := connectStorage.receivedConnectOptions.(*apiservertesting.SimpleGetOptions)
 | 
						opts, ok := connectStorage.receivedConnectOptions.(*genericapitesting.SimpleGetOptions)
 | 
				
			||||||
	if !ok {
 | 
						if !ok {
 | 
				
			||||||
		t.Fatalf("Unexpected options type: %#v", connectStorage.receivedConnectOptions)
 | 
							t.Fatalf("Unexpected options type: %#v", connectStorage.receivedConnectOptions)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -1886,7 +1886,7 @@ func TestConnectWithOptionsAndPath(t *testing.T) {
 | 
				
			|||||||
		connectHandler: &OutputConnect{
 | 
							connectHandler: &OutputConnect{
 | 
				
			||||||
			response: responseText,
 | 
								response: responseText,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		emptyConnectOptions: &apiservertesting.SimpleGetOptions{},
 | 
							emptyConnectOptions: &genericapitesting.SimpleGetOptions{},
 | 
				
			||||||
		takesPath:           "atAPath",
 | 
							takesPath:           "atAPath",
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	storage := map[string]rest.Storage{
 | 
						storage := map[string]rest.Storage{
 | 
				
			||||||
@@ -1916,7 +1916,7 @@ func TestConnectWithOptionsAndPath(t *testing.T) {
 | 
				
			|||||||
	if string(body) != responseText {
 | 
						if string(body) != responseText {
 | 
				
			||||||
		t.Errorf("Unexpected response. Expected: %s. Actual: %s.", responseText, string(body))
 | 
							t.Errorf("Unexpected response. Expected: %s. Actual: %s.", responseText, string(body))
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	opts, ok := connectStorage.receivedConnectOptions.(*apiservertesting.SimpleGetOptions)
 | 
						opts, ok := connectStorage.receivedConnectOptions.(*genericapitesting.SimpleGetOptions)
 | 
				
			||||||
	if !ok {
 | 
						if !ok {
 | 
				
			||||||
		t.Fatalf("Unexpected options type: %#v", connectStorage.receivedConnectOptions)
 | 
							t.Fatalf("Unexpected options type: %#v", connectStorage.receivedConnectOptions)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -2174,7 +2174,7 @@ func TestDeleteMissing(t *testing.T) {
 | 
				
			|||||||
func TestPatch(t *testing.T) {
 | 
					func TestPatch(t *testing.T) {
 | 
				
			||||||
	storage := map[string]rest.Storage{}
 | 
						storage := map[string]rest.Storage{}
 | 
				
			||||||
	ID := "id"
 | 
						ID := "id"
 | 
				
			||||||
	item := &apiservertesting.Simple{
 | 
						item := &genericapitesting.Simple{
 | 
				
			||||||
		ObjectMeta: apiv1.ObjectMeta{
 | 
							ObjectMeta: apiv1.ObjectMeta{
 | 
				
			||||||
			Name:      ID,
 | 
								Name:      ID,
 | 
				
			||||||
			Namespace: "", // update should allow the client to send an empty namespace
 | 
								Namespace: "", // update should allow the client to send an empty namespace
 | 
				
			||||||
@@ -2213,7 +2213,7 @@ func TestPatch(t *testing.T) {
 | 
				
			|||||||
func TestPatchRequiresMatchingName(t *testing.T) {
 | 
					func TestPatchRequiresMatchingName(t *testing.T) {
 | 
				
			||||||
	storage := map[string]rest.Storage{}
 | 
						storage := map[string]rest.Storage{}
 | 
				
			||||||
	ID := "id"
 | 
						ID := "id"
 | 
				
			||||||
	item := &apiservertesting.Simple{
 | 
						item := &genericapitesting.Simple{
 | 
				
			||||||
		ObjectMeta: apiv1.ObjectMeta{
 | 
							ObjectMeta: apiv1.ObjectMeta{
 | 
				
			||||||
			Name:      ID,
 | 
								Name:      ID,
 | 
				
			||||||
			Namespace: "", // update should allow the client to send an empty namespace
 | 
								Namespace: "", // update should allow the client to send an empty namespace
 | 
				
			||||||
@@ -2254,7 +2254,7 @@ func TestUpdate(t *testing.T) {
 | 
				
			|||||||
	server := httptest.NewServer(handler)
 | 
						server := httptest.NewServer(handler)
 | 
				
			||||||
	defer server.Close()
 | 
						defer server.Close()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	item := &apiservertesting.Simple{
 | 
						item := &genericapitesting.Simple{
 | 
				
			||||||
		ObjectMeta: apiv1.ObjectMeta{
 | 
							ObjectMeta: apiv1.ObjectMeta{
 | 
				
			||||||
			Name:      ID,
 | 
								Name:      ID,
 | 
				
			||||||
			Namespace: "", // update should allow the client to send an empty namespace
 | 
								Namespace: "", // update should allow the client to send an empty namespace
 | 
				
			||||||
@@ -2291,7 +2291,7 @@ func TestUpdateInvokesAdmissionControl(t *testing.T) {
 | 
				
			|||||||
	server := httptest.NewServer(handler)
 | 
						server := httptest.NewServer(handler)
 | 
				
			||||||
	defer server.Close()
 | 
						defer server.Close()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	item := &apiservertesting.Simple{
 | 
						item := &genericapitesting.Simple{
 | 
				
			||||||
		ObjectMeta: apiv1.ObjectMeta{
 | 
							ObjectMeta: apiv1.ObjectMeta{
 | 
				
			||||||
			Name:      ID,
 | 
								Name:      ID,
 | 
				
			||||||
			Namespace: api.NamespaceDefault,
 | 
								Namespace: api.NamespaceDefault,
 | 
				
			||||||
@@ -2324,7 +2324,7 @@ func TestUpdateRequiresMatchingName(t *testing.T) {
 | 
				
			|||||||
	server := httptest.NewServer(handler)
 | 
						server := httptest.NewServer(handler)
 | 
				
			||||||
	defer server.Close()
 | 
						defer server.Close()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	item := &apiservertesting.Simple{
 | 
						item := &genericapitesting.Simple{
 | 
				
			||||||
		Other: "bar",
 | 
							Other: "bar",
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	body, err := runtime.Encode(testCodec, item)
 | 
						body, err := runtime.Encode(testCodec, item)
 | 
				
			||||||
@@ -2353,7 +2353,7 @@ func TestUpdateAllowsMissingNamespace(t *testing.T) {
 | 
				
			|||||||
	server := httptest.NewServer(handler)
 | 
						server := httptest.NewServer(handler)
 | 
				
			||||||
	defer server.Close()
 | 
						defer server.Close()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	item := &apiservertesting.Simple{
 | 
						item := &genericapitesting.Simple{
 | 
				
			||||||
		ObjectMeta: apiv1.ObjectMeta{
 | 
							ObjectMeta: apiv1.ObjectMeta{
 | 
				
			||||||
			Name: ID,
 | 
								Name: ID,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
@@ -2390,7 +2390,7 @@ func TestUpdateAllowsMismatchedNamespaceOnError(t *testing.T) {
 | 
				
			|||||||
	server := httptest.NewServer(handler)
 | 
						server := httptest.NewServer(handler)
 | 
				
			||||||
	defer server.Close()
 | 
						defer server.Close()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	item := &apiservertesting.Simple{
 | 
						item := &genericapitesting.Simple{
 | 
				
			||||||
		ObjectMeta: apiv1.ObjectMeta{
 | 
							ObjectMeta: apiv1.ObjectMeta{
 | 
				
			||||||
			Name:      ID,
 | 
								Name:      ID,
 | 
				
			||||||
			Namespace: "other", // does not match request
 | 
								Namespace: "other", // does not match request
 | 
				
			||||||
@@ -2427,7 +2427,7 @@ func TestUpdatePreventsMismatchedNamespace(t *testing.T) {
 | 
				
			|||||||
	server := httptest.NewServer(handler)
 | 
						server := httptest.NewServer(handler)
 | 
				
			||||||
	defer server.Close()
 | 
						defer server.Close()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	item := &apiservertesting.Simple{
 | 
						item := &genericapitesting.Simple{
 | 
				
			||||||
		ObjectMeta: apiv1.ObjectMeta{
 | 
							ObjectMeta: apiv1.ObjectMeta{
 | 
				
			||||||
			Name:      ID,
 | 
								Name:      ID,
 | 
				
			||||||
			Namespace: "other",
 | 
								Namespace: "other",
 | 
				
			||||||
@@ -2462,7 +2462,7 @@ func TestUpdateMissing(t *testing.T) {
 | 
				
			|||||||
	server := httptest.NewServer(handler)
 | 
						server := httptest.NewServer(handler)
 | 
				
			||||||
	defer server.Close()
 | 
						defer server.Close()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	item := &apiservertesting.Simple{
 | 
						item := &genericapitesting.Simple{
 | 
				
			||||||
		ObjectMeta: apiv1.ObjectMeta{
 | 
							ObjectMeta: apiv1.ObjectMeta{
 | 
				
			||||||
			Name:      ID,
 | 
								Name:      ID,
 | 
				
			||||||
			Namespace: api.NamespaceDefault,
 | 
								Namespace: api.NamespaceDefault,
 | 
				
			||||||
@@ -2497,7 +2497,7 @@ func TestCreateNotFound(t *testing.T) {
 | 
				
			|||||||
	defer server.Close()
 | 
						defer server.Close()
 | 
				
			||||||
	client := http.Client{}
 | 
						client := http.Client{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	simple := &apiservertesting.Simple{Other: "foo"}
 | 
						simple := &genericapitesting.Simple{Other: "foo"}
 | 
				
			||||||
	data, err := runtime.Encode(testCodec, simple)
 | 
						data, err := runtime.Encode(testCodec, simple)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Errorf("unexpected error: %v", err)
 | 
							t.Errorf("unexpected error: %v", err)
 | 
				
			||||||
@@ -2630,8 +2630,8 @@ func TestUpdateREST(t *testing.T) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
func TestParentResourceIsRequired(t *testing.T) {
 | 
					func TestParentResourceIsRequired(t *testing.T) {
 | 
				
			||||||
	storage := &SimpleTypedStorage{
 | 
						storage := &SimpleTypedStorage{
 | 
				
			||||||
		baseType: &apiservertesting.SimpleRoot{}, // a root scoped type
 | 
							baseType: &genericapitesting.SimpleRoot{}, // a root scoped type
 | 
				
			||||||
		item:     &apiservertesting.SimpleRoot{},
 | 
							item:     &genericapitesting.SimpleRoot{},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	group := &APIGroupVersion{
 | 
						group := &APIGroupVersion{
 | 
				
			||||||
		Storage: map[string]rest.Storage{
 | 
							Storage: map[string]rest.Storage{
 | 
				
			||||||
@@ -2660,8 +2660,8 @@ func TestParentResourceIsRequired(t *testing.T) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	storage = &SimpleTypedStorage{
 | 
						storage = &SimpleTypedStorage{
 | 
				
			||||||
		baseType: &apiservertesting.SimpleRoot{}, // a root scoped type
 | 
							baseType: &genericapitesting.SimpleRoot{}, // a root scoped type
 | 
				
			||||||
		item:     &apiservertesting.SimpleRoot{},
 | 
							item:     &genericapitesting.SimpleRoot{},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	group = &APIGroupVersion{
 | 
						group = &APIGroupVersion{
 | 
				
			||||||
		Storage: map[string]rest.Storage{
 | 
							Storage: map[string]rest.Storage{
 | 
				
			||||||
@@ -2719,7 +2719,7 @@ func TestCreateWithName(t *testing.T) {
 | 
				
			|||||||
	defer server.Close()
 | 
						defer server.Close()
 | 
				
			||||||
	client := http.Client{}
 | 
						client := http.Client{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	simple := &apiservertesting.Simple{Other: "foo"}
 | 
						simple := &genericapitesting.Simple{Other: "foo"}
 | 
				
			||||||
	data, err := runtime.Encode(testCodec, simple)
 | 
						data, err := runtime.Encode(testCodec, simple)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Errorf("unexpected error: %v", err)
 | 
							t.Errorf("unexpected error: %v", err)
 | 
				
			||||||
@@ -2808,7 +2808,7 @@ func TestCreate(t *testing.T) {
 | 
				
			|||||||
	defer server.Close()
 | 
						defer server.Close()
 | 
				
			||||||
	client := http.Client{}
 | 
						client := http.Client{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	simple := &apiservertesting.Simple{
 | 
						simple := &genericapitesting.Simple{
 | 
				
			||||||
		Other: "bar",
 | 
							Other: "bar",
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	data, err := runtime.Encode(testCodec, simple)
 | 
						data, err := runtime.Encode(testCodec, simple)
 | 
				
			||||||
@@ -2832,7 +2832,7 @@ func TestCreate(t *testing.T) {
 | 
				
			|||||||
		t.Errorf("unexpected error: %v", err)
 | 
							t.Errorf("unexpected error: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var itemOut apiservertesting.Simple
 | 
						var itemOut genericapitesting.Simple
 | 
				
			||||||
	body, err := extractBody(response, &itemOut)
 | 
						body, err := extractBody(response, &itemOut)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Errorf("unexpected error: %v %#v", err, response)
 | 
							t.Errorf("unexpected error: %v %#v", err, response)
 | 
				
			||||||
@@ -2869,7 +2869,7 @@ func TestCreateYAML(t *testing.T) {
 | 
				
			|||||||
	client := http.Client{}
 | 
						client := http.Client{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// yaml encoder
 | 
						// yaml encoder
 | 
				
			||||||
	simple := &apiservertesting.Simple{
 | 
						simple := &genericapitesting.Simple{
 | 
				
			||||||
		Other: "bar",
 | 
							Other: "bar",
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	info, ok := runtime.SerializerInfoForMediaType(api.Codecs.SupportedMediaTypes(), "application/yaml")
 | 
						info, ok := runtime.SerializerInfoForMediaType(api.Codecs.SupportedMediaTypes(), "application/yaml")
 | 
				
			||||||
@@ -2902,7 +2902,7 @@ func TestCreateYAML(t *testing.T) {
 | 
				
			|||||||
		t.Fatalf("unexpected error: %v", err)
 | 
							t.Fatalf("unexpected error: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var itemOut apiservertesting.Simple
 | 
						var itemOut genericapitesting.Simple
 | 
				
			||||||
	body, err := extractBodyDecoder(response, &itemOut, decoder)
 | 
						body, err := extractBodyDecoder(response, &itemOut, decoder)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Fatalf("unexpected error: %v %#v", err, response)
 | 
							t.Fatalf("unexpected error: %v %#v", err, response)
 | 
				
			||||||
@@ -2937,7 +2937,7 @@ func TestCreateInNamespace(t *testing.T) {
 | 
				
			|||||||
	defer server.Close()
 | 
						defer server.Close()
 | 
				
			||||||
	client := http.Client{}
 | 
						client := http.Client{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	simple := &apiservertesting.Simple{
 | 
						simple := &genericapitesting.Simple{
 | 
				
			||||||
		Other: "bar",
 | 
							Other: "bar",
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	data, err := runtime.Encode(testCodec, simple)
 | 
						data, err := runtime.Encode(testCodec, simple)
 | 
				
			||||||
@@ -2961,7 +2961,7 @@ func TestCreateInNamespace(t *testing.T) {
 | 
				
			|||||||
		t.Fatalf("unexpected error: %v", err)
 | 
							t.Fatalf("unexpected error: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var itemOut apiservertesting.Simple
 | 
						var itemOut genericapitesting.Simple
 | 
				
			||||||
	body, err := extractBody(response, &itemOut)
 | 
						body, err := extractBody(response, &itemOut)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Fatalf("unexpected error: %v\n%s", err, data)
 | 
							t.Fatalf("unexpected error: %v\n%s", err, data)
 | 
				
			||||||
@@ -2997,7 +2997,7 @@ func TestCreateInvokesAdmissionControl(t *testing.T) {
 | 
				
			|||||||
	defer server.Close()
 | 
						defer server.Close()
 | 
				
			||||||
	client := http.Client{}
 | 
						client := http.Client{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	simple := &apiservertesting.Simple{
 | 
						simple := &genericapitesting.Simple{
 | 
				
			||||||
		Other: "bar",
 | 
							Other: "bar",
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	data, err := runtime.Encode(testCodec, simple)
 | 
						data, err := runtime.Encode(testCodec, simple)
 | 
				
			||||||
@@ -3084,7 +3084,7 @@ func TestWriteJSONDecodeError(t *testing.T) {
 | 
				
			|||||||
	if status.Reason != metav1.StatusReasonUnknown {
 | 
						if status.Reason != metav1.StatusReasonUnknown {
 | 
				
			||||||
		t.Errorf("unexpected reason %#v", status)
 | 
							t.Errorf("unexpected reason %#v", status)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if !strings.Contains(status.Message, "no kind is registered for the type apiserver.UnregisteredAPIObject") {
 | 
						if !strings.Contains(status.Message, "no kind is registered for the type api.UnregisteredAPIObject") {
 | 
				
			||||||
		t.Errorf("unexpected message %#v", status)
 | 
							t.Errorf("unexpected message %#v", status)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -3129,7 +3129,7 @@ func TestCreateTimeout(t *testing.T) {
 | 
				
			|||||||
	server := httptest.NewServer(handler)
 | 
						server := httptest.NewServer(handler)
 | 
				
			||||||
	defer server.Close()
 | 
						defer server.Close()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	simple := &apiservertesting.Simple{Other: "foo"}
 | 
						simple := &genericapitesting.Simple{Other: "foo"}
 | 
				
			||||||
	data, err := runtime.Encode(testCodec, simple)
 | 
						data, err := runtime.Encode(testCodec, simple)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Errorf("unexpected error: %v", err)
 | 
							t.Errorf("unexpected error: %v", err)
 | 
				
			||||||
@@ -3146,7 +3146,7 @@ func TestCreateChecksAPIVersion(t *testing.T) {
 | 
				
			|||||||
	defer server.Close()
 | 
						defer server.Close()
 | 
				
			||||||
	client := http.Client{}
 | 
						client := http.Client{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	simple := &apiservertesting.Simple{}
 | 
						simple := &genericapitesting.Simple{}
 | 
				
			||||||
	//using newCodec and send the request to testVersion URL shall cause a discrepancy in apiVersion
 | 
						//using newCodec and send the request to testVersion URL shall cause a discrepancy in apiVersion
 | 
				
			||||||
	data, err := runtime.Encode(newCodec, simple)
 | 
						data, err := runtime.Encode(newCodec, simple)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
@@ -3177,7 +3177,7 @@ func TestCreateDefaultsAPIVersion(t *testing.T) {
 | 
				
			|||||||
	defer server.Close()
 | 
						defer server.Close()
 | 
				
			||||||
	client := http.Client{}
 | 
						client := http.Client{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	simple := &apiservertesting.Simple{}
 | 
						simple := &genericapitesting.Simple{}
 | 
				
			||||||
	data, err := runtime.Encode(codec, simple)
 | 
						data, err := runtime.Encode(codec, simple)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Errorf("unexpected error: %v", err)
 | 
							t.Errorf("unexpected error: %v", err)
 | 
				
			||||||
@@ -3212,7 +3212,7 @@ func TestUpdateChecksAPIVersion(t *testing.T) {
 | 
				
			|||||||
	defer server.Close()
 | 
						defer server.Close()
 | 
				
			||||||
	client := http.Client{}
 | 
						client := http.Client{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	simple := &apiservertesting.Simple{ObjectMeta: apiv1.ObjectMeta{Name: "bar"}}
 | 
						simple := &genericapitesting.Simple{ObjectMeta: apiv1.ObjectMeta{Name: "bar"}}
 | 
				
			||||||
	data, err := runtime.Encode(newCodec, simple)
 | 
						data, err := runtime.Encode(newCodec, simple)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Fatalf("unexpected error: %v", err)
 | 
							t.Fatalf("unexpected error: %v", err)
 | 
				
			||||||
@@ -3399,7 +3399,7 @@ func BenchmarkUpdateProtobuf(b *testing.B) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func newTestServer(handler http.Handler) *httptest.Server {
 | 
					func newTestServer(handler http.Handler) *httptest.Server {
 | 
				
			||||||
	handler = filters.WithRequestInfo(handler, newTestRequestInfoResolver(), requestContextMapper)
 | 
						handler = genericapifilters.WithRequestInfo(handler, newTestRequestInfoResolver(), requestContextMapper)
 | 
				
			||||||
	handler = api.WithRequestContext(handler, requestContextMapper)
 | 
						handler = api.WithRequestContext(handler, requestContextMapper)
 | 
				
			||||||
	return httptest.NewServer(handler)
 | 
						return httptest.NewServer(handler)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
 | 
				
			|||||||
limitations under the License.
 | 
					limitations under the License.
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
package apiserver
 | 
					package api
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"bytes"
 | 
						"bytes"
 | 
				
			||||||
@@ -25,9 +25,9 @@ import (
 | 
				
			|||||||
	"github.com/emicklei/go-restful"
 | 
						"github.com/emicklei/go-restful"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	metav1 "k8s.io/kubernetes/pkg/apis/meta/v1"
 | 
						metav1 "k8s.io/kubernetes/pkg/apis/meta/v1"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/apiserver/handlers"
 | 
						"k8s.io/kubernetes/pkg/genericapiserver/api/handlers"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/apiserver/handlers/negotiation"
 | 
						"k8s.io/kubernetes/pkg/genericapiserver/api/handlers/negotiation"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/apiserver/handlers/responsewriters"
 | 
						"k8s.io/kubernetes/pkg/genericapiserver/api/handlers/responsewriters"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/runtime"
 | 
						"k8s.io/kubernetes/pkg/runtime"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/runtime/schema"
 | 
						"k8s.io/kubernetes/pkg/runtime/schema"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
@@ -14,5 +14,5 @@ See the License for the specific language governing permissions and
 | 
				
			|||||||
limitations under the License.
 | 
					limitations under the License.
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Package apiserver contains the code that provides a rest.ful api service.
 | 
					// Package api contains the code that provides a rest.ful api service.
 | 
				
			||||||
package apiserver // import "k8s.io/kubernetes/pkg/apiserver"
 | 
					package api // import "k8s.io/kubernetes/pkg/genericapiserver/api"
 | 
				
			||||||
@@ -14,7 +14,6 @@ go_library(
 | 
				
			|||||||
        "audit.go",
 | 
					        "audit.go",
 | 
				
			||||||
        "authorization.go",
 | 
					        "authorization.go",
 | 
				
			||||||
        "doc.go",
 | 
					        "doc.go",
 | 
				
			||||||
        "errors.go",
 | 
					 | 
				
			||||||
        "impersonation.go",
 | 
					        "impersonation.go",
 | 
				
			||||||
        "requestinfo.go",
 | 
					        "requestinfo.go",
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
@@ -22,13 +21,13 @@ go_library(
 | 
				
			|||||||
    deps = [
 | 
					    deps = [
 | 
				
			||||||
        "//pkg/api:go_default_library",
 | 
					        "//pkg/api:go_default_library",
 | 
				
			||||||
        "//pkg/apis/authentication:go_default_library",
 | 
					        "//pkg/apis/authentication:go_default_library",
 | 
				
			||||||
        "//pkg/apiserver/request:go_default_library",
 | 
					 | 
				
			||||||
        "//pkg/auth/authorizer:go_default_library",
 | 
					        "//pkg/auth/authorizer:go_default_library",
 | 
				
			||||||
        "//pkg/auth/user:go_default_library",
 | 
					        "//pkg/auth/user:go_default_library",
 | 
				
			||||||
 | 
					        "//pkg/genericapiserver/api/handlers/responsewriters:go_default_library",
 | 
				
			||||||
 | 
					        "//pkg/genericapiserver/api/request:go_default_library",
 | 
				
			||||||
        "//pkg/httplog:go_default_library",
 | 
					        "//pkg/httplog:go_default_library",
 | 
				
			||||||
        "//pkg/serviceaccount:go_default_library",
 | 
					        "//pkg/serviceaccount:go_default_library",
 | 
				
			||||||
        "//pkg/util/net:go_default_library",
 | 
					        "//pkg/util/net:go_default_library",
 | 
				
			||||||
        "//pkg/util/runtime:go_default_library",
 | 
					 | 
				
			||||||
        "//vendor:github.com/golang/glog",
 | 
					        "//vendor:github.com/golang/glog",
 | 
				
			||||||
        "//vendor:github.com/pborman/uuid",
 | 
					        "//vendor:github.com/pborman/uuid",
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
@@ -48,9 +47,10 @@ go_test(
 | 
				
			|||||||
        "//pkg/api:go_default_library",
 | 
					        "//pkg/api:go_default_library",
 | 
				
			||||||
        "//pkg/apis/authentication:go_default_library",
 | 
					        "//pkg/apis/authentication:go_default_library",
 | 
				
			||||||
        "//pkg/apis/batch:go_default_library",
 | 
					        "//pkg/apis/batch:go_default_library",
 | 
				
			||||||
        "//pkg/apiserver/request:go_default_library",
 | 
					 | 
				
			||||||
        "//pkg/auth/authorizer:go_default_library",
 | 
					        "//pkg/auth/authorizer:go_default_library",
 | 
				
			||||||
        "//pkg/auth/user:go_default_library",
 | 
					        "//pkg/auth/user:go_default_library",
 | 
				
			||||||
 | 
					        "//pkg/genericapiserver/api/handlers/responsewriters:go_default_library",
 | 
				
			||||||
 | 
					        "//pkg/genericapiserver/api/request:go_default_library",
 | 
				
			||||||
        "//pkg/util/sets:go_default_library",
 | 
					        "//pkg/util/sets:go_default_library",
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
@@ -31,6 +31,7 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/api"
 | 
						"k8s.io/kubernetes/pkg/api"
 | 
				
			||||||
	authenticationapi "k8s.io/kubernetes/pkg/apis/authentication"
 | 
						authenticationapi "k8s.io/kubernetes/pkg/apis/authentication"
 | 
				
			||||||
 | 
						"k8s.io/kubernetes/pkg/genericapiserver/api/handlers/responsewriters"
 | 
				
			||||||
	utilnet "k8s.io/kubernetes/pkg/util/net"
 | 
						utilnet "k8s.io/kubernetes/pkg/util/net"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -95,12 +96,12 @@ func WithAudit(handler http.Handler, requestContextMapper api.RequestContextMapp
 | 
				
			|||||||
	return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
 | 
						return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
 | 
				
			||||||
		ctx, ok := requestContextMapper.Get(req)
 | 
							ctx, ok := requestContextMapper.Get(req)
 | 
				
			||||||
		if !ok {
 | 
							if !ok {
 | 
				
			||||||
			internalError(w, req, errors.New("no context found for request"))
 | 
								responsewriters.InternalError(w, req, errors.New("no context found for request"))
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		attribs, err := GetAuthorizerAttributes(ctx)
 | 
							attribs, err := GetAuthorizerAttributes(ctx)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			internalError(w, req, err)
 | 
								responsewriters.InternalError(w, req, err)
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -29,8 +29,8 @@ import (
 | 
				
			|||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/api"
 | 
						"k8s.io/kubernetes/pkg/api"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/apiserver/request"
 | 
					 | 
				
			||||||
	"k8s.io/kubernetes/pkg/auth/user"
 | 
						"k8s.io/kubernetes/pkg/auth/user"
 | 
				
			||||||
 | 
						"k8s.io/kubernetes/pkg/genericapiserver/api/request"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type simpleResponseWriter struct {
 | 
					type simpleResponseWriter struct {
 | 
				
			||||||
@@ -23,8 +23,9 @@ import (
 | 
				
			|||||||
	"github.com/golang/glog"
 | 
						"github.com/golang/glog"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/api"
 | 
						"k8s.io/kubernetes/pkg/api"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/apiserver/request"
 | 
					 | 
				
			||||||
	"k8s.io/kubernetes/pkg/auth/authorizer"
 | 
						"k8s.io/kubernetes/pkg/auth/authorizer"
 | 
				
			||||||
 | 
						"k8s.io/kubernetes/pkg/genericapiserver/api/handlers/responsewriters"
 | 
				
			||||||
 | 
						"k8s.io/kubernetes/pkg/genericapiserver/api/request"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// WithAuthorizationCheck passes all authorized requests on to handler, and returns a forbidden error otherwise.
 | 
					// WithAuthorizationCheck passes all authorized requests on to handler, and returns a forbidden error otherwise.
 | 
				
			||||||
@@ -36,13 +37,13 @@ func WithAuthorization(handler http.Handler, requestContextMapper api.RequestCon
 | 
				
			|||||||
	return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
 | 
						return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
 | 
				
			||||||
		ctx, ok := requestContextMapper.Get(req)
 | 
							ctx, ok := requestContextMapper.Get(req)
 | 
				
			||||||
		if !ok {
 | 
							if !ok {
 | 
				
			||||||
			internalError(w, req, errors.New("no context found for request"))
 | 
								responsewriters.InternalError(w, req, errors.New("no context found for request"))
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		attributes, err := GetAuthorizerAttributes(ctx)
 | 
							attributes, err := GetAuthorizerAttributes(ctx)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			internalError(w, req, err)
 | 
								responsewriters.InternalError(w, req, err)
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		authorized, reason, err := a.Authorize(attributes)
 | 
							authorized, reason, err := a.Authorize(attributes)
 | 
				
			||||||
@@ -51,12 +52,12 @@ func WithAuthorization(handler http.Handler, requestContextMapper api.RequestCon
 | 
				
			|||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			internalError(w, req, err)
 | 
								responsewriters.InternalError(w, req, err)
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		glog.V(4).Infof("Forbidden: %#v, Reason: %q", req.RequestURI, reason)
 | 
							glog.V(4).Infof("Forbidden: %#v, Reason: %q", req.RequestURI, reason)
 | 
				
			||||||
		forbidden(attributes, w, req, reason)
 | 
							responsewriters.Forbidden(attributes, w, req, reason)
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -26,6 +26,7 @@ import (
 | 
				
			|||||||
	"k8s.io/kubernetes/pkg/api"
 | 
						"k8s.io/kubernetes/pkg/api"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/apis/batch"
 | 
						"k8s.io/kubernetes/pkg/apis/batch"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/auth/authorizer"
 | 
						"k8s.io/kubernetes/pkg/auth/authorizer"
 | 
				
			||||||
 | 
						"k8s.io/kubernetes/pkg/genericapiserver/api/handlers/responsewriters"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestGetAuthorizerAttributes(t *testing.T) {
 | 
					func TestGetAuthorizerAttributes(t *testing.T) {
 | 
				
			||||||
@@ -110,7 +111,7 @@ func TestGetAuthorizerAttributes(t *testing.T) {
 | 
				
			|||||||
		var handler http.Handler = http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
 | 
							var handler http.Handler = http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
 | 
				
			||||||
			ctx, ok := mapper.Get(req)
 | 
								ctx, ok := mapper.Get(req)
 | 
				
			||||||
			if !ok {
 | 
								if !ok {
 | 
				
			||||||
				internalError(w, req, errors.New("no context found for request"))
 | 
									responsewriters.InternalError(w, req, errors.New("no context found for request"))
 | 
				
			||||||
				return
 | 
									return
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			attribs, err = GetAuthorizerAttributes(ctx)
 | 
								attribs, err = GetAuthorizerAttributes(ctx)
 | 
				
			||||||
@@ -16,4 +16,4 @@ limitations under the License.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// Package filters contains all the http handler chain filters which
 | 
					// Package filters contains all the http handler chain filters which
 | 
				
			||||||
// _are_ api related.
 | 
					// _are_ api related.
 | 
				
			||||||
package filters // import "k8s.io/kubernetes/pkg/apiserver/filters"
 | 
					package filters // import "k8s.io/kubernetes/pkg/genericapiserver/api/filters"
 | 
				
			||||||
@@ -28,6 +28,7 @@ import (
 | 
				
			|||||||
	authenticationapi "k8s.io/kubernetes/pkg/apis/authentication"
 | 
						authenticationapi "k8s.io/kubernetes/pkg/apis/authentication"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/auth/authorizer"
 | 
						"k8s.io/kubernetes/pkg/auth/authorizer"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/auth/user"
 | 
						"k8s.io/kubernetes/pkg/auth/user"
 | 
				
			||||||
 | 
						"k8s.io/kubernetes/pkg/genericapiserver/api/handlers/responsewriters"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/httplog"
 | 
						"k8s.io/kubernetes/pkg/httplog"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/serviceaccount"
 | 
						"k8s.io/kubernetes/pkg/serviceaccount"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
@@ -38,7 +39,7 @@ func WithImpersonation(handler http.Handler, requestContextMapper api.RequestCon
 | 
				
			|||||||
		impersonationRequests, err := buildImpersonationRequests(req.Header)
 | 
							impersonationRequests, err := buildImpersonationRequests(req.Header)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			glog.V(4).Infof("%v", err)
 | 
								glog.V(4).Infof("%v", err)
 | 
				
			||||||
			internalError(w, req, err)
 | 
								responsewriters.InternalError(w, req, err)
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if len(impersonationRequests) == 0 {
 | 
							if len(impersonationRequests) == 0 {
 | 
				
			||||||
@@ -48,12 +49,12 @@ func WithImpersonation(handler http.Handler, requestContextMapper api.RequestCon
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		ctx, exists := requestContextMapper.Get(req)
 | 
							ctx, exists := requestContextMapper.Get(req)
 | 
				
			||||||
		if !exists {
 | 
							if !exists {
 | 
				
			||||||
			internalError(w, req, errors.New("no context found for request"))
 | 
								responsewriters.InternalError(w, req, errors.New("no context found for request"))
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		requestor, exists := api.UserFrom(ctx)
 | 
							requestor, exists := api.UserFrom(ctx)
 | 
				
			||||||
		if !exists {
 | 
							if !exists {
 | 
				
			||||||
			internalError(w, req, errors.New("no user found for request"))
 | 
								responsewriters.InternalError(w, req, errors.New("no user found for request"))
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -102,14 +103,14 @@ func WithImpersonation(handler http.Handler, requestContextMapper api.RequestCon
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			default:
 | 
								default:
 | 
				
			||||||
				glog.V(4).Infof("unknown impersonation request type: %v", impersonationRequest)
 | 
									glog.V(4).Infof("unknown impersonation request type: %v", impersonationRequest)
 | 
				
			||||||
				forbidden(actingAsAttributes, w, req, fmt.Sprintf("unknown impersonation request type: %v", impersonationRequest))
 | 
									responsewriters.Forbidden(actingAsAttributes, w, req, fmt.Sprintf("unknown impersonation request type: %v", impersonationRequest))
 | 
				
			||||||
				return
 | 
									return
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			allowed, reason, err := a.Authorize(actingAsAttributes)
 | 
								allowed, reason, err := a.Authorize(actingAsAttributes)
 | 
				
			||||||
			if err != nil || !allowed {
 | 
								if err != nil || !allowed {
 | 
				
			||||||
				glog.V(4).Infof("Forbidden: %#v, Reason: %s, Error: %v", req.RequestURI, reason, err)
 | 
									glog.V(4).Infof("Forbidden: %#v, Reason: %s, Error: %v", req.RequestURI, reason, err)
 | 
				
			||||||
				forbidden(actingAsAttributes, w, req, reason)
 | 
									responsewriters.Forbidden(actingAsAttributes, w, req, reason)
 | 
				
			||||||
				return
 | 
									return
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@@ -22,7 +22,8 @@ import (
 | 
				
			|||||||
	"net/http"
 | 
						"net/http"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/api"
 | 
						"k8s.io/kubernetes/pkg/api"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/apiserver/request"
 | 
						"k8s.io/kubernetes/pkg/genericapiserver/api/handlers/responsewriters"
 | 
				
			||||||
 | 
						"k8s.io/kubernetes/pkg/genericapiserver/api/request"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// WithRequestInfo attaches a RequestInfo to the context.
 | 
					// WithRequestInfo attaches a RequestInfo to the context.
 | 
				
			||||||
@@ -30,13 +31,13 @@ func WithRequestInfo(handler http.Handler, resolver *request.RequestInfoFactory,
 | 
				
			|||||||
	return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
 | 
						return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
 | 
				
			||||||
		ctx, ok := requestContextMapper.Get(req)
 | 
							ctx, ok := requestContextMapper.Get(req)
 | 
				
			||||||
		if !ok {
 | 
							if !ok {
 | 
				
			||||||
			internalError(w, req, errors.New("no context found for request"))
 | 
								responsewriters.InternalError(w, req, errors.New("no context found for request"))
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		info, err := resolver.NewRequestInfo(req)
 | 
							info, err := resolver.NewRequestInfo(req)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			internalError(w, req, fmt.Errorf("failed to create RequestInfo: %v", err))
 | 
								responsewriters.InternalError(w, req, fmt.Errorf("failed to create RequestInfo: %v", err))
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -17,7 +17,7 @@ limitations under the License.
 | 
				
			|||||||
package filters
 | 
					package filters
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/apiserver/request"
 | 
						"k8s.io/kubernetes/pkg/genericapiserver/api/request"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/util/sets"
 | 
						"k8s.io/kubernetes/pkg/util/sets"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
 | 
				
			|||||||
limitations under the License.
 | 
					limitations under the License.
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
package apiserver
 | 
					package api
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
@@ -29,7 +29,7 @@ import (
 | 
				
			|||||||
	"k8s.io/kubernetes/pkg/api/meta"
 | 
						"k8s.io/kubernetes/pkg/api/meta"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/api/rest"
 | 
						"k8s.io/kubernetes/pkg/api/rest"
 | 
				
			||||||
	metav1 "k8s.io/kubernetes/pkg/apis/meta/v1"
 | 
						metav1 "k8s.io/kubernetes/pkg/apis/meta/v1"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/apiserver/handlers"
 | 
						"k8s.io/kubernetes/pkg/genericapiserver/api/handlers"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/runtime"
 | 
						"k8s.io/kubernetes/pkg/runtime"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/runtime/schema"
 | 
						"k8s.io/kubernetes/pkg/runtime/schema"
 | 
				
			||||||
	utilerrors "k8s.io/kubernetes/pkg/util/errors"
 | 
						utilerrors "k8s.io/kubernetes/pkg/util/errors"
 | 
				
			||||||
@@ -10,7 +10,7 @@ load(
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
go_test(
 | 
					go_test(
 | 
				
			||||||
    name = "go_default_test",
 | 
					    name = "go_default_test",
 | 
				
			||||||
    srcs = ["resthandler_test.go"],
 | 
					    srcs = ["rest_test.go"],
 | 
				
			||||||
    library = ":go_default_library",
 | 
					    library = ":go_default_library",
 | 
				
			||||||
    tags = ["automanaged"],
 | 
					    tags = ["automanaged"],
 | 
				
			||||||
    deps = [
 | 
					    deps = [
 | 
				
			||||||
@@ -36,7 +36,7 @@ go_library(
 | 
				
			|||||||
        "discovery.go",
 | 
					        "discovery.go",
 | 
				
			||||||
        "doc.go",
 | 
					        "doc.go",
 | 
				
			||||||
        "proxy.go",
 | 
					        "proxy.go",
 | 
				
			||||||
        "resthandler.go",
 | 
					        "rest.go",
 | 
				
			||||||
        "watch.go",
 | 
					        "watch.go",
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    tags = ["automanaged"],
 | 
					    tags = ["automanaged"],
 | 
				
			||||||
@@ -47,11 +47,11 @@ go_library(
 | 
				
			|||||||
        "//pkg/api/meta:go_default_library",
 | 
					        "//pkg/api/meta:go_default_library",
 | 
				
			||||||
        "//pkg/api/rest:go_default_library",
 | 
					        "//pkg/api/rest:go_default_library",
 | 
				
			||||||
        "//pkg/apis/meta/v1:go_default_library",
 | 
					        "//pkg/apis/meta/v1:go_default_library",
 | 
				
			||||||
        "//pkg/apiserver/handlers/negotiation:go_default_library",
 | 
					 | 
				
			||||||
        "//pkg/apiserver/handlers/responsewriters:go_default_library",
 | 
					 | 
				
			||||||
        "//pkg/apiserver/metrics:go_default_library",
 | 
					 | 
				
			||||||
        "//pkg/apiserver/request:go_default_library",
 | 
					 | 
				
			||||||
        "//pkg/fields:go_default_library",
 | 
					        "//pkg/fields:go_default_library",
 | 
				
			||||||
 | 
					        "//pkg/genericapiserver/api/handlers/negotiation:go_default_library",
 | 
				
			||||||
 | 
					        "//pkg/genericapiserver/api/handlers/responsewriters:go_default_library",
 | 
				
			||||||
 | 
					        "//pkg/genericapiserver/api/metrics:go_default_library",
 | 
				
			||||||
 | 
					        "//pkg/genericapiserver/api/request:go_default_library",
 | 
				
			||||||
        "//pkg/httplog:go_default_library",
 | 
					        "//pkg/httplog:go_default_library",
 | 
				
			||||||
        "//pkg/runtime:go_default_library",
 | 
					        "//pkg/runtime:go_default_library",
 | 
				
			||||||
        "//pkg/runtime/schema:go_default_library",
 | 
					        "//pkg/runtime/schema:go_default_library",
 | 
				
			||||||
@@ -20,7 +20,7 @@ import (
 | 
				
			|||||||
	"net/http"
 | 
						"net/http"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	metav1 "k8s.io/kubernetes/pkg/apis/meta/v1"
 | 
						metav1 "k8s.io/kubernetes/pkg/apis/meta/v1"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/apiserver/handlers/responsewriters"
 | 
						"k8s.io/kubernetes/pkg/genericapiserver/api/handlers/responsewriters"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/runtime"
 | 
						"k8s.io/kubernetes/pkg/runtime"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/runtime/schema"
 | 
						"k8s.io/kubernetes/pkg/runtime/schema"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -15,4 +15,4 @@ limitations under the License.
 | 
				
			|||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Package handlers contains HTTP handlers to implement the apiserver APIs.
 | 
					// Package handlers contains HTTP handlers to implement the apiserver APIs.
 | 
				
			||||||
package handlers // import "k8s.io/kubernetes/pkg/apiserver/handlers"
 | 
					package handlers // import "k8s.io/kubernetes/pkg/genericapiserver/api/handlers"
 | 
				
			||||||
@@ -15,4 +15,4 @@ limitations under the License.
 | 
				
			|||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Package negotation contains media type negotiation logic.
 | 
					// Package negotation contains media type negotiation logic.
 | 
				
			||||||
package negotiation // import "k8s.io/kubernetes/pkg/apiserver/handlers/negotiation"
 | 
					package negotiation // import "k8s.io/kubernetes/pkg/genericapiserver/api/handlers/negotiation"
 | 
				
			||||||
@@ -30,9 +30,9 @@ import (
 | 
				
			|||||||
	"k8s.io/kubernetes/pkg/api"
 | 
						"k8s.io/kubernetes/pkg/api"
 | 
				
			||||||
	apierrors "k8s.io/kubernetes/pkg/api/errors"
 | 
						apierrors "k8s.io/kubernetes/pkg/api/errors"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/api/rest"
 | 
						"k8s.io/kubernetes/pkg/api/rest"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/apiserver/handlers/responsewriters"
 | 
						"k8s.io/kubernetes/pkg/genericapiserver/api/handlers/responsewriters"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/apiserver/metrics"
 | 
						"k8s.io/kubernetes/pkg/genericapiserver/api/metrics"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/apiserver/request"
 | 
						"k8s.io/kubernetes/pkg/genericapiserver/api/request"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/httplog"
 | 
						"k8s.io/kubernetes/pkg/httplog"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/runtime"
 | 
						"k8s.io/kubernetes/pkg/runtime"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/runtime/schema"
 | 
						"k8s.io/kubernetes/pkg/runtime/schema"
 | 
				
			||||||
@@ -8,9 +8,32 @@ load(
 | 
				
			|||||||
    "go_test",
 | 
					    "go_test",
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					go_library(
 | 
				
			||||||
 | 
					    name = "go_default_library",
 | 
				
			||||||
 | 
					    srcs = [
 | 
				
			||||||
 | 
					        "doc.go",
 | 
				
			||||||
 | 
					        "errors.go",
 | 
				
			||||||
 | 
					        "status.go",
 | 
				
			||||||
 | 
					        "writers.go",
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    tags = ["automanaged"],
 | 
				
			||||||
 | 
					    deps = [
 | 
				
			||||||
 | 
					        "//pkg/api/rest:go_default_library",
 | 
				
			||||||
 | 
					        "//pkg/apis/meta/v1:go_default_library",
 | 
				
			||||||
 | 
					        "//pkg/auth/authorizer:go_default_library",
 | 
				
			||||||
 | 
					        "//pkg/genericapiserver/api/handlers/negotiation:go_default_library",
 | 
				
			||||||
 | 
					        "//pkg/runtime:go_default_library",
 | 
				
			||||||
 | 
					        "//pkg/runtime/schema:go_default_library",
 | 
				
			||||||
 | 
					        "//pkg/storage:go_default_library",
 | 
				
			||||||
 | 
					        "//pkg/util/flushwriter:go_default_library",
 | 
				
			||||||
 | 
					        "//pkg/util/runtime:go_default_library",
 | 
				
			||||||
 | 
					        "//pkg/util/wsstream:go_default_library",
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
go_test(
 | 
					go_test(
 | 
				
			||||||
    name = "go_default_test",
 | 
					    name = "go_default_test",
 | 
				
			||||||
    srcs = ["errors_test.go"],
 | 
					    srcs = ["status_test.go"],
 | 
				
			||||||
    library = ":go_default_library",
 | 
					    library = ":go_default_library",
 | 
				
			||||||
    tags = ["automanaged"],
 | 
					    tags = ["automanaged"],
 | 
				
			||||||
    deps = [
 | 
					    deps = [
 | 
				
			||||||
@@ -20,17 +43,3 @@ go_test(
 | 
				
			|||||||
        "//pkg/runtime/schema:go_default_library",
 | 
					        "//pkg/runtime/schema:go_default_library",
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					 | 
				
			||||||
go_library(
 | 
					 | 
				
			||||||
    name = "go_default_library",
 | 
					 | 
				
			||||||
    srcs = [
 | 
					 | 
				
			||||||
        "doc.go",
 | 
					 | 
				
			||||||
        "errors.go",
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
    tags = ["automanaged"],
 | 
					 | 
				
			||||||
    deps = [
 | 
					 | 
				
			||||||
        "//pkg/apis/meta/v1:go_default_library",
 | 
					 | 
				
			||||||
        "//pkg/storage:go_default_library",
 | 
					 | 
				
			||||||
        "//pkg/util/runtime:go_default_library",
 | 
					 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
@@ -15,4 +15,4 @@ limitations under the License.
 | 
				
			|||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Package responsewriters containers helpers to write responses in HTTP handlers.
 | 
					// Package responsewriters containers helpers to write responses in HTTP handlers.
 | 
				
			||||||
package responsewriters // import "k8s.io/kubernetes/pkg/apiserver/handlers/responsewriters"
 | 
					package responsewriters // import "k8s.io/kubernetes/pkg/genericapiserver/api/handlers/responsewriters"
 | 
				
			||||||
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
 | 
				
			|||||||
limitations under the License.
 | 
					limitations under the License.
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
package filters
 | 
					package responsewriters
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
@@ -24,16 +24,16 @@ import (
 | 
				
			|||||||
	"k8s.io/kubernetes/pkg/util/runtime"
 | 
						"k8s.io/kubernetes/pkg/util/runtime"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// badGatewayError renders a simple bad gateway error.
 | 
					// BadGatewayError renders a simple bad gateway error.
 | 
				
			||||||
func badGatewayError(w http.ResponseWriter, req *http.Request) {
 | 
					func BadGatewayError(w http.ResponseWriter, req *http.Request) {
 | 
				
			||||||
	w.Header().Set("Content-Type", "text/plain")
 | 
						w.Header().Set("Content-Type", "text/plain")
 | 
				
			||||||
	w.Header().Set("X-Content-Type-Options", "nosniff")
 | 
						w.Header().Set("X-Content-Type-Options", "nosniff")
 | 
				
			||||||
	w.WriteHeader(http.StatusBadGateway)
 | 
						w.WriteHeader(http.StatusBadGateway)
 | 
				
			||||||
	fmt.Fprintf(w, "Bad Gateway: %#v", req.RequestURI)
 | 
						fmt.Fprintf(w, "Bad Gateway: %#v", req.RequestURI)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// forbidden renders a simple forbidden error
 | 
					// Forbidden renders a simple forbidden error
 | 
				
			||||||
func forbidden(attributes authorizer.Attributes, w http.ResponseWriter, req *http.Request, reason string) {
 | 
					func Forbidden(attributes authorizer.Attributes, w http.ResponseWriter, req *http.Request, reason string) {
 | 
				
			||||||
	msg := forbiddenMessage(attributes)
 | 
						msg := forbiddenMessage(attributes)
 | 
				
			||||||
	w.Header().Set("Content-Type", "text/plain")
 | 
						w.Header().Set("Content-Type", "text/plain")
 | 
				
			||||||
	w.Header().Set("X-Content-Type-Options", "nosniff")
 | 
						w.Header().Set("X-Content-Type-Options", "nosniff")
 | 
				
			||||||
@@ -59,11 +59,17 @@ func forbiddenMessage(attributes authorizer.Attributes) string {
 | 
				
			|||||||
	return fmt.Sprintf("User %q cannot %s %s at the cluster scope.", username, attributes.GetVerb(), resource)
 | 
						return fmt.Sprintf("User %q cannot %s %s at the cluster scope.", username, attributes.GetVerb(), resource)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// internalError renders a simple internal error
 | 
					// InternalError renders a simple internal error
 | 
				
			||||||
func internalError(w http.ResponseWriter, req *http.Request, err error) {
 | 
					func InternalError(w http.ResponseWriter, req *http.Request, err error) {
 | 
				
			||||||
	w.Header().Set("Content-Type", "text/plain")
 | 
						w.Header().Set("Content-Type", "text/plain")
 | 
				
			||||||
	w.Header().Set("X-Content-Type-Options", "nosniff")
 | 
						w.Header().Set("X-Content-Type-Options", "nosniff")
 | 
				
			||||||
	w.WriteHeader(http.StatusInternalServerError)
 | 
						w.WriteHeader(http.StatusInternalServerError)
 | 
				
			||||||
	fmt.Fprintf(w, "Internal Server Error: %#v: %v", req.RequestURI, err)
 | 
						fmt.Fprintf(w, "Internal Server Error: %#v: %v", req.RequestURI, err)
 | 
				
			||||||
	runtime.HandleError(err)
 | 
						runtime.HandleError(err)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// NotFound renders a simple not found error.
 | 
				
			||||||
 | 
					func NotFound(w http.ResponseWriter, req *http.Request) {
 | 
				
			||||||
 | 
						w.WriteHeader(http.StatusNotFound)
 | 
				
			||||||
 | 
						fmt.Fprintf(w, "Not Found: %#v", req.RequestURI)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
 | 
				
			|||||||
limitations under the License.
 | 
					limitations under the License.
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
package errors
 | 
					package responsewriters
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
@@ -30,8 +30,8 @@ type statusError interface {
 | 
				
			|||||||
	Status() metav1.Status
 | 
						Status() metav1.Status
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// ErrToAPIStatus converts an error to an metav1.Status object.
 | 
					// apiStatus converts an error to an metav1.Status object.
 | 
				
			||||||
func ErrToAPIStatus(err error) *metav1.Status {
 | 
					func apiStatus(err error) *metav1.Status {
 | 
				
			||||||
	switch t := err.(type) {
 | 
						switch t := err.(type) {
 | 
				
			||||||
	case statusError:
 | 
						case statusError:
 | 
				
			||||||
		status := t.Status()
 | 
							status := t.Status()
 | 
				
			||||||
@@ -68,22 +68,3 @@ func ErrToAPIStatus(err error) *metav1.Status {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					 | 
				
			||||||
// errAPIPrefixNotFound indicates that a RequestInfo resolution failed because the request isn't under
 | 
					 | 
				
			||||||
// any known API prefixes
 | 
					 | 
				
			||||||
type errAPIPrefixNotFound struct {
 | 
					 | 
				
			||||||
	SpecifiedPrefix string
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (e *errAPIPrefixNotFound) Error() string {
 | 
					 | 
				
			||||||
	return fmt.Sprintf("no valid API prefix found matching %v", e.SpecifiedPrefix)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func IsAPIPrefixNotFound(err error) bool {
 | 
					 | 
				
			||||||
	if err == nil {
 | 
					 | 
				
			||||||
		return false
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	_, ok := err.(*errAPIPrefixNotFound)
 | 
					 | 
				
			||||||
	return ok
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
 | 
				
			|||||||
limitations under the License.
 | 
					limitations under the License.
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
package errors
 | 
					package responsewriters
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	stderrs "errors"
 | 
						stderrs "errors"
 | 
				
			||||||
@@ -28,7 +28,7 @@ import (
 | 
				
			|||||||
	"k8s.io/kubernetes/pkg/runtime/schema"
 | 
						"k8s.io/kubernetes/pkg/runtime/schema"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestErrorsToAPIStatus(t *testing.T) {
 | 
					func TestAPIStatus(t *testing.T) {
 | 
				
			||||||
	cases := map[error]metav1.Status{
 | 
						cases := map[error]metav1.Status{
 | 
				
			||||||
		errors.NewNotFound(schema.GroupResource{Group: "legacy.kubernetes.io", Resource: "foos"}, "bar"): {
 | 
							errors.NewNotFound(schema.GroupResource{Group: "legacy.kubernetes.io", Resource: "foos"}, "bar"): {
 | 
				
			||||||
			Status:  metav1.StatusFailure,
 | 
								Status:  metav1.StatusFailure,
 | 
				
			||||||
@@ -65,7 +65,7 @@ func TestErrorsToAPIStatus(t *testing.T) {
 | 
				
			|||||||
		},
 | 
							},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	for k, v := range cases {
 | 
						for k, v := range cases {
 | 
				
			||||||
		actual := ErrToAPIStatus(k)
 | 
							actual := apiStatus(k)
 | 
				
			||||||
		if !reflect.DeepEqual(actual, &v) {
 | 
							if !reflect.DeepEqual(actual, &v) {
 | 
				
			||||||
			t.Errorf("%s: Expected %#v, Got %#v", k, v, actual)
 | 
								t.Errorf("%s: Expected %#v, Got %#v", k, v, actual)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@@ -24,8 +24,7 @@ import (
 | 
				
			|||||||
	"strconv"
 | 
						"strconv"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/api/rest"
 | 
						"k8s.io/kubernetes/pkg/api/rest"
 | 
				
			||||||
	handlererrors "k8s.io/kubernetes/pkg/apiserver/handlers/errors"
 | 
						"k8s.io/kubernetes/pkg/genericapiserver/api/handlers/negotiation"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/apiserver/handlers/negotiation"
 | 
					 | 
				
			||||||
	"k8s.io/kubernetes/pkg/runtime"
 | 
						"k8s.io/kubernetes/pkg/runtime"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/runtime/schema"
 | 
						"k8s.io/kubernetes/pkg/runtime/schema"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/util/flushwriter"
 | 
						"k8s.io/kubernetes/pkg/util/flushwriter"
 | 
				
			||||||
@@ -81,7 +80,7 @@ func WriteObject(statusCode int, gv schema.GroupVersion, s runtime.NegotiatedSer
 | 
				
			|||||||
func WriteObjectNegotiated(s runtime.NegotiatedSerializer, gv schema.GroupVersion, w http.ResponseWriter, req *http.Request, statusCode int, object runtime.Object) {
 | 
					func WriteObjectNegotiated(s runtime.NegotiatedSerializer, gv schema.GroupVersion, w http.ResponseWriter, req *http.Request, statusCode int, object runtime.Object) {
 | 
				
			||||||
	serializer, err := negotiation.NegotiateOutputSerializer(req, s)
 | 
						serializer, err := negotiation.NegotiateOutputSerializer(req, s)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		status := handlererrors.ErrToAPIStatus(err)
 | 
							status := apiStatus(err)
 | 
				
			||||||
		WriteRawJSON(int(status.Code), status, w)
 | 
							WriteRawJSON(int(status.Code), status, w)
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -97,7 +96,7 @@ func WriteObjectNegotiated(s runtime.NegotiatedSerializer, gv schema.GroupVersio
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// ErrorNegotiated renders an error to the response. Returns the HTTP status code of the error.
 | 
					// ErrorNegotiated renders an error to the response. Returns the HTTP status code of the error.
 | 
				
			||||||
func ErrorNegotiated(err error, s runtime.NegotiatedSerializer, gv schema.GroupVersion, w http.ResponseWriter, req *http.Request) int {
 | 
					func ErrorNegotiated(err error, s runtime.NegotiatedSerializer, gv schema.GroupVersion, w http.ResponseWriter, req *http.Request) int {
 | 
				
			||||||
	status := handlererrors.ErrToAPIStatus(err)
 | 
						status := apiStatus(err)
 | 
				
			||||||
	code := int(status.Code)
 | 
						code := int(status.Code)
 | 
				
			||||||
	// when writing an error, check to see if the status indicates a retry after period
 | 
						// when writing an error, check to see if the status indicates a retry after period
 | 
				
			||||||
	if status.Details != nil && status.Details.RetryAfterSeconds > 0 {
 | 
						if status.Details != nil && status.Details.RetryAfterSeconds > 0 {
 | 
				
			||||||
@@ -112,7 +111,7 @@ func ErrorNegotiated(err error, s runtime.NegotiatedSerializer, gv schema.GroupV
 | 
				
			|||||||
// Returns the HTTP status code of the error.
 | 
					// Returns the HTTP status code of the error.
 | 
				
			||||||
func errorJSONFatal(err error, codec runtime.Encoder, w http.ResponseWriter) int {
 | 
					func errorJSONFatal(err error, codec runtime.Encoder, w http.ResponseWriter) int {
 | 
				
			||||||
	utilruntime.HandleError(fmt.Errorf("apiserver was unable to write a JSON response: %v", err))
 | 
						utilruntime.HandleError(fmt.Errorf("apiserver was unable to write a JSON response: %v", err))
 | 
				
			||||||
	status := handlererrors.ErrToAPIStatus(err)
 | 
						status := apiStatus(err)
 | 
				
			||||||
	code := int(status.Code)
 | 
						code := int(status.Code)
 | 
				
			||||||
	output, err := runtime.Encode(codec, status)
 | 
						output, err := runtime.Encode(codec, status)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
@@ -137,16 +136,3 @@ func WriteRawJSON(statusCode int, object interface{}, w http.ResponseWriter) {
 | 
				
			|||||||
	w.WriteHeader(statusCode)
 | 
						w.WriteHeader(statusCode)
 | 
				
			||||||
	w.Write(output)
 | 
						w.Write(output)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					 | 
				
			||||||
// NotFound renders a simple not found error.
 | 
					 | 
				
			||||||
func NotFound(w http.ResponseWriter, req *http.Request) {
 | 
					 | 
				
			||||||
	w.WriteHeader(http.StatusNotFound)
 | 
					 | 
				
			||||||
	fmt.Fprintf(w, "Not Found: %#v", req.RequestURI)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// InternalError renders a simple internal error
 | 
					 | 
				
			||||||
func InternalError(w http.ResponseWriter, req *http.Request, err error) {
 | 
					 | 
				
			||||||
	w.WriteHeader(http.StatusInternalServerError)
 | 
					 | 
				
			||||||
	fmt.Fprintf(w, "Internal Server Error: %#v", req.RequestURI)
 | 
					 | 
				
			||||||
	utilruntime.HandleError(err)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -33,9 +33,9 @@ import (
 | 
				
			|||||||
	"k8s.io/kubernetes/pkg/api/meta"
 | 
						"k8s.io/kubernetes/pkg/api/meta"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/api/rest"
 | 
						"k8s.io/kubernetes/pkg/api/rest"
 | 
				
			||||||
	metav1 "k8s.io/kubernetes/pkg/apis/meta/v1"
 | 
						metav1 "k8s.io/kubernetes/pkg/apis/meta/v1"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/apiserver/handlers/negotiation"
 | 
					 | 
				
			||||||
	"k8s.io/kubernetes/pkg/apiserver/handlers/responsewriters"
 | 
					 | 
				
			||||||
	"k8s.io/kubernetes/pkg/fields"
 | 
						"k8s.io/kubernetes/pkg/fields"
 | 
				
			||||||
 | 
						"k8s.io/kubernetes/pkg/genericapiserver/api/handlers/negotiation"
 | 
				
			||||||
 | 
						"k8s.io/kubernetes/pkg/genericapiserver/api/handlers/responsewriters"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/runtime"
 | 
						"k8s.io/kubernetes/pkg/runtime"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/runtime/schema"
 | 
						"k8s.io/kubernetes/pkg/runtime/schema"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/util"
 | 
						"k8s.io/kubernetes/pkg/util"
 | 
				
			||||||
@@ -24,7 +24,7 @@ import (
 | 
				
			|||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/api/errors"
 | 
						"k8s.io/kubernetes/pkg/api/errors"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/apiserver/handlers/negotiation"
 | 
						"k8s.io/kubernetes/pkg/genericapiserver/api/handlers/negotiation"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/httplog"
 | 
						"k8s.io/kubernetes/pkg/httplog"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/runtime"
 | 
						"k8s.io/kubernetes/pkg/runtime"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/runtime/serializer/streaming"
 | 
						"k8s.io/kubernetes/pkg/runtime/serializer/streaming"
 | 
				
			||||||
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
 | 
				
			|||||||
limitations under the License.
 | 
					limitations under the License.
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
package apiserver
 | 
					package api
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"bytes"
 | 
						"bytes"
 | 
				
			||||||
@@ -33,10 +33,10 @@ import (
 | 
				
			|||||||
	"k8s.io/kubernetes/pkg/api/rest"
 | 
						"k8s.io/kubernetes/pkg/api/rest"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/apis/extensions"
 | 
						"k8s.io/kubernetes/pkg/apis/extensions"
 | 
				
			||||||
	metav1 "k8s.io/kubernetes/pkg/apis/meta/v1"
 | 
						metav1 "k8s.io/kubernetes/pkg/apis/meta/v1"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/apiserver/handlers"
 | 
					 | 
				
			||||||
	"k8s.io/kubernetes/pkg/apiserver/handlers/negotiation"
 | 
					 | 
				
			||||||
	"k8s.io/kubernetes/pkg/apiserver/metrics"
 | 
					 | 
				
			||||||
	"k8s.io/kubernetes/pkg/conversion"
 | 
						"k8s.io/kubernetes/pkg/conversion"
 | 
				
			||||||
 | 
						"k8s.io/kubernetes/pkg/genericapiserver/api/handlers"
 | 
				
			||||||
 | 
						"k8s.io/kubernetes/pkg/genericapiserver/api/handlers/negotiation"
 | 
				
			||||||
 | 
						"k8s.io/kubernetes/pkg/genericapiserver/api/metrics"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/runtime"
 | 
						"k8s.io/kubernetes/pkg/runtime"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/runtime/schema"
 | 
						"k8s.io/kubernetes/pkg/runtime/schema"
 | 
				
			||||||
	utilstrings "k8s.io/kubernetes/pkg/util/strings"
 | 
						utilstrings "k8s.io/kubernetes/pkg/util/strings"
 | 
				
			||||||
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
 | 
				
			|||||||
limitations under the License.
 | 
					limitations under the License.
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
package apiserver
 | 
					package api
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"bytes"
 | 
						"bytes"
 | 
				
			||||||
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
 | 
				
			|||||||
limitations under the License.
 | 
					limitations under the License.
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
package apiserver
 | 
					package api
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"bytes"
 | 
						"bytes"
 | 
				
			||||||
@@ -17,4 +17,4 @@ limitations under the License.
 | 
				
			|||||||
// Package request contains everything around extracting info from
 | 
					// Package request contains everything around extracting info from
 | 
				
			||||||
// a http request object.
 | 
					// a http request object.
 | 
				
			||||||
// TODO: this package is temporary. Handlers must move into pkg/apiserver/handlers to avoid dependency cycle
 | 
					// TODO: this package is temporary. Handlers must move into pkg/apiserver/handlers to avoid dependency cycle
 | 
				
			||||||
package request // import "k8s.io/kubernetes/pkg/apiserver/request"
 | 
					package request // import "k8s.io/kubernetes/pkg/genericapiserver/api/request"
 | 
				
			||||||
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
 | 
				
			|||||||
limitations under the License.
 | 
					limitations under the License.
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
package apiserver
 | 
					package api
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"encoding/json"
 | 
						"encoding/json"
 | 
				
			||||||
@@ -34,9 +34,9 @@ import (
 | 
				
			|||||||
	"k8s.io/kubernetes/pkg/api/rest"
 | 
						"k8s.io/kubernetes/pkg/api/rest"
 | 
				
			||||||
	apiv1 "k8s.io/kubernetes/pkg/api/v1"
 | 
						apiv1 "k8s.io/kubernetes/pkg/api/v1"
 | 
				
			||||||
	metav1 "k8s.io/kubernetes/pkg/apis/meta/v1"
 | 
						metav1 "k8s.io/kubernetes/pkg/apis/meta/v1"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/apiserver/handlers"
 | 
					 | 
				
			||||||
	apiservertesting "k8s.io/kubernetes/pkg/apiserver/testing"
 | 
					 | 
				
			||||||
	"k8s.io/kubernetes/pkg/fields"
 | 
						"k8s.io/kubernetes/pkg/fields"
 | 
				
			||||||
 | 
						"k8s.io/kubernetes/pkg/genericapiserver/api/handlers"
 | 
				
			||||||
 | 
						apitesting "k8s.io/kubernetes/pkg/genericapiserver/api/testing"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/labels"
 | 
						"k8s.io/kubernetes/pkg/labels"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/runtime"
 | 
						"k8s.io/kubernetes/pkg/runtime"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/runtime/serializer/streaming"
 | 
						"k8s.io/kubernetes/pkg/runtime/serializer/streaming"
 | 
				
			||||||
@@ -69,9 +69,9 @@ var watchTestTable = []struct {
 | 
				
			|||||||
	t   watch.EventType
 | 
						t   watch.EventType
 | 
				
			||||||
	obj runtime.Object
 | 
						obj runtime.Object
 | 
				
			||||||
}{
 | 
					}{
 | 
				
			||||||
	{watch.Added, &apiservertesting.Simple{ObjectMeta: apiv1.ObjectMeta{Name: "foo"}}},
 | 
						{watch.Added, &apitesting.Simple{ObjectMeta: apiv1.ObjectMeta{Name: "foo"}}},
 | 
				
			||||||
	{watch.Modified, &apiservertesting.Simple{ObjectMeta: apiv1.ObjectMeta{Name: "bar"}}},
 | 
						{watch.Modified, &apitesting.Simple{ObjectMeta: apiv1.ObjectMeta{Name: "bar"}}},
 | 
				
			||||||
	{watch.Deleted, &apiservertesting.Simple{ObjectMeta: apiv1.ObjectMeta{Name: "bar"}}},
 | 
						{watch.Deleted, &apitesting.Simple{ObjectMeta: apiv1.ObjectMeta{Name: "bar"}}},
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var podWatchTestTable = []struct {
 | 
					var podWatchTestTable = []struct {
 | 
				
			||||||
@@ -603,7 +603,7 @@ func TestWatchHTTPTimeout(t *testing.T) {
 | 
				
			|||||||
	req, _ := http.NewRequest("GET", dest.String(), nil)
 | 
						req, _ := http.NewRequest("GET", dest.String(), nil)
 | 
				
			||||||
	client := http.Client{}
 | 
						client := http.Client{}
 | 
				
			||||||
	resp, err := client.Do(req)
 | 
						resp, err := client.Do(req)
 | 
				
			||||||
	watcher.Add(&apiservertesting.Simple{TypeMeta: metav1.TypeMeta{APIVersion: newGroupVersion.String()}})
 | 
						watcher.Add(&apitesting.Simple{TypeMeta: metav1.TypeMeta{APIVersion: newGroupVersion.String()}})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Make sure we can actually watch an endpoint
 | 
						// Make sure we can actually watch an endpoint
 | 
				
			||||||
	decoder := json.NewDecoder(resp.Body)
 | 
						decoder := json.NewDecoder(resp.Body)
 | 
				
			||||||
@@ -39,15 +39,15 @@ import (
 | 
				
			|||||||
	"k8s.io/kubernetes/pkg/admission"
 | 
						"k8s.io/kubernetes/pkg/admission"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/api"
 | 
						"k8s.io/kubernetes/pkg/api"
 | 
				
			||||||
	metav1 "k8s.io/kubernetes/pkg/apis/meta/v1"
 | 
						metav1 "k8s.io/kubernetes/pkg/apis/meta/v1"
 | 
				
			||||||
	apiserverfilters "k8s.io/kubernetes/pkg/apiserver/filters"
 | 
					 | 
				
			||||||
	apiserveropenapi "k8s.io/kubernetes/pkg/apiserver/openapi"
 | 
					 | 
				
			||||||
	apiserverrequest "k8s.io/kubernetes/pkg/apiserver/request"
 | 
					 | 
				
			||||||
	"k8s.io/kubernetes/pkg/auth/authenticator"
 | 
						"k8s.io/kubernetes/pkg/auth/authenticator"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/auth/authorizer"
 | 
						"k8s.io/kubernetes/pkg/auth/authorizer"
 | 
				
			||||||
	authorizerunion "k8s.io/kubernetes/pkg/auth/authorizer/union"
 | 
						authorizerunion "k8s.io/kubernetes/pkg/auth/authorizer/union"
 | 
				
			||||||
	authhandlers "k8s.io/kubernetes/pkg/auth/handlers"
 | 
						authhandlers "k8s.io/kubernetes/pkg/auth/handlers"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/auth/user"
 | 
						"k8s.io/kubernetes/pkg/auth/user"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/client/restclient"
 | 
						"k8s.io/kubernetes/pkg/client/restclient"
 | 
				
			||||||
 | 
						genericapifilters "k8s.io/kubernetes/pkg/genericapiserver/api/filters"
 | 
				
			||||||
 | 
						apiopenapi "k8s.io/kubernetes/pkg/genericapiserver/api/openapi"
 | 
				
			||||||
 | 
						apirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request"
 | 
				
			||||||
	genericauthenticator "k8s.io/kubernetes/pkg/genericapiserver/authenticator"
 | 
						genericauthenticator "k8s.io/kubernetes/pkg/genericapiserver/authenticator"
 | 
				
			||||||
	genericauthorizer "k8s.io/kubernetes/pkg/genericapiserver/authorizer"
 | 
						genericauthorizer "k8s.io/kubernetes/pkg/genericapiserver/authorizer"
 | 
				
			||||||
	genericfilters "k8s.io/kubernetes/pkg/genericapiserver/filters"
 | 
						genericfilters "k8s.io/kubernetes/pkg/genericapiserver/filters"
 | 
				
			||||||
@@ -229,7 +229,7 @@ func DefaultOpenAPIConfig(definitions *openapicommon.OpenAPIDefinitions) *openap
 | 
				
			|||||||
				Description: "Default Response.",
 | 
									Description: "Default Response.",
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		GetOperationIDAndTags: apiserveropenapi.GetOperationIDAndTags,
 | 
							GetOperationIDAndTags: apiopenapi.GetOperationIDAndTags,
 | 
				
			||||||
		Definitions:           definitions,
 | 
							Definitions:           definitions,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -562,16 +562,16 @@ func DefaultBuildHandlerChain(apiHandler http.Handler, c *Config) (secure, insec
 | 
				
			|||||||
		handler = genericfilters.WithPanicRecovery(handler, c.RequestContextMapper)
 | 
							handler = genericfilters.WithPanicRecovery(handler, c.RequestContextMapper)
 | 
				
			||||||
		handler = genericfilters.WithTimeoutForNonLongRunningRequests(handler, c.RequestContextMapper, c.LongRunningFunc)
 | 
							handler = genericfilters.WithTimeoutForNonLongRunningRequests(handler, c.RequestContextMapper, c.LongRunningFunc)
 | 
				
			||||||
		handler = genericfilters.WithMaxInFlightLimit(handler, c.MaxRequestsInFlight, c.MaxMutatingRequestsInFlight, c.RequestContextMapper, c.LongRunningFunc)
 | 
							handler = genericfilters.WithMaxInFlightLimit(handler, c.MaxRequestsInFlight, c.MaxMutatingRequestsInFlight, c.RequestContextMapper, c.LongRunningFunc)
 | 
				
			||||||
		handler = apiserverfilters.WithRequestInfo(handler, NewRequestInfoResolver(c), c.RequestContextMapper)
 | 
							handler = genericapifilters.WithRequestInfo(handler, NewRequestInfoResolver(c), c.RequestContextMapper)
 | 
				
			||||||
		handler = api.WithRequestContext(handler, c.RequestContextMapper)
 | 
							handler = api.WithRequestContext(handler, c.RequestContextMapper)
 | 
				
			||||||
		return handler
 | 
							return handler
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	audit := func(handler http.Handler) http.Handler {
 | 
						audit := func(handler http.Handler) http.Handler {
 | 
				
			||||||
		return apiserverfilters.WithAudit(handler, c.RequestContextMapper, c.AuditWriter)
 | 
							return genericapifilters.WithAudit(handler, c.RequestContextMapper, c.AuditWriter)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	protect := func(handler http.Handler) http.Handler {
 | 
						protect := func(handler http.Handler) http.Handler {
 | 
				
			||||||
		handler = apiserverfilters.WithAuthorization(handler, c.RequestContextMapper, c.Authorizer)
 | 
							handler = genericapifilters.WithAuthorization(handler, c.RequestContextMapper, c.Authorizer)
 | 
				
			||||||
		handler = apiserverfilters.WithImpersonation(handler, c.RequestContextMapper, c.Authorizer)
 | 
							handler = genericapifilters.WithImpersonation(handler, c.RequestContextMapper, c.Authorizer)
 | 
				
			||||||
		handler = audit(handler) // before impersonation to read original user
 | 
							handler = audit(handler) // before impersonation to read original user
 | 
				
			||||||
		handler = authhandlers.WithAuthentication(handler, c.RequestContextMapper, c.Authenticator, authhandlers.Unauthorized(c.SupportsBasicAuth))
 | 
							handler = authhandlers.WithAuthentication(handler, c.RequestContextMapper, c.Authenticator, authhandlers.Unauthorized(c.SupportsBasicAuth))
 | 
				
			||||||
		return handler
 | 
							return handler
 | 
				
			||||||
@@ -604,7 +604,7 @@ func (s *GenericAPIServer) installAPI(c *Config) {
 | 
				
			|||||||
	s.HandlerContainer.Add(s.DynamicApisDiscovery())
 | 
						s.HandlerContainer.Add(s.DynamicApisDiscovery())
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func NewRequestInfoResolver(c *Config) *apiserverrequest.RequestInfoFactory {
 | 
					func NewRequestInfoResolver(c *Config) *apirequest.RequestInfoFactory {
 | 
				
			||||||
	apiPrefixes := sets.NewString(strings.Trim(APIGroupPrefix, "/")) // all possible API prefixes
 | 
						apiPrefixes := sets.NewString(strings.Trim(APIGroupPrefix, "/")) // all possible API prefixes
 | 
				
			||||||
	legacyAPIPrefixes := sets.String{}                               // APIPrefixes that won't have groups (legacy)
 | 
						legacyAPIPrefixes := sets.String{}                               // APIPrefixes that won't have groups (legacy)
 | 
				
			||||||
	for legacyAPIPrefix := range c.LegacyAPIGroupPrefixes {
 | 
						for legacyAPIPrefix := range c.LegacyAPIGroupPrefixes {
 | 
				
			||||||
@@ -612,7 +612,7 @@ func NewRequestInfoResolver(c *Config) *apiserverrequest.RequestInfoFactory {
 | 
				
			|||||||
		legacyAPIPrefixes.Insert(strings.Trim(legacyAPIPrefix, "/"))
 | 
							legacyAPIPrefixes.Insert(strings.Trim(legacyAPIPrefix, "/"))
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return &apiserverrequest.RequestInfoFactory{
 | 
						return &apirequest.RequestInfoFactory{
 | 
				
			||||||
		APIPrefixes:          apiPrefixes,
 | 
							APIPrefixes:          apiPrefixes,
 | 
				
			||||||
		GrouplessAPIPrefixes: legacyAPIPrefixes,
 | 
							GrouplessAPIPrefixes: legacyAPIPrefixes,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,7 +17,7 @@ limitations under the License.
 | 
				
			|||||||
// Package genericapiserver contains code to setup a generic kubernetes-like API server.
 | 
					// Package genericapiserver contains code to setup a generic kubernetes-like API server.
 | 
				
			||||||
// This does not contain any kubernetes API specific code.
 | 
					// This does not contain any kubernetes API specific code.
 | 
				
			||||||
// Note that this is a work in progress. We are pulling out generic code (specifically from
 | 
					// Note that this is a work in progress. We are pulling out generic code (specifically from
 | 
				
			||||||
// pkg/master and pkg/apiserver) here.
 | 
					// pkg/master) here.
 | 
				
			||||||
// We plan to move this package into a separate repo on github once it is done.
 | 
					// We plan to move this package into a separate repo on github once it is done.
 | 
				
			||||||
// For more details: https://github.com/kubernetes/kubernetes/issues/2742
 | 
					// For more details: https://github.com/kubernetes/kubernetes/issues/2742
 | 
				
			||||||
package genericapiserver // import "k8s.io/kubernetes/pkg/genericapiserver"
 | 
					package genericapiserver // import "k8s.io/kubernetes/pkg/genericapiserver"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -22,7 +22,7 @@ go_library(
 | 
				
			|||||||
    deps = [
 | 
					    deps = [
 | 
				
			||||||
        "//pkg/api:go_default_library",
 | 
					        "//pkg/api:go_default_library",
 | 
				
			||||||
        "//pkg/api/errors:go_default_library",
 | 
					        "//pkg/api/errors:go_default_library",
 | 
				
			||||||
        "//pkg/apiserver/request:go_default_library",
 | 
					        "//pkg/genericapiserver/api/request:go_default_library",
 | 
				
			||||||
        "//pkg/httplog:go_default_library",
 | 
					        "//pkg/httplog:go_default_library",
 | 
				
			||||||
        "//pkg/util:go_default_library",
 | 
					        "//pkg/util:go_default_library",
 | 
				
			||||||
        "//pkg/util/runtime:go_default_library",
 | 
					        "//pkg/util/runtime:go_default_library",
 | 
				
			||||||
@@ -43,8 +43,8 @@ go_test(
 | 
				
			|||||||
    deps = [
 | 
					    deps = [
 | 
				
			||||||
        "//pkg/api:go_default_library",
 | 
					        "//pkg/api:go_default_library",
 | 
				
			||||||
        "//pkg/api/errors:go_default_library",
 | 
					        "//pkg/api/errors:go_default_library",
 | 
				
			||||||
        "//pkg/apiserver/filters:go_default_library",
 | 
					        "//pkg/genericapiserver/api/filters:go_default_library",
 | 
				
			||||||
        "//pkg/apiserver/request:go_default_library",
 | 
					        "//pkg/genericapiserver/api/request:go_default_library",
 | 
				
			||||||
        "//pkg/util/sets:go_default_library",
 | 
					        "//pkg/util/sets:go_default_library",
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,16 +19,16 @@ package filters
 | 
				
			|||||||
import (
 | 
					import (
 | 
				
			||||||
	"net/http"
 | 
						"net/http"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	apiserverrequest "k8s.io/kubernetes/pkg/apiserver/request"
 | 
						apirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/util/sets"
 | 
						"k8s.io/kubernetes/pkg/util/sets"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// LongRunningRequestCheck is a predicate which is true for long-running http requests.
 | 
					// LongRunningRequestCheck is a predicate which is true for long-running http requests.
 | 
				
			||||||
type LongRunningRequestCheck func(r *http.Request, requestInfo *apiserverrequest.RequestInfo) bool
 | 
					type LongRunningRequestCheck func(r *http.Request, requestInfo *apirequest.RequestInfo) bool
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// BasicLongRunningRequestCheck returns true if the given request has one of the specified verbs or one of the specified subresources
 | 
					// BasicLongRunningRequestCheck returns true if the given request has one of the specified verbs or one of the specified subresources
 | 
				
			||||||
func BasicLongRunningRequestCheck(longRunningVerbs, longRunningSubresources sets.String) LongRunningRequestCheck {
 | 
					func BasicLongRunningRequestCheck(longRunningVerbs, longRunningSubresources sets.String) LongRunningRequestCheck {
 | 
				
			||||||
	return func(r *http.Request, requestInfo *apiserverrequest.RequestInfo) bool {
 | 
						return func(r *http.Request, requestInfo *apirequest.RequestInfo) bool {
 | 
				
			||||||
		if longRunningVerbs.Has(requestInfo.Verb) {
 | 
							if longRunningVerbs.Has(requestInfo.Verb) {
 | 
				
			||||||
			return true
 | 
								return true
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -22,7 +22,7 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/api"
 | 
						"k8s.io/kubernetes/pkg/api"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/api/errors"
 | 
						"k8s.io/kubernetes/pkg/api/errors"
 | 
				
			||||||
	apiserverrequest "k8s.io/kubernetes/pkg/apiserver/request"
 | 
						apirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/httplog"
 | 
						"k8s.io/kubernetes/pkg/httplog"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/util/sets"
 | 
						"k8s.io/kubernetes/pkg/util/sets"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -67,7 +67,7 @@ func WithMaxInFlightLimit(
 | 
				
			|||||||
			handleError(w, r, fmt.Errorf("no context found for request, handler chain must be wrong"))
 | 
								handleError(w, r, fmt.Errorf("no context found for request, handler chain must be wrong"))
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		requestInfo, ok := apiserverrequest.RequestInfoFrom(ctx)
 | 
							requestInfo, ok := apirequest.RequestInfoFrom(ctx)
 | 
				
			||||||
		if !ok {
 | 
							if !ok {
 | 
				
			||||||
			handleError(w, r, fmt.Errorf("no RequestInfo found in context, handler chain must be wrong"))
 | 
								handleError(w, r, fmt.Errorf("no RequestInfo found in context, handler chain must be wrong"))
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -26,8 +26,8 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/api"
 | 
						"k8s.io/kubernetes/pkg/api"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/api/errors"
 | 
						"k8s.io/kubernetes/pkg/api/errors"
 | 
				
			||||||
	apiserverfilters "k8s.io/kubernetes/pkg/apiserver/filters"
 | 
						apifilters "k8s.io/kubernetes/pkg/genericapiserver/api/filters"
 | 
				
			||||||
	apiserverrequest "k8s.io/kubernetes/pkg/apiserver/request"
 | 
						apirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/util/sets"
 | 
						"k8s.io/kubernetes/pkg/util/sets"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -36,7 +36,7 @@ func createMaxInflightServer(callsWg, blockWg *sync.WaitGroup, disableCallsWg *b
 | 
				
			|||||||
	longRunningRequestCheck := BasicLongRunningRequestCheck(sets.NewString("watch"), sets.NewString("proxy"))
 | 
						longRunningRequestCheck := BasicLongRunningRequestCheck(sets.NewString("watch"), sets.NewString("proxy"))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	requestContextMapper := api.NewRequestContextMapper()
 | 
						requestContextMapper := api.NewRequestContextMapper()
 | 
				
			||||||
	requestInfoFactory := &apiserverrequest.RequestInfoFactory{APIPrefixes: sets.NewString("apis", "api"), GrouplessAPIPrefixes: sets.NewString("api")}
 | 
						requestInfoFactory := &apirequest.RequestInfoFactory{APIPrefixes: sets.NewString("apis", "api"), GrouplessAPIPrefixes: sets.NewString("api")}
 | 
				
			||||||
	handler := WithMaxInFlightLimit(
 | 
						handler := WithMaxInFlightLimit(
 | 
				
			||||||
		http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
 | 
							http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
 | 
				
			||||||
			// A short, accounted request that does not wait for block WaitGroup.
 | 
								// A short, accounted request that does not wait for block WaitGroup.
 | 
				
			||||||
@@ -56,7 +56,7 @@ func createMaxInflightServer(callsWg, blockWg *sync.WaitGroup, disableCallsWg *b
 | 
				
			|||||||
		requestContextMapper,
 | 
							requestContextMapper,
 | 
				
			||||||
		longRunningRequestCheck,
 | 
							longRunningRequestCheck,
 | 
				
			||||||
	)
 | 
						)
 | 
				
			||||||
	handler = apiserverfilters.WithRequestInfo(handler, requestInfoFactory, requestContextMapper)
 | 
						handler = apifilters.WithRequestInfo(handler, requestInfoFactory, requestContextMapper)
 | 
				
			||||||
	handler = api.WithRequestContext(handler, requestContextMapper)
 | 
						handler = api.WithRequestContext(handler, requestContextMapper)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return httptest.NewServer(handler)
 | 
						return httptest.NewServer(handler)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -24,7 +24,7 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/api"
 | 
						"k8s.io/kubernetes/pkg/api"
 | 
				
			||||||
	apierrors "k8s.io/kubernetes/pkg/api/errors"
 | 
						apierrors "k8s.io/kubernetes/pkg/api/errors"
 | 
				
			||||||
	apiserverrequest "k8s.io/kubernetes/pkg/apiserver/request"
 | 
						apirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/httplog"
 | 
						"k8s.io/kubernetes/pkg/httplog"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/util/runtime"
 | 
						"k8s.io/kubernetes/pkg/util/runtime"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
@@ -39,12 +39,12 @@ func WithPanicRecovery(handler http.Handler, requestContextMapper api.RequestCon
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		logger := httplog.NewLogged(req, &w)
 | 
							logger := httplog.NewLogged(req, &w)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		var requestInfo *apiserverrequest.RequestInfo
 | 
							var requestInfo *apirequest.RequestInfo
 | 
				
			||||||
		ctx, ok := requestContextMapper.Get(req)
 | 
							ctx, ok := requestContextMapper.Get(req)
 | 
				
			||||||
		if !ok {
 | 
							if !ok {
 | 
				
			||||||
			glog.Errorf("no context found for request, handler chain must be wrong")
 | 
								glog.Errorf("no context found for request, handler chain must be wrong")
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			requestInfo, ok = apiserverrequest.RequestInfoFrom(ctx)
 | 
								requestInfo, ok = apirequest.RequestInfoFrom(ctx)
 | 
				
			||||||
			if !ok {
 | 
								if !ok {
 | 
				
			||||||
				glog.Errorf("no RequestInfo found in context, handler chain must be wrong")
 | 
									glog.Errorf("no RequestInfo found in context, handler chain must be wrong")
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,7 +27,7 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/api"
 | 
						"k8s.io/kubernetes/pkg/api"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/api/errors"
 | 
						"k8s.io/kubernetes/pkg/api/errors"
 | 
				
			||||||
	apiserverrequest "k8s.io/kubernetes/pkg/apiserver/request"
 | 
						apirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const globalTimeout = time.Minute
 | 
					const globalTimeout = time.Minute
 | 
				
			||||||
@@ -46,7 +46,7 @@ func WithTimeoutForNonLongRunningRequests(handler http.Handler, requestContextMa
 | 
				
			|||||||
			return time.After(globalTimeout), ""
 | 
								return time.After(globalTimeout), ""
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		requestInfo, ok := apiserverrequest.RequestInfoFrom(ctx)
 | 
							requestInfo, ok := apirequest.RequestInfoFrom(ctx)
 | 
				
			||||||
		if !ok {
 | 
							if !ok {
 | 
				
			||||||
			return time.After(globalTimeout), ""
 | 
								return time.After(globalTimeout), ""
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -36,8 +36,8 @@ import (
 | 
				
			|||||||
	"k8s.io/kubernetes/pkg/apimachinery"
 | 
						"k8s.io/kubernetes/pkg/apimachinery"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/apimachinery/registered"
 | 
						"k8s.io/kubernetes/pkg/apimachinery/registered"
 | 
				
			||||||
	metav1 "k8s.io/kubernetes/pkg/apis/meta/v1"
 | 
						metav1 "k8s.io/kubernetes/pkg/apis/meta/v1"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/apiserver"
 | 
					 | 
				
			||||||
	"k8s.io/kubernetes/pkg/client/restclient"
 | 
						"k8s.io/kubernetes/pkg/client/restclient"
 | 
				
			||||||
 | 
						genericapi "k8s.io/kubernetes/pkg/genericapiserver/api"
 | 
				
			||||||
	genericmux "k8s.io/kubernetes/pkg/genericapiserver/mux"
 | 
						genericmux "k8s.io/kubernetes/pkg/genericapiserver/mux"
 | 
				
			||||||
	openapicommon "k8s.io/kubernetes/pkg/genericapiserver/openapi/common"
 | 
						openapicommon "k8s.io/kubernetes/pkg/genericapiserver/openapi/common"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/genericapiserver/routes"
 | 
						"k8s.io/kubernetes/pkg/genericapiserver/routes"
 | 
				
			||||||
@@ -241,7 +241,7 @@ func (s *GenericAPIServer) InstallLegacyAPIGroup(apiPrefix string, apiGroupInfo
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	// Install the version handler.
 | 
						// Install the version handler.
 | 
				
			||||||
	// Add a handler at /<apiPrefix> to enumerate the supported api versions.
 | 
						// Add a handler at /<apiPrefix> to enumerate the supported api versions.
 | 
				
			||||||
	apiserver.AddApiWebService(s.Serializer, s.HandlerContainer.Container, apiPrefix, func(req *restful.Request) *metav1.APIVersions {
 | 
						genericapi.AddApiWebService(s.Serializer, s.HandlerContainer.Container, apiPrefix, func(req *restful.Request) *metav1.APIVersions {
 | 
				
			||||||
		clientIP := utilnet.GetClientIP(req.Request)
 | 
							clientIP := utilnet.GetClientIP(req.Request)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		apiVersionsForDiscovery := metav1.APIVersions{
 | 
							apiVersionsForDiscovery := metav1.APIVersions{
 | 
				
			||||||
@@ -293,7 +293,7 @@ func (s *GenericAPIServer) InstallAPIGroup(apiGroupInfo *APIGroupInfo) error {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	s.AddAPIGroupForDiscovery(apiGroup)
 | 
						s.AddAPIGroupForDiscovery(apiGroup)
 | 
				
			||||||
	s.HandlerContainer.Add(apiserver.NewGroupWebService(s.Serializer, APIGroupPrefix+"/"+apiGroup.Name, apiGroup))
 | 
						s.HandlerContainer.Add(genericapi.NewGroupWebService(s.Serializer, APIGroupPrefix+"/"+apiGroup.Name, apiGroup))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -312,7 +312,7 @@ func (s *GenericAPIServer) RemoveAPIGroupForDiscovery(groupName string) {
 | 
				
			|||||||
	delete(s.apiGroupsForDiscovery, groupName)
 | 
						delete(s.apiGroupsForDiscovery, groupName)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (s *GenericAPIServer) getAPIGroupVersion(apiGroupInfo *APIGroupInfo, groupVersion schema.GroupVersion, apiPrefix string) (*apiserver.APIGroupVersion, error) {
 | 
					func (s *GenericAPIServer) getAPIGroupVersion(apiGroupInfo *APIGroupInfo, groupVersion schema.GroupVersion, apiPrefix string) (*genericapi.APIGroupVersion, error) {
 | 
				
			||||||
	storage := make(map[string]rest.Storage)
 | 
						storage := make(map[string]rest.Storage)
 | 
				
			||||||
	for k, v := range apiGroupInfo.VersionedResourcesStorageMap[groupVersion.Version] {
 | 
						for k, v := range apiGroupInfo.VersionedResourcesStorageMap[groupVersion.Version] {
 | 
				
			||||||
		storage[strings.ToLower(k)] = v
 | 
							storage[strings.ToLower(k)] = v
 | 
				
			||||||
@@ -323,8 +323,8 @@ func (s *GenericAPIServer) getAPIGroupVersion(apiGroupInfo *APIGroupInfo, groupV
 | 
				
			|||||||
	return version, err
 | 
						return version, err
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (s *GenericAPIServer) newAPIGroupVersion(apiGroupInfo *APIGroupInfo, groupVersion schema.GroupVersion) (*apiserver.APIGroupVersion, error) {
 | 
					func (s *GenericAPIServer) newAPIGroupVersion(apiGroupInfo *APIGroupInfo, groupVersion schema.GroupVersion) (*genericapi.APIGroupVersion, error) {
 | 
				
			||||||
	return &apiserver.APIGroupVersion{
 | 
						return &genericapi.APIGroupVersion{
 | 
				
			||||||
		GroupVersion: groupVersion,
 | 
							GroupVersion: groupVersion,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		ParameterCodec: apiGroupInfo.ParameterCodec,
 | 
							ParameterCodec: apiGroupInfo.ParameterCodec,
 | 
				
			||||||
@@ -346,7 +346,7 @@ func (s *GenericAPIServer) newAPIGroupVersion(apiGroupInfo *APIGroupInfo, groupV
 | 
				
			|||||||
// DynamicApisDiscovery returns a webservice serving api group discovery.
 | 
					// DynamicApisDiscovery returns a webservice serving api group discovery.
 | 
				
			||||||
// Note: during the server runtime apiGroupsForDiscovery might change.
 | 
					// Note: during the server runtime apiGroupsForDiscovery might change.
 | 
				
			||||||
func (s *GenericAPIServer) DynamicApisDiscovery() *restful.WebService {
 | 
					func (s *GenericAPIServer) DynamicApisDiscovery() *restful.WebService {
 | 
				
			||||||
	return apiserver.NewApisWebService(s.Serializer, APIGroupPrefix, func(req *restful.Request) []metav1.APIGroup {
 | 
						return genericapi.NewApisWebService(s.Serializer, APIGroupPrefix, func(req *restful.Request) []metav1.APIGroup {
 | 
				
			||||||
		s.apiGroupsForDiscoveryLock.RLock()
 | 
							s.apiGroupsForDiscoveryLock.RLock()
 | 
				
			||||||
		defer s.apiGroupsForDiscoveryLock.RUnlock()
 | 
							defer s.apiGroupsForDiscoveryLock.RUnlock()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,7 +19,7 @@ go_library(
 | 
				
			|||||||
    deps = [
 | 
					    deps = [
 | 
				
			||||||
        "//pkg/api:go_default_library",
 | 
					        "//pkg/api:go_default_library",
 | 
				
			||||||
        "//pkg/api/errors:go_default_library",
 | 
					        "//pkg/api/errors:go_default_library",
 | 
				
			||||||
        "//pkg/apiserver/handlers/responsewriters:go_default_library",
 | 
					        "//pkg/genericapiserver/api/handlers/responsewriters:go_default_library",
 | 
				
			||||||
        "//pkg/runtime:go_default_library",
 | 
					        "//pkg/runtime:go_default_library",
 | 
				
			||||||
        "//pkg/runtime/schema:go_default_library",
 | 
					        "//pkg/runtime/schema:go_default_library",
 | 
				
			||||||
        "//vendor:github.com/emicklei/go-restful",
 | 
					        "//vendor:github.com/emicklei/go-restful",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,7 +27,7 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/api"
 | 
						"k8s.io/kubernetes/pkg/api"
 | 
				
			||||||
	apierrors "k8s.io/kubernetes/pkg/api/errors"
 | 
						apierrors "k8s.io/kubernetes/pkg/api/errors"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/apiserver/handlers/responsewriters"
 | 
						"k8s.io/kubernetes/pkg/genericapiserver/api/handlers/responsewriters"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/runtime"
 | 
						"k8s.io/kubernetes/pkg/runtime"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/runtime/schema"
 | 
						"k8s.io/kubernetes/pkg/runtime/schema"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -22,8 +22,8 @@ go_library(
 | 
				
			|||||||
    tags = ["automanaged"],
 | 
					    tags = ["automanaged"],
 | 
				
			||||||
    deps = [
 | 
					    deps = [
 | 
				
			||||||
        "//pkg/apis/meta/v1:go_default_library",
 | 
					        "//pkg/apis/meta/v1:go_default_library",
 | 
				
			||||||
        "//pkg/apiserver/handlers/responsewriters:go_default_library",
 | 
					        "//pkg/genericapiserver/api/handlers/responsewriters:go_default_library",
 | 
				
			||||||
        "//pkg/apiserver/metrics:go_default_library",
 | 
					        "//pkg/genericapiserver/api/metrics:go_default_library",
 | 
				
			||||||
        "//pkg/genericapiserver/mux:go_default_library",
 | 
					        "//pkg/genericapiserver/mux:go_default_library",
 | 
				
			||||||
        "//pkg/genericapiserver/openapi:go_default_library",
 | 
					        "//pkg/genericapiserver/openapi:go_default_library",
 | 
				
			||||||
        "//pkg/genericapiserver/openapi/common:go_default_library",
 | 
					        "//pkg/genericapiserver/openapi/common:go_default_library",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,7 +21,7 @@ import (
 | 
				
			|||||||
	"sort"
 | 
						"sort"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	metav1 "k8s.io/kubernetes/pkg/apis/meta/v1"
 | 
						metav1 "k8s.io/kubernetes/pkg/apis/meta/v1"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/apiserver/handlers/responsewriters"
 | 
						"k8s.io/kubernetes/pkg/genericapiserver/api/handlers/responsewriters"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/genericapiserver/mux"
 | 
						"k8s.io/kubernetes/pkg/genericapiserver/mux"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -20,7 +20,7 @@ import (
 | 
				
			|||||||
	"io"
 | 
						"io"
 | 
				
			||||||
	"net/http"
 | 
						"net/http"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	apiservermetrics "k8s.io/kubernetes/pkg/apiserver/metrics"
 | 
						apimetrics "k8s.io/kubernetes/pkg/genericapiserver/api/metrics"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/genericapiserver/mux"
 | 
						"k8s.io/kubernetes/pkg/genericapiserver/mux"
 | 
				
			||||||
	etcdmetrics "k8s.io/kubernetes/pkg/storage/etcd/metrics"
 | 
						etcdmetrics "k8s.io/kubernetes/pkg/storage/etcd/metrics"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -44,7 +44,7 @@ func (m MetricsWithReset) Install(c *mux.APIContainer) {
 | 
				
			|||||||
	defaultMetricsHandler := prometheus.Handler().ServeHTTP
 | 
						defaultMetricsHandler := prometheus.Handler().ServeHTTP
 | 
				
			||||||
	c.NonSwaggerRoutes.HandleFunc("/metrics", func(w http.ResponseWriter, req *http.Request) {
 | 
						c.NonSwaggerRoutes.HandleFunc("/metrics", func(w http.ResponseWriter, req *http.Request) {
 | 
				
			||||||
		if req.Method == "DELETE" {
 | 
							if req.Method == "DELETE" {
 | 
				
			||||||
			apiservermetrics.Reset()
 | 
								apimetrics.Reset()
 | 
				
			||||||
			etcdmetrics.Reset()
 | 
								etcdmetrics.Reset()
 | 
				
			||||||
			io.WriteString(w, "metrics reset\n")
 | 
								io.WriteString(w, "metrics reset\n")
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,7 +21,7 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	"github.com/emicklei/go-restful"
 | 
						"github.com/emicklei/go-restful"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/apiserver/handlers/responsewriters"
 | 
						"k8s.io/kubernetes/pkg/genericapiserver/api/handlers/responsewriters"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/genericapiserver/mux"
 | 
						"k8s.io/kubernetes/pkg/genericapiserver/mux"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/version"
 | 
						"k8s.io/kubernetes/pkg/version"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								pkg/master/thirdparty/BUILD
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								pkg/master/thirdparty/BUILD
									
									
									
									
										vendored
									
									
								
							@@ -18,9 +18,9 @@ go_library(
 | 
				
			|||||||
        "//pkg/apimachinery/registered:go_default_library",
 | 
					        "//pkg/apimachinery/registered:go_default_library",
 | 
				
			||||||
        "//pkg/apis/extensions:go_default_library",
 | 
					        "//pkg/apis/extensions:go_default_library",
 | 
				
			||||||
        "//pkg/apis/meta/v1:go_default_library",
 | 
					        "//pkg/apis/meta/v1:go_default_library",
 | 
				
			||||||
        "//pkg/apiserver:go_default_library",
 | 
					 | 
				
			||||||
        "//pkg/apiserver/handlers:go_default_library",
 | 
					 | 
				
			||||||
        "//pkg/genericapiserver:go_default_library",
 | 
					        "//pkg/genericapiserver:go_default_library",
 | 
				
			||||||
 | 
					        "//pkg/genericapiserver/api:go_default_library",
 | 
				
			||||||
 | 
					        "//pkg/genericapiserver/api/handlers:go_default_library",
 | 
				
			||||||
        "//pkg/registry/extensions/rest:go_default_library",
 | 
					        "//pkg/registry/extensions/rest:go_default_library",
 | 
				
			||||||
        "//pkg/registry/extensions/thirdpartyresourcedata:go_default_library",
 | 
					        "//pkg/registry/extensions/thirdpartyresourcedata:go_default_library",
 | 
				
			||||||
        "//pkg/registry/extensions/thirdpartyresourcedata/etcd:go_default_library",
 | 
					        "//pkg/registry/extensions/thirdpartyresourcedata/etcd:go_default_library",
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										14
									
								
								pkg/master/thirdparty/thirdparty.go
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										14
									
								
								pkg/master/thirdparty/thirdparty.go
									
									
									
									
										vendored
									
									
								
							@@ -29,9 +29,9 @@ import (
 | 
				
			|||||||
	"k8s.io/kubernetes/pkg/apimachinery/registered"
 | 
						"k8s.io/kubernetes/pkg/apimachinery/registered"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/apis/extensions"
 | 
						"k8s.io/kubernetes/pkg/apis/extensions"
 | 
				
			||||||
	metav1 "k8s.io/kubernetes/pkg/apis/meta/v1"
 | 
						metav1 "k8s.io/kubernetes/pkg/apis/meta/v1"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/apiserver"
 | 
					 | 
				
			||||||
	apiserverhandlers "k8s.io/kubernetes/pkg/apiserver/handlers"
 | 
					 | 
				
			||||||
	"k8s.io/kubernetes/pkg/genericapiserver"
 | 
						"k8s.io/kubernetes/pkg/genericapiserver"
 | 
				
			||||||
 | 
						genericapi "k8s.io/kubernetes/pkg/genericapiserver/api"
 | 
				
			||||||
 | 
						genericapihandlers "k8s.io/kubernetes/pkg/genericapiserver/api/handlers"
 | 
				
			||||||
	extensionsrest "k8s.io/kubernetes/pkg/registry/extensions/rest"
 | 
						extensionsrest "k8s.io/kubernetes/pkg/registry/extensions/rest"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/registry/extensions/thirdpartyresourcedata"
 | 
						"k8s.io/kubernetes/pkg/registry/extensions/thirdpartyresourcedata"
 | 
				
			||||||
	thirdpartyresourcedataetcd "k8s.io/kubernetes/pkg/registry/extensions/thirdpartyresourcedata/etcd"
 | 
						thirdpartyresourcedataetcd "k8s.io/kubernetes/pkg/registry/extensions/thirdpartyresourcedata/etcd"
 | 
				
			||||||
@@ -42,7 +42,7 @@ import (
 | 
				
			|||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// dynamicLister is used to list resources for dynamic third party
 | 
					// dynamicLister is used to list resources for dynamic third party
 | 
				
			||||||
// apis. It implements the apiserver.APIResourceLister interface
 | 
					// apis. It implements the genericapihandlers.APIResourceLister interface
 | 
				
			||||||
type dynamicLister struct {
 | 
					type dynamicLister struct {
 | 
				
			||||||
	m    *ThirdPartyResourceServer
 | 
						m    *ThirdPartyResourceServer
 | 
				
			||||||
	path string
 | 
						path string
 | 
				
			||||||
@@ -52,7 +52,7 @@ func (d dynamicLister) ListAPIResources() []metav1.APIResource {
 | 
				
			|||||||
	return d.m.getExistingThirdPartyResources(d.path)
 | 
						return d.m.getExistingThirdPartyResources(d.path)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var _ apiserverhandlers.APIResourceLister = &dynamicLister{}
 | 
					var _ genericapihandlers.APIResourceLister = &dynamicLister{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type ThirdPartyResourceServer struct {
 | 
					type ThirdPartyResourceServer struct {
 | 
				
			||||||
	genericAPIServer *genericapiserver.GenericAPIServer
 | 
						genericAPIServer *genericapiserver.GenericAPIServer
 | 
				
			||||||
@@ -280,13 +280,13 @@ func (m *ThirdPartyResourceServer) InstallThirdPartyResource(rsrc *extensions.Th
 | 
				
			|||||||
	if err := thirdparty.InstallREST(m.genericAPIServer.HandlerContainer.Container); err != nil {
 | 
						if err := thirdparty.InstallREST(m.genericAPIServer.HandlerContainer.Container); err != nil {
 | 
				
			||||||
		glog.Errorf("Unable to setup thirdparty api: %v", err)
 | 
							glog.Errorf("Unable to setup thirdparty api: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	m.genericAPIServer.HandlerContainer.Add(apiserver.NewGroupWebService(api.Codecs, path, apiGroup))
 | 
						m.genericAPIServer.HandlerContainer.Add(genericapi.NewGroupWebService(api.Codecs, path, apiGroup))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	m.addThirdPartyResourceStorage(path, plural.Resource, thirdparty.Storage[plural.Resource].(*thirdpartyresourcedataetcd.REST), apiGroup)
 | 
						m.addThirdPartyResourceStorage(path, plural.Resource, thirdparty.Storage[plural.Resource].(*thirdpartyresourcedataetcd.REST), apiGroup)
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (m *ThirdPartyResourceServer) thirdpartyapi(group, kind, version, pluralResource string) *apiserver.APIGroupVersion {
 | 
					func (m *ThirdPartyResourceServer) thirdpartyapi(group, kind, version, pluralResource string) *genericapi.APIGroupVersion {
 | 
				
			||||||
	resourceStorage := thirdpartyresourcedataetcd.NewREST(
 | 
						resourceStorage := thirdpartyresourcedataetcd.NewREST(
 | 
				
			||||||
		generic.RESTOptions{
 | 
							generic.RESTOptions{
 | 
				
			||||||
			StorageConfig:           m.thirdPartyStorageConfig,
 | 
								StorageConfig:           m.thirdPartyStorageConfig,
 | 
				
			||||||
@@ -306,7 +306,7 @@ func (m *ThirdPartyResourceServer) thirdpartyapi(group, kind, version, pluralRes
 | 
				
			|||||||
	externalVersion := schema.GroupVersion{Group: group, Version: version}
 | 
						externalVersion := schema.GroupVersion{Group: group, Version: version}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	apiRoot := extensionsrest.MakeThirdPartyPath("")
 | 
						apiRoot := extensionsrest.MakeThirdPartyPath("")
 | 
				
			||||||
	return &apiserver.APIGroupVersion{
 | 
						return &genericapi.APIGroupVersion{
 | 
				
			||||||
		Root:         apiRoot,
 | 
							Root:         apiRoot,
 | 
				
			||||||
		GroupVersion: externalVersion,
 | 
							GroupVersion: externalVersion,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -99,7 +99,7 @@ func (h *UpgradeAwareProxyHandler) ServeHTTP(w http.ResponseWriter, req *http.Re
 | 
				
			|||||||
		loc.Path += "/"
 | 
							loc.Path += "/"
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// From pkg/apiserver/proxy.go#ServeHTTP:
 | 
						// From pkg/genericapiserver/api/handlers/proxy.go#ServeHTTP:
 | 
				
			||||||
	// Redirect requests with an empty path to a location that ends with a '/'
 | 
						// Redirect requests with an empty path to a location that ends with a '/'
 | 
				
			||||||
	// This is essentially a hack for http://issue.k8s.io/4958.
 | 
						// This is essentially a hack for http://issue.k8s.io/4958.
 | 
				
			||||||
	// Note: Keep this code after tryUpgrade to not break that flow.
 | 
						// Note: Keep this code after tryUpgrade to not break that flow.
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -587,12 +587,12 @@ k8s.io/kubernetes/pkg/apis/meta/v1/validation,smarterclayton,0
 | 
				
			|||||||
k8s.io/kubernetes/pkg/apis/policy/validation,deads2k,1
 | 
					k8s.io/kubernetes/pkg/apis/policy/validation,deads2k,1
 | 
				
			||||||
k8s.io/kubernetes/pkg/apis/rbac/validation,erictune,0
 | 
					k8s.io/kubernetes/pkg/apis/rbac/validation,erictune,0
 | 
				
			||||||
k8s.io/kubernetes/pkg/apis/storage/validation,caesarxuchao,1
 | 
					k8s.io/kubernetes/pkg/apis/storage/validation,caesarxuchao,1
 | 
				
			||||||
k8s.io/kubernetes/pkg/apiserver,nikhiljindal,0
 | 
					k8s.io/kubernetes/pkg/genericapiserver/api,nikhiljindal,0
 | 
				
			||||||
k8s.io/kubernetes/pkg/apiserver/filters,dchen1107,1
 | 
					k8s.io/kubernetes/pkg/genericapiserver/api/filters,dchen1107,1
 | 
				
			||||||
k8s.io/kubernetes/pkg/apiserver/handlers,rkouj,0
 | 
					k8s.io/kubernetes/pkg/genericapiserver/api/handlers,rkouj,0
 | 
				
			||||||
k8s.io/kubernetes/pkg/apiserver/handlers/errors,rkouj,0
 | 
					k8s.io/kubernetes/pkg/genericapiserver/api/handlers/errors,rkouj,0
 | 
				
			||||||
k8s.io/kubernetes/pkg/apiserver/handlers/negotiation,rkouj,0
 | 
					k8s.io/kubernetes/pkg/genericapiserver/api/handlers/negotiation,rkouj,0
 | 
				
			||||||
k8s.io/kubernetes/pkg/apiserver/request,lavalamp,1
 | 
					k8s.io/kubernetes/pkg/genericapiserver/api/request,lavalamp,1
 | 
				
			||||||
k8s.io/kubernetes/pkg/auth/authenticator/bearertoken,liggitt,0
 | 
					k8s.io/kubernetes/pkg/auth/authenticator/bearertoken,liggitt,0
 | 
				
			||||||
k8s.io/kubernetes/pkg/auth/authorizer/abac,liggitt,0
 | 
					k8s.io/kubernetes/pkg/auth/authorizer/abac,liggitt,0
 | 
				
			||||||
k8s.io/kubernetes/pkg/auth/authorizer/union,liggitt,0
 | 
					k8s.io/kubernetes/pkg/auth/authorizer/union,liggitt,0
 | 
				
			||||||
 
 | 
				
			|||||||
		
		
			
  | 
		Reference in New Issue
	
	Block a user