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:
Kubernetes Submit Queue 2017-01-03 07:40:28 -08:00 committed by GitHub
commit 123026aa28
84 changed files with 293 additions and 351 deletions

View File

@ -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",

View File

@ -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

View File

@ -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"

View File

@ -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"

View File

@ -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

View File

@ -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

View File

@ -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
} }

View File

@ -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"

View File

@ -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",
],
)

View File

@ -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",

View File

@ -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",

View File

@ -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() {

View File

@ -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)
} }

View File

@ -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"
) )

View File

@ -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"

View File

@ -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",
], ],
) )

View File

@ -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
} }

View File

@ -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 {

View File

@ -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)
}) })
} }

View File

@ -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)

View File

@ -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"

View File

@ -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
} }
} }

View File

@ -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
} }

View File

@ -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"
) )

View File

@ -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"

View File

@ -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",

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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",
],
)

View File

@ -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"

View File

@ -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)
}

View File

@ -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
}

View File

@ -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)
} }

View File

@ -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)
}

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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)

View File

@ -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,
} }

View File

@ -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"

View File

@ -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",
], ],
) )

View File

@ -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
} }

View File

@ -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

View File

@ -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)

View File

@ -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")
} }

View File

@ -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), ""
} }

View File

@ -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()

View File

@ -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",

View File

@ -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"
) )

View File

@ -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",

View File

@ -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"
) )

View File

@ -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

View File

@ -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"
) )

View File

@ -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",

View File

@ -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,

View File

@ -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.

View File

@ -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

1 name owner auto-assigned
587 k8s.io/kubernetes/pkg/apis/policy/validation deads2k 1
588 k8s.io/kubernetes/pkg/apis/rbac/validation erictune 0
589 k8s.io/kubernetes/pkg/apis/storage/validation caesarxuchao 1
590 k8s.io/kubernetes/pkg/apiserver k8s.io/kubernetes/pkg/genericapiserver/api nikhiljindal 0
591 k8s.io/kubernetes/pkg/apiserver/filters k8s.io/kubernetes/pkg/genericapiserver/api/filters dchen1107 1
592 k8s.io/kubernetes/pkg/apiserver/handlers k8s.io/kubernetes/pkg/genericapiserver/api/handlers rkouj 0
593 k8s.io/kubernetes/pkg/apiserver/handlers/errors k8s.io/kubernetes/pkg/genericapiserver/api/handlers/errors rkouj 0
594 k8s.io/kubernetes/pkg/apiserver/handlers/negotiation k8s.io/kubernetes/pkg/genericapiserver/api/handlers/negotiation rkouj 0
595 k8s.io/kubernetes/pkg/apiserver/request k8s.io/kubernetes/pkg/genericapiserver/api/request lavalamp 1
596 k8s.io/kubernetes/pkg/auth/authenticator/bearertoken liggitt 0
597 k8s.io/kubernetes/pkg/auth/authorizer/abac liggitt 0
598 k8s.io/kubernetes/pkg/auth/authorizer/union liggitt 0