Commit 2d58ffc1 authored by Dr. Stefan Schimanski's avatar Dr. Stefan Schimanski

Move pkg/{apiserver -> genericapiserver/api}

parent 856c3623
...@@ -30,8 +30,6 @@ go_library( ...@@ -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( ...@@ -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( ...@@ -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 ( ...@@ -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 ...@@ -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 ( ...@@ -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 ( ...@@ -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 ( ...@@ -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) { ...@@ -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 ...@@ -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 ...@@ -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 { ...@@ -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
} }
......
/*
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"
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( ...@@ -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( ...@@ -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( ...@@ -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 ...@@ -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 ...@@ -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 ( ...@@ -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 ...@@ -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( ...@@ -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( ...@@ -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( ...@@ -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 ( ...@@ -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 ...@@ -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 ( ...@@ -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 ( ...@@ -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 ...@@ -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 ...@@ -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 ( ...@@ -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) { ...@@ -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. ...@@ -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 ( ...@@ -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 ...@@ -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 ...@@ -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 ...@@ -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 ( ...@@ -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, ...@@ -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. ...@@ -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 ...@@ -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 ( ...@@ -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( ...@@ -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( ...@@ -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( ...@@ -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 ( ...@@ -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. ...@@ -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. ...@@ -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 ( ...@@ -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,29 +8,38 @@ load( ...@@ -8,29 +8,38 @@ load(
"go_test", "go_test",
) )
go_test(
name = "go_default_test",
srcs = ["errors_test.go"],
library = ":go_default_library",
tags = ["automanaged"],
deps = [
"//pkg/api:go_default_library",
"//pkg/api/errors:go_default_library",
"//pkg/apis/meta/v1:go_default_library",
"//pkg/runtime/schema:go_default_library",
],
)
go_library( go_library(
name = "go_default_library", name = "go_default_library",
srcs = [ srcs = [
"doc.go", "doc.go",
"errors.go", "errors.go",
"status.go",
"writers.go",
], ],
tags = ["automanaged"], tags = ["automanaged"],
deps = [ deps = [
"//pkg/api/rest:go_default_library",
"//pkg/apis/meta/v1: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/storage:go_default_library",
"//pkg/util/flushwriter:go_default_library",
"//pkg/util/runtime:go_default_library", "//pkg/util/runtime:go_default_library",
"//pkg/util/wsstream:go_default_library",
],
)
go_test(
name = "go_default_test",
srcs = ["status_test.go"],
library = ":go_default_library",
tags = ["automanaged"],
deps = [
"//pkg/api:go_default_library",
"//pkg/api/errors:go_default_library",
"//pkg/apis/meta/v1:go_default_library",
"//pkg/runtime/schema:go_default_library",
], ],
) )
...@@ -15,4 +15,4 @@ limitations under the License. ...@@ -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 ...@@ -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 ( ...@@ -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 { ...@@ -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 ...@@ -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 { ...@@ -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 { ...@@ -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 ...@@ -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 ( ...@@ -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) { ...@@ -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 ( ...@@ -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 ...@@ -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 ...@@ -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 ...@@ -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) { ...@@ -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 ( ...@@ -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 ( ...@@ -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 ...@@ -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 ( ...@@ -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 ...@@ -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 ...@@ -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. ...@@ -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 ...@@ -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 ( ...@@ -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 { ...@@ -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) { ...@@ -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 ( ...@@ -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 ...@@ -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 ...@@ -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) { ...@@ -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 { ...@@ -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. ...@@ -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( ...@@ -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( ...@@ -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 ...@@ -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 ( ...@@ -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( ...@@ -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 ( ...@@ -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 ...@@ -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 ...@@ -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 ( ...@@ -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 ...@@ -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 ( ...@@ -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 ...@@ -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 ( ...@@ -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 ...@@ -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 { ...@@ -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) { ...@@ -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 ...@@ -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 ...@@ -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( ...@@ -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 ( ...@@ -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( ...@@ -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 ( ...@@ -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 ( ...@@ -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) { ...@@ -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 ( ...@@ -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"
) )
......
...@@ -18,9 +18,9 @@ go_library( ...@@ -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",
......
...@@ -29,9 +29,9 @@ import ( ...@@ -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 ( ...@@ -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 { ...@@ -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 ...@@ -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 ...@@ -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 ...@@ -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 ...@@ -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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment