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/rest: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/client/cache:go_default_library",
"//pkg/client/clientset_generated/clientset:go_default_library",
@ -41,6 +39,8 @@ go_library(
"//pkg/client/transport:go_default_library",
"//pkg/controller: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/labels:go_default_library",
"//pkg/registry/generic:go_default_library",
@ -69,10 +69,10 @@ go_test(
"//pkg/api:go_default_library",
"//pkg/api/v1:go_default_library",
"//pkg/apis/meta/v1:go_default_library",
"//pkg/apiserver/request:go_default_library",
"//pkg/auth/user:go_default_library",
"//pkg/client/cache:go_default_library",
"//pkg/client/listers/core/v1:go_default_library",
"//pkg/genericapiserver/api/request:go_default_library",
"//pkg/runtime:go_default_library",
"//pkg/util/diff: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/rest"
apiserverfilters "k8s.io/kubernetes/pkg/apiserver/filters"
authhandlers "k8s.io/kubernetes/pkg/auth/handlers"
kubeclientset "k8s.io/kubernetes/pkg/client/clientset_generated/clientset"
kubeinformers "k8s.io/kubernetes/pkg/client/informers/informers_generated"
v1listers "k8s.io/kubernetes/pkg/client/listers/core/v1"
"k8s.io/kubernetes/pkg/genericapiserver"
genericapifilters "k8s.io/kubernetes/pkg/genericapiserver/api/filters"
genericfilters "k8s.io/kubernetes/pkg/genericapiserver/filters"
"k8s.io/kubernetes/pkg/registry/generic"
"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`
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 is so that everyone can hit the proxy and we can properly identify the user. The backing
// API server will deal with authorization
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
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 = genericfilters.WithCORS(handler, c.CorsAllowedOriginList, nil, nil, nil, "true")
handler = genericfilters.WithPanicRecovery(handler, c.RequestContextMapper)
handler = genericfilters.WithTimeoutForNonLongRunningRequests(handler, 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)
return handler, nil

View File

@ -23,8 +23,8 @@ import (
"k8s.io/kubernetes/pkg/api"
apierrors "k8s.io/kubernetes/pkg/api/errors"
metav1 "k8s.io/kubernetes/pkg/apis/meta/v1"
"k8s.io/kubernetes/pkg/apiserver/handlers/responsewriters"
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/runtime"

View File

@ -22,9 +22,9 @@ import (
"sync"
"k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/apiserver/handlers/responsewriters"
"k8s.io/kubernetes/pkg/client/restclient"
"k8s.io/kubernetes/pkg/client/transport"
"k8s.io/kubernetes/pkg/genericapiserver/api/handlers/responsewriters"
genericrest "k8s.io/kubernetes/pkg/registry/generic/rest"
"k8s.io/kubernetes/pkg/runtime"
"k8s.io/kubernetes/pkg/util/httpstream/spdy"

View File

@ -26,8 +26,8 @@ import (
"testing"
"k8s.io/kubernetes/pkg/api"
apiserverrequest "k8s.io/kubernetes/pkg/apiserver/request"
"k8s.io/kubernetes/pkg/auth/user"
genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request"
"k8s.io/kubernetes/pkg/util/sets"
"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)
}
resolver := &apiserverrequest.RequestInfoFactory{
resolver := &genericapirequest.RequestInfoFactory{
APIPrefixes: sets.NewString("api", "apis"),
GrouplessAPIPrefixes: sets.NewString("api"),
}
info, err := resolver.NewRequestInfo(req)
if err == nil {
ctx = apiserverrequest.WithRequestInfo(ctx, info)
ctx = genericapirequest.WithRequestInfo(ctx, info)
}
return ctx, true

View File

@ -96,9 +96,6 @@ pkg/apis/policy/install
pkg/apis/rbac/install
pkg/apis/storage/install
pkg/apis/storage/validation
pkg/apiserver/audit
pkg/apiserver/handlers/responsewriters
pkg/apiserver/openapi
pkg/auth/authenticator
pkg/auth/authorizer/union
pkg/client/conditions
@ -179,6 +176,9 @@ pkg/controller/volume/reconciler
pkg/controller/volume/statusupdater
pkg/conversion/queryparams
pkg/credentialprovider/aws
pkg/genericapiserver/api/audit
pkg/genericapiserver/api/handlers/responsewriters
pkg/genericapiserver/api/openapi
pkg/genericapiserver/filters
pkg/genericapiserver/mux
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
// of StatusError. Used by pkg/apiserver.
// of StatusError.
func (e *StatusError) Status() metav1.Status {
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/registered: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/authorizer:go_default_library",
"//pkg/auth/authorizer/union:go_default_library",
"//pkg/auth/handlers:go_default_library",
"//pkg/auth/user: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/authorizer:go_default_library",
"//pkg/genericapiserver/filters:go_default_library",

View File

@ -26,11 +26,11 @@ go_library(
"//pkg/api/rest:go_default_library",
"//pkg/apis/extensions: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/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/schema:go_default_library",
"//pkg/util/errors:go_default_library",
@ -58,12 +58,12 @@ go_test(
"//pkg/api/testing:go_default_library",
"//pkg/api/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/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/runtime: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.
*/
package apiserver
package api
import (
"k8s.io/kubernetes/pkg/apiserver/metrics"
"k8s.io/kubernetes/pkg/genericapiserver/api/metrics"
)
func init() {

View File

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
package apiserver
package api
import (
"bytes"
@ -43,11 +43,11 @@ import (
"k8s.io/kubernetes/pkg/api/v1"
apiv1 "k8s.io/kubernetes/pkg/api/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"
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/runtime"
"k8s.io/kubernetes/pkg/runtime/schema"
@ -129,11 +129,11 @@ func addGrouplessTypes() {
TimeoutSeconds *int64 `json:"timeoutSeconds,omitempty"`
}
api.Scheme.AddKnownTypes(grouplessGroupVersion,
&apiservertesting.Simple{}, &apiservertesting.SimpleList{}, &ListOptions{}, &metav1.ExportOptions{},
&v1.DeleteOptions{}, &apiservertesting.SimpleGetOptions{}, &apiservertesting.SimpleRoot{})
&genericapitesting.Simple{}, &genericapitesting.SimpleList{}, &ListOptions{}, &metav1.ExportOptions{},
&v1.DeleteOptions{}, &genericapitesting.SimpleGetOptions{}, &genericapitesting.SimpleRoot{})
api.Scheme.AddKnownTypes(grouplessInternalGroupVersion,
&apiservertesting.Simple{}, &apiservertesting.SimpleList{}, &api.ListOptions{}, &metav1.ExportOptions{},
&apiservertesting.SimpleGetOptions{}, &apiservertesting.SimpleRoot{})
&genericapitesting.Simple{}, &genericapitesting.SimpleList{}, &api.ListOptions{}, &metav1.ExportOptions{},
&genericapitesting.SimpleGetOptions{}, &genericapitesting.SimpleRoot{})
}
func addTestTypes() {
@ -147,13 +147,13 @@ func addTestTypes() {
TimeoutSeconds *int64 `json:"timeoutSeconds,omitempty"`
}
api.Scheme.AddKnownTypes(testGroupVersion,
&apiservertesting.Simple{}, &apiservertesting.SimpleList{}, &ListOptions{}, &metav1.ExportOptions{},
&v1.DeleteOptions{}, &apiservertesting.SimpleGetOptions{}, &apiservertesting.SimpleRoot{},
&genericapitesting.Simple{}, &genericapitesting.SimpleList{}, &ListOptions{}, &metav1.ExportOptions{},
&v1.DeleteOptions{}, &genericapitesting.SimpleGetOptions{}, &genericapitesting.SimpleRoot{},
&SimpleXGSubresource{})
api.Scheme.AddKnownTypes(testGroupVersion, &v1.Pod{})
api.Scheme.AddKnownTypes(testInternalGroupVersion,
&apiservertesting.Simple{}, &apiservertesting.SimpleList{}, &api.ListOptions{}, &metav1.ExportOptions{},
&apiservertesting.SimpleGetOptions{}, &apiservertesting.SimpleRoot{},
&genericapitesting.Simple{}, &genericapitesting.SimpleList{}, &api.ListOptions{}, &metav1.ExportOptions{},
&genericapitesting.SimpleGetOptions{}, &genericapitesting.SimpleRoot{},
&SimpleXGSubresource{})
api.Scheme.AddKnownTypes(testInternalGroupVersion, &api.Pod{})
// Register SimpleXGSubresource in both testGroupVersion and testGroup2Version, and also their
@ -175,8 +175,8 @@ func addNewTestTypes() {
TimeoutSeconds *int64 `json:"timeoutSeconds,omitempty"`
}
api.Scheme.AddKnownTypes(newGroupVersion,
&apiservertesting.Simple{}, &apiservertesting.SimpleList{}, &ListOptions{}, &metav1.ExportOptions{},
&api.DeleteOptions{}, &apiservertesting.SimpleGetOptions{}, &apiservertesting.SimpleRoot{},
&genericapitesting.Simple{}, &genericapitesting.SimpleList{}, &ListOptions{}, &metav1.ExportOptions{},
&api.DeleteOptions{}, &genericapitesting.SimpleGetOptions{}, &genericapitesting.SimpleRoot{},
&v1.Pod{},
)
versioned.AddToGroupVersion(api.Scheme, newGroupVersion)
@ -315,7 +315,7 @@ func handleInternal(storage map[string]rest.Storage, admissionControl admission.
}
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)
if err != nil {
t.Fatal(err)
@ -330,7 +330,7 @@ func TestSimpleSetupRight(t *testing.T) {
}
func TestSimpleOptionsSetupRight(t *testing.T) {
s := &apiservertesting.SimpleGetOptions{}
s := &genericapitesting.SimpleGetOptions{}
wire, err := runtime.Encode(codec, s)
if err != nil {
t.Fatal(err)
@ -348,11 +348,11 @@ type SimpleRESTStorage struct {
lock sync.Mutex
errors map[string]error
list []apiservertesting.Simple
item apiservertesting.Simple
list []genericapitesting.Simple
item genericapitesting.Simple
updated *apiservertesting.Simple
created *apiservertesting.Simple
updated *genericapitesting.Simple
created *genericapitesting.Simple
stream *SimpleStream
@ -385,7 +385,7 @@ func (storage *SimpleRESTStorage) Export(ctx api.Context, name string, opts meta
if err != nil {
return nil, err
}
s, ok := obj.(*apiservertesting.Simple)
s, ok := obj.(*genericapitesting.Simple)
if !ok {
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) {
storage.checkContext(ctx)
result := &apiservertesting.SimpleList{
result := &genericapitesting.SimpleList{
Items: storage.list,
}
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 err error
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
}
func (storage *SimpleRESTStorage) New() runtime.Object {
return &apiservertesting.Simple{}
return &genericapitesting.Simple{}
}
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) {
storage.checkContext(ctx)
storage.created = obj.(*apiservertesting.Simple)
storage.created = obj.(*genericapitesting.Simple)
if err := storage.errors["create"]; err != nil {
return nil, err
}
@ -500,7 +500,7 @@ func (storage *SimpleRESTStorage) Update(ctx api.Context, name string, objInfo r
if err != nil {
return nil, false, err
}
storage.updated = obj.(*apiservertesting.Simple)
storage.updated = obj.(*genericapitesting.Simple)
if err := storage.errors["update"]; err != nil {
return nil, false, err
}
@ -577,7 +577,7 @@ type ConnecterRESTStorage struct {
var _ = rest.Connecter(&ConnecterRESTStorage{})
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) {
@ -631,7 +631,7 @@ type GetWithOptionsRESTStorage struct {
}
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)
}
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) {
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{}
@ -654,7 +654,7 @@ type NamedCreaterRESTStorage struct {
func (storage *NamedCreaterRESTStorage) Create(ctx api.Context, name string, obj runtime.Object) (runtime.Object, error) {
storage.checkContext(ctx)
storage.created = obj.(*apiservertesting.Simple)
storage.created = obj.(*genericapitesting.Simple)
storage.createdName = name
if err := storage.errors["create"]; err != nil {
return nil, err
@ -798,7 +798,7 @@ func TestNotFound(t *testing.T) {
type UnimplementedRESTStorage struct{}
func (UnimplementedRESTStorage) New() runtime.Object {
return &apiservertesting.Simple{}
return &genericapitesting.Simple{}
}
// 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) {
storage := map[string]rest.Storage{}
simpleStorage := SimpleRESTStorage{
list: []apiservertesting.Simple{
list: []genericapitesting.Simple{
{
ObjectMeta: apiv1.ObjectMeta{Name: "something", Namespace: "other"},
Other: "foo",
@ -1141,7 +1141,7 @@ func TestNonEmptyList(t *testing.T) {
t.Logf("Data: %s", string(body))
}
var listOut apiservertesting.SimpleList
var listOut genericapitesting.SimpleList
body, err := extractBody(resp, &listOut)
if err != nil {
t.Fatalf("unexpected error: %v", err)
@ -1166,7 +1166,7 @@ func TestNonEmptyList(t *testing.T) {
func TestSelfLinkSkipsEmptyName(t *testing.T) {
storage := map[string]rest.Storage{}
simpleStorage := SimpleRESTStorage{
list: []apiservertesting.Simple{
list: []genericapitesting.Simple{
{
ObjectMeta: apiv1.ObjectMeta{Namespace: "other"},
Other: "foo",
@ -1191,7 +1191,7 @@ func TestSelfLinkSkipsEmptyName(t *testing.T) {
}
t.Logf("Data: %s", string(body))
}
var listOut apiservertesting.SimpleList
var listOut genericapitesting.SimpleList
body, err := extractBody(resp, &listOut)
if err != nil {
t.Fatalf("unexpected error: %v", err)
@ -1241,7 +1241,7 @@ func TestMetadata(t *testing.T) {
func TestExport(t *testing.T) {
storage := map[string]rest.Storage{}
simpleStorage := SimpleRESTStorage{
item: apiservertesting.Simple{
item: genericapitesting.Simple{
ObjectMeta: apiv1.ObjectMeta{
ResourceVersion: "1234",
CreationTimestamp: metav1.NewTime(time.Unix(10, 10)),
@ -1269,7 +1269,7 @@ func TestExport(t *testing.T) {
resp.Body.Close()
t.Fatalf("unexpected response: %#v\n%s\n", resp, string(data))
}
var itemOut apiservertesting.Simple
var itemOut genericapitesting.Simple
body, err := extractBody(resp, &itemOut)
if err != nil {
t.Errorf("unexpected error: %v", err)
@ -1290,7 +1290,7 @@ func TestExport(t *testing.T) {
func TestGet(t *testing.T) {
storage := map[string]rest.Storage{}
simpleStorage := SimpleRESTStorage{
item: apiservertesting.Simple{
item: genericapitesting.Simple{
Other: "foo",
},
}
@ -1312,7 +1312,7 @@ func TestGet(t *testing.T) {
if resp.StatusCode != http.StatusOK {
t.Fatalf("unexpected response: %#v", resp)
}
var itemOut apiservertesting.Simple
var itemOut genericapitesting.Simple
body, err := extractBody(resp, &itemOut)
if err != nil {
t.Errorf("unexpected error: %v", err)
@ -1329,7 +1329,7 @@ func TestGet(t *testing.T) {
func TestGetPretty(t *testing.T) {
storage := map[string]rest.Storage{}
simpleStorage := SimpleRESTStorage{
item: apiservertesting.Simple{
item: genericapitesting.Simple{
Other: "foo",
},
}
@ -1379,13 +1379,13 @@ func TestGetPretty(t *testing.T) {
if resp.StatusCode != http.StatusOK {
t.Fatal(err)
}
var itemOut apiservertesting.Simple
var itemOut genericapitesting.Simple
body, err := extractBody(resp, &itemOut)
if err != nil {
t.Fatal(err)
}
// 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 {
t.Fatal(err)
}
@ -1487,7 +1487,7 @@ func TestGetWithOptions(t *testing.T) {
storage := map[string]rest.Storage{}
simpleStorage := GetWithOptionsRESTStorage{
SimpleRESTStorage: &SimpleRESTStorage{
item: apiservertesting.Simple{
item: genericapitesting.Simple{
Other: "foo",
},
},
@ -1504,7 +1504,7 @@ func TestGetWithOptions(t *testing.T) {
if resp.StatusCode != http.StatusOK {
t.Fatalf("unexpected response: %#v", resp)
}
var itemOut apiservertesting.Simple
var itemOut genericapitesting.Simple
body, err := extractBody(resp, &itemOut)
if err != nil {
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))
}
opts, ok := simpleStorage.optionsReceived.(*apiservertesting.SimpleGetOptions)
opts, ok := simpleStorage.optionsReceived.(*genericapitesting.SimpleGetOptions)
if !ok {
t.Errorf("Unexpected options object received: %#v", simpleStorage.optionsReceived)
return
@ -1528,7 +1528,7 @@ func TestGetWithOptionsAndPath(t *testing.T) {
storage := map[string]rest.Storage{}
simpleStorage := GetWithOptionsRESTStorage{
SimpleRESTStorage: &SimpleRESTStorage{
item: apiservertesting.Simple{
item: genericapitesting.Simple{
Other: "foo",
},
},
@ -1546,7 +1546,7 @@ func TestGetWithOptionsAndPath(t *testing.T) {
if resp.StatusCode != http.StatusOK {
t.Fatalf("unexpected response: %#v", resp)
}
var itemOut apiservertesting.Simple
var itemOut genericapitesting.Simple
body, err := extractBody(resp, &itemOut)
if err != nil {
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))
}
opts, ok := simpleStorage.optionsReceived.(*apiservertesting.SimpleGetOptions)
opts, ok := simpleStorage.optionsReceived.(*genericapitesting.SimpleGetOptions)
if !ok {
t.Errorf("Unexpected options object received: %#v", simpleStorage.optionsReceived)
return
@ -1568,7 +1568,7 @@ func TestGetWithOptionsAndPath(t *testing.T) {
func TestGetAlternateSelfLink(t *testing.T) {
storage := map[string]rest.Storage{}
simpleStorage := SimpleRESTStorage{
item: apiservertesting.Simple{
item: genericapitesting.Simple{
Other: "foo",
},
}
@ -1590,7 +1590,7 @@ func TestGetAlternateSelfLink(t *testing.T) {
if resp.StatusCode != http.StatusOK {
t.Fatalf("unexpected response: %#v", resp)
}
var itemOut apiservertesting.Simple
var itemOut genericapitesting.Simple
body, err := extractBody(resp, &itemOut)
if err != nil {
t.Fatalf("unexpected error: %v", err)
@ -1606,7 +1606,7 @@ func TestGetAlternateSelfLink(t *testing.T) {
func TestGetNamespaceSelfLink(t *testing.T) {
storage := map[string]rest.Storage{}
simpleStorage := SimpleRESTStorage{
item: apiservertesting.Simple{
item: genericapitesting.Simple{
Other: "foo",
},
}
@ -1628,7 +1628,7 @@ func TestGetNamespaceSelfLink(t *testing.T) {
if resp.StatusCode != http.StatusOK {
t.Fatalf("unexpected response: %#v", resp)
}
var itemOut apiservertesting.Simple
var itemOut genericapitesting.Simple
body, err := extractBody(resp, &itemOut)
if err != nil {
t.Fatalf("unexpected error: %v", err)
@ -1722,7 +1722,7 @@ func TestConnect(t *testing.T) {
func TestConnectResponderObject(t *testing.T) {
itemID := "theID"
simple := &apiservertesting.Simple{Other: "foo"}
simple := &genericapitesting.Simple{Other: "foo"}
connectStorage := &ConnecterRESTStorage{}
connectStorage.handlerFunc = func() http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
@ -1806,7 +1806,7 @@ func TestConnectResponderError(t *testing.T) {
func TestConnectWithOptionsRouteParams(t *testing.T) {
connectStorage := &ConnecterRESTStorage{
connectHandler: &OutputConnect{},
emptyConnectOptions: &apiservertesting.SimpleGetOptions{},
emptyConnectOptions: &genericapitesting.SimpleGetOptions{},
}
storage := map[string]rest.Storage{
"simple": &SimpleRESTStorage{},
@ -1837,7 +1837,7 @@ func TestConnectWithOptions(t *testing.T) {
connectHandler: &OutputConnect{
response: responseText,
},
emptyConnectOptions: &apiservertesting.SimpleGetOptions{},
emptyConnectOptions: &genericapitesting.SimpleGetOptions{},
}
storage := map[string]rest.Storage{
"simple": &SimpleRESTStorage{},
@ -1869,7 +1869,7 @@ func TestConnectWithOptions(t *testing.T) {
if connectStorage.receivedResponder == nil {
t.Errorf("Unexpected responder")
}
opts, ok := connectStorage.receivedConnectOptions.(*apiservertesting.SimpleGetOptions)
opts, ok := connectStorage.receivedConnectOptions.(*genericapitesting.SimpleGetOptions)
if !ok {
t.Fatalf("Unexpected options type: %#v", connectStorage.receivedConnectOptions)
}
@ -1886,7 +1886,7 @@ func TestConnectWithOptionsAndPath(t *testing.T) {
connectHandler: &OutputConnect{
response: responseText,
},
emptyConnectOptions: &apiservertesting.SimpleGetOptions{},
emptyConnectOptions: &genericapitesting.SimpleGetOptions{},
takesPath: "atAPath",
}
storage := map[string]rest.Storage{
@ -1916,7 +1916,7 @@ func TestConnectWithOptionsAndPath(t *testing.T) {
if string(body) != responseText {
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 {
t.Fatalf("Unexpected options type: %#v", connectStorage.receivedConnectOptions)
}
@ -2174,7 +2174,7 @@ func TestDeleteMissing(t *testing.T) {
func TestPatch(t *testing.T) {
storage := map[string]rest.Storage{}
ID := "id"
item := &apiservertesting.Simple{
item := &genericapitesting.Simple{
ObjectMeta: apiv1.ObjectMeta{
Name: ID,
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) {
storage := map[string]rest.Storage{}
ID := "id"
item := &apiservertesting.Simple{
item := &genericapitesting.Simple{
ObjectMeta: apiv1.ObjectMeta{
Name: ID,
Namespace: "", // update should allow the client to send an empty namespace
@ -2254,7 +2254,7 @@ func TestUpdate(t *testing.T) {
server := httptest.NewServer(handler)
defer server.Close()
item := &apiservertesting.Simple{
item := &genericapitesting.Simple{
ObjectMeta: apiv1.ObjectMeta{
Name: ID,
Namespace: "", // update should allow the client to send an empty namespace
@ -2291,7 +2291,7 @@ func TestUpdateInvokesAdmissionControl(t *testing.T) {
server := httptest.NewServer(handler)
defer server.Close()
item := &apiservertesting.Simple{
item := &genericapitesting.Simple{
ObjectMeta: apiv1.ObjectMeta{
Name: ID,
Namespace: api.NamespaceDefault,
@ -2324,7 +2324,7 @@ func TestUpdateRequiresMatchingName(t *testing.T) {
server := httptest.NewServer(handler)
defer server.Close()
item := &apiservertesting.Simple{
item := &genericapitesting.Simple{
Other: "bar",
}
body, err := runtime.Encode(testCodec, item)
@ -2353,7 +2353,7 @@ func TestUpdateAllowsMissingNamespace(t *testing.T) {
server := httptest.NewServer(handler)
defer server.Close()
item := &apiservertesting.Simple{
item := &genericapitesting.Simple{
ObjectMeta: apiv1.ObjectMeta{
Name: ID,
},
@ -2390,7 +2390,7 @@ func TestUpdateAllowsMismatchedNamespaceOnError(t *testing.T) {
server := httptest.NewServer(handler)
defer server.Close()
item := &apiservertesting.Simple{
item := &genericapitesting.Simple{
ObjectMeta: apiv1.ObjectMeta{
Name: ID,
Namespace: "other", // does not match request
@ -2427,7 +2427,7 @@ func TestUpdatePreventsMismatchedNamespace(t *testing.T) {
server := httptest.NewServer(handler)
defer server.Close()
item := &apiservertesting.Simple{
item := &genericapitesting.Simple{
ObjectMeta: apiv1.ObjectMeta{
Name: ID,
Namespace: "other",
@ -2462,7 +2462,7 @@ func TestUpdateMissing(t *testing.T) {
server := httptest.NewServer(handler)
defer server.Close()
item := &apiservertesting.Simple{
item := &genericapitesting.Simple{
ObjectMeta: apiv1.ObjectMeta{
Name: ID,
Namespace: api.NamespaceDefault,
@ -2497,7 +2497,7 @@ func TestCreateNotFound(t *testing.T) {
defer server.Close()
client := http.Client{}
simple := &apiservertesting.Simple{Other: "foo"}
simple := &genericapitesting.Simple{Other: "foo"}
data, err := runtime.Encode(testCodec, simple)
if err != nil {
t.Errorf("unexpected error: %v", err)
@ -2630,8 +2630,8 @@ func TestUpdateREST(t *testing.T) {
func TestParentResourceIsRequired(t *testing.T) {
storage := &SimpleTypedStorage{
baseType: &apiservertesting.SimpleRoot{}, // a root scoped type
item: &apiservertesting.SimpleRoot{},
baseType: &genericapitesting.SimpleRoot{}, // a root scoped type
item: &genericapitesting.SimpleRoot{},
}
group := &APIGroupVersion{
Storage: map[string]rest.Storage{
@ -2660,8 +2660,8 @@ func TestParentResourceIsRequired(t *testing.T) {
}
storage = &SimpleTypedStorage{
baseType: &apiservertesting.SimpleRoot{}, // a root scoped type
item: &apiservertesting.SimpleRoot{},
baseType: &genericapitesting.SimpleRoot{}, // a root scoped type
item: &genericapitesting.SimpleRoot{},
}
group = &APIGroupVersion{
Storage: map[string]rest.Storage{
@ -2719,7 +2719,7 @@ func TestCreateWithName(t *testing.T) {
defer server.Close()
client := http.Client{}
simple := &apiservertesting.Simple{Other: "foo"}
simple := &genericapitesting.Simple{Other: "foo"}
data, err := runtime.Encode(testCodec, simple)
if err != nil {
t.Errorf("unexpected error: %v", err)
@ -2808,7 +2808,7 @@ func TestCreate(t *testing.T) {
defer server.Close()
client := http.Client{}
simple := &apiservertesting.Simple{
simple := &genericapitesting.Simple{
Other: "bar",
}
data, err := runtime.Encode(testCodec, simple)
@ -2832,7 +2832,7 @@ func TestCreate(t *testing.T) {
t.Errorf("unexpected error: %v", err)
}
var itemOut apiservertesting.Simple
var itemOut genericapitesting.Simple
body, err := extractBody(response, &itemOut)
if err != nil {
t.Errorf("unexpected error: %v %#v", err, response)
@ -2869,7 +2869,7 @@ func TestCreateYAML(t *testing.T) {
client := http.Client{}
// yaml encoder
simple := &apiservertesting.Simple{
simple := &genericapitesting.Simple{
Other: "bar",
}
info, ok := runtime.SerializerInfoForMediaType(api.Codecs.SupportedMediaTypes(), "application/yaml")
@ -2902,7 +2902,7 @@ func TestCreateYAML(t *testing.T) {
t.Fatalf("unexpected error: %v", err)
}
var itemOut apiservertesting.Simple
var itemOut genericapitesting.Simple
body, err := extractBodyDecoder(response, &itemOut, decoder)
if err != nil {
t.Fatalf("unexpected error: %v %#v", err, response)
@ -2937,7 +2937,7 @@ func TestCreateInNamespace(t *testing.T) {
defer server.Close()
client := http.Client{}
simple := &apiservertesting.Simple{
simple := &genericapitesting.Simple{
Other: "bar",
}
data, err := runtime.Encode(testCodec, simple)
@ -2961,7 +2961,7 @@ func TestCreateInNamespace(t *testing.T) {
t.Fatalf("unexpected error: %v", err)
}
var itemOut apiservertesting.Simple
var itemOut genericapitesting.Simple
body, err := extractBody(response, &itemOut)
if err != nil {
t.Fatalf("unexpected error: %v\n%s", err, data)
@ -2997,7 +2997,7 @@ func TestCreateInvokesAdmissionControl(t *testing.T) {
defer server.Close()
client := http.Client{}
simple := &apiservertesting.Simple{
simple := &genericapitesting.Simple{
Other: "bar",
}
data, err := runtime.Encode(testCodec, simple)
@ -3084,7 +3084,7 @@ func TestWriteJSONDecodeError(t *testing.T) {
if status.Reason != metav1.StatusReasonUnknown {
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)
}
}
@ -3129,7 +3129,7 @@ func TestCreateTimeout(t *testing.T) {
server := httptest.NewServer(handler)
defer server.Close()
simple := &apiservertesting.Simple{Other: "foo"}
simple := &genericapitesting.Simple{Other: "foo"}
data, err := runtime.Encode(testCodec, simple)
if err != nil {
t.Errorf("unexpected error: %v", err)
@ -3146,7 +3146,7 @@ func TestCreateChecksAPIVersion(t *testing.T) {
defer server.Close()
client := http.Client{}
simple := &apiservertesting.Simple{}
simple := &genericapitesting.Simple{}
//using newCodec and send the request to testVersion URL shall cause a discrepancy in apiVersion
data, err := runtime.Encode(newCodec, simple)
if err != nil {
@ -3177,7 +3177,7 @@ func TestCreateDefaultsAPIVersion(t *testing.T) {
defer server.Close()
client := http.Client{}
simple := &apiservertesting.Simple{}
simple := &genericapitesting.Simple{}
data, err := runtime.Encode(codec, simple)
if err != nil {
t.Errorf("unexpected error: %v", err)
@ -3212,7 +3212,7 @@ func TestUpdateChecksAPIVersion(t *testing.T) {
defer server.Close()
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)
if err != nil {
t.Fatalf("unexpected error: %v", err)
@ -3399,7 +3399,7 @@ func BenchmarkUpdateProtobuf(b *testing.B) {
}
func newTestServer(handler http.Handler) *httptest.Server {
handler = filters.WithRequestInfo(handler, newTestRequestInfoResolver(), requestContextMapper)
handler = genericapifilters.WithRequestInfo(handler, newTestRequestInfoResolver(), requestContextMapper)
handler = api.WithRequestContext(handler, requestContextMapper)
return httptest.NewServer(handler)
}

View File

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
package apiserver
package api
import (
"bytes"
@ -25,9 +25,9 @@ import (
"github.com/emicklei/go-restful"
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/handlers/responsewriters"
"k8s.io/kubernetes/pkg/genericapiserver/api/handlers"
"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/schema"
)

View File

@ -14,5 +14,5 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
// Package apiserver contains the code that provides a rest.ful api service.
package apiserver // import "k8s.io/kubernetes/pkg/apiserver"
// Package api contains the code that provides a rest.ful api service.
package api // import "k8s.io/kubernetes/pkg/genericapiserver/api"

View File

@ -14,7 +14,6 @@ go_library(
"audit.go",
"authorization.go",
"doc.go",
"errors.go",
"impersonation.go",
"requestinfo.go",
],
@ -22,13 +21,13 @@ go_library(
deps = [
"//pkg/api:go_default_library",
"//pkg/apis/authentication:go_default_library",
"//pkg/apiserver/request:go_default_library",
"//pkg/auth/authorizer: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/serviceaccount:go_default_library",
"//pkg/util/net:go_default_library",
"//pkg/util/runtime:go_default_library",
"//vendor:github.com/golang/glog",
"//vendor:github.com/pborman/uuid",
],
@ -48,9 +47,10 @@ go_test(
"//pkg/api:go_default_library",
"//pkg/apis/authentication:go_default_library",
"//pkg/apis/batch:go_default_library",
"//pkg/apiserver/request:go_default_library",
"//pkg/auth/authorizer: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",
],
)

View File

@ -31,6 +31,7 @@ import (
"k8s.io/kubernetes/pkg/api"
authenticationapi "k8s.io/kubernetes/pkg/apis/authentication"
"k8s.io/kubernetes/pkg/genericapiserver/api/handlers/responsewriters"
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) {
ctx, ok := requestContextMapper.Get(req)
if !ok {
internalError(w, req, errors.New("no context found for request"))
responsewriters.InternalError(w, req, errors.New("no context found for request"))
return
}
attribs, err := GetAuthorizerAttributes(ctx)
if err != nil {
internalError(w, req, err)
responsewriters.InternalError(w, req, err)
return
}

View File

@ -29,8 +29,8 @@ import (
"testing"
"k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/apiserver/request"
"k8s.io/kubernetes/pkg/auth/user"
"k8s.io/kubernetes/pkg/genericapiserver/api/request"
)
type simpleResponseWriter struct {

View File

@ -23,8 +23,9 @@ import (
"github.com/golang/glog"
"k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/apiserver/request"
"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.
@ -36,13 +37,13 @@ func WithAuthorization(handler http.Handler, requestContextMapper api.RequestCon
return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
ctx, ok := requestContextMapper.Get(req)
if !ok {
internalError(w, req, errors.New("no context found for request"))
responsewriters.InternalError(w, req, errors.New("no context found for request"))
return
}
attributes, err := GetAuthorizerAttributes(ctx)
if err != nil {
internalError(w, req, err)
responsewriters.InternalError(w, req, err)
return
}
authorized, reason, err := a.Authorize(attributes)
@ -51,12 +52,12 @@ func WithAuthorization(handler http.Handler, requestContextMapper api.RequestCon
return
}
if err != nil {
internalError(w, req, err)
responsewriters.InternalError(w, req, err)
return
}
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/apis/batch"
"k8s.io/kubernetes/pkg/auth/authorizer"
"k8s.io/kubernetes/pkg/genericapiserver/api/handlers/responsewriters"
)
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) {
ctx, ok := mapper.Get(req)
if !ok {
internalError(w, req, errors.New("no context found for request"))
responsewriters.InternalError(w, req, errors.New("no context found for request"))
return
}
attribs, err = GetAuthorizerAttributes(ctx)

View File

@ -16,4 +16,4 @@ limitations under the License.
// Package filters contains all the http handler chain filters which
// _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"
"k8s.io/kubernetes/pkg/auth/authorizer"
"k8s.io/kubernetes/pkg/auth/user"
"k8s.io/kubernetes/pkg/genericapiserver/api/handlers/responsewriters"
"k8s.io/kubernetes/pkg/httplog"
"k8s.io/kubernetes/pkg/serviceaccount"
)
@ -38,7 +39,7 @@ func WithImpersonation(handler http.Handler, requestContextMapper api.RequestCon
impersonationRequests, err := buildImpersonationRequests(req.Header)
if err != nil {
glog.V(4).Infof("%v", err)
internalError(w, req, err)
responsewriters.InternalError(w, req, err)
return
}
if len(impersonationRequests) == 0 {
@ -48,12 +49,12 @@ func WithImpersonation(handler http.Handler, requestContextMapper api.RequestCon
ctx, exists := requestContextMapper.Get(req)
if !exists {
internalError(w, req, errors.New("no context found for request"))
responsewriters.InternalError(w, req, errors.New("no context found for request"))
return
}
requestor, exists := api.UserFrom(ctx)
if !exists {
internalError(w, req, errors.New("no user found for request"))
responsewriters.InternalError(w, req, errors.New("no user found for request"))
return
}
@ -102,14 +103,14 @@ func WithImpersonation(handler http.Handler, requestContextMapper api.RequestCon
default:
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
}
allowed, reason, err := a.Authorize(actingAsAttributes)
if err != nil || !allowed {
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
}
}

View File

@ -22,7 +22,8 @@ import (
"net/http"
"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.
@ -30,13 +31,13 @@ func WithRequestInfo(handler http.Handler, resolver *request.RequestInfoFactory,
return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
ctx, ok := requestContextMapper.Get(req)
if !ok {
internalError(w, req, errors.New("no context found for request"))
responsewriters.InternalError(w, req, errors.New("no context found for request"))
return
}
info, err := resolver.NewRequestInfo(req)
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
}

View File

@ -17,7 +17,7 @@ limitations under the License.
package filters
import (
"k8s.io/kubernetes/pkg/apiserver/request"
"k8s.io/kubernetes/pkg/genericapiserver/api/request"
"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.
*/
package apiserver
package api
import (
"fmt"
@ -29,7 +29,7 @@ import (
"k8s.io/kubernetes/pkg/api/meta"
"k8s.io/kubernetes/pkg/api/rest"
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/schema"
utilerrors "k8s.io/kubernetes/pkg/util/errors"

View File

@ -10,7 +10,7 @@ load(
go_test(
name = "go_default_test",
srcs = ["resthandler_test.go"],
srcs = ["rest_test.go"],
library = ":go_default_library",
tags = ["automanaged"],
deps = [
@ -36,7 +36,7 @@ go_library(
"discovery.go",
"doc.go",
"proxy.go",
"resthandler.go",
"rest.go",
"watch.go",
],
tags = ["automanaged"],
@ -47,11 +47,11 @@ go_library(
"//pkg/api/meta:go_default_library",
"//pkg/api/rest: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/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/runtime:go_default_library",
"//pkg/runtime/schema:go_default_library",

View File

@ -20,7 +20,7 @@ import (
"net/http"
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/schema"

View File

@ -15,4 +15,4 @@ limitations under the License.
*/
// 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 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"
apierrors "k8s.io/kubernetes/pkg/api/errors"
"k8s.io/kubernetes/pkg/api/rest"
"k8s.io/kubernetes/pkg/apiserver/handlers/responsewriters"
"k8s.io/kubernetes/pkg/apiserver/metrics"
"k8s.io/kubernetes/pkg/apiserver/request"
"k8s.io/kubernetes/pkg/genericapiserver/api/handlers/responsewriters"
"k8s.io/kubernetes/pkg/genericapiserver/api/metrics"
"k8s.io/kubernetes/pkg/genericapiserver/api/request"
"k8s.io/kubernetes/pkg/httplog"
"k8s.io/kubernetes/pkg/runtime"
"k8s.io/kubernetes/pkg/runtime/schema"

View File

@ -8,9 +8,32 @@ load(
"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(
name = "go_default_test",
srcs = ["errors_test.go"],
srcs = ["status_test.go"],
library = ":go_default_library",
tags = ["automanaged"],
deps = [
@ -20,17 +43,3 @@ go_test(
"//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 // 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.
*/
package filters
package responsewriters
import (
"fmt"
@ -24,16 +24,16 @@ import (
"k8s.io/kubernetes/pkg/util/runtime"
)
// badGatewayError renders a simple bad gateway error.
func badGatewayError(w http.ResponseWriter, req *http.Request) {
// BadGatewayError renders a simple bad gateway error.
func BadGatewayError(w http.ResponseWriter, req *http.Request) {
w.Header().Set("Content-Type", "text/plain")
w.Header().Set("X-Content-Type-Options", "nosniff")
w.WriteHeader(http.StatusBadGateway)
fmt.Fprintf(w, "Bad Gateway: %#v", req.RequestURI)
}
// forbidden renders a simple forbidden error
func forbidden(attributes authorizer.Attributes, w http.ResponseWriter, req *http.Request, reason string) {
// Forbidden renders a simple forbidden error
func Forbidden(attributes authorizer.Attributes, w http.ResponseWriter, req *http.Request, reason string) {
msg := forbiddenMessage(attributes)
w.Header().Set("Content-Type", "text/plain")
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)
}
// internalError renders a simple internal error
func internalError(w http.ResponseWriter, req *http.Request, err error) {
// InternalError renders a simple internal error
func InternalError(w http.ResponseWriter, req *http.Request, err error) {
w.Header().Set("Content-Type", "text/plain")
w.Header().Set("X-Content-Type-Options", "nosniff")
w.WriteHeader(http.StatusInternalServerError)
fmt.Fprintf(w, "Internal Server Error: %#v: %v", req.RequestURI, 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.
*/
package errors
package responsewriters
import (
"fmt"
@ -30,8 +30,8 @@ type statusError interface {
Status() metav1.Status
}
// ErrToAPIStatus converts an error to an metav1.Status object.
func ErrToAPIStatus(err error) *metav1.Status {
// apiStatus converts an error to an metav1.Status object.
func apiStatus(err error) *metav1.Status {
switch t := err.(type) {
case statusError:
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.
*/
package errors
package responsewriters
import (
stderrs "errors"
@ -28,7 +28,7 @@ import (
"k8s.io/kubernetes/pkg/runtime/schema"
)
func TestErrorsToAPIStatus(t *testing.T) {
func TestAPIStatus(t *testing.T) {
cases := map[error]metav1.Status{
errors.NewNotFound(schema.GroupResource{Group: "legacy.kubernetes.io", Resource: "foos"}, "bar"): {
Status: metav1.StatusFailure,
@ -65,7 +65,7 @@ func TestErrorsToAPIStatus(t *testing.T) {
},
}
for k, v := range cases {
actual := ErrToAPIStatus(k)
actual := apiStatus(k)
if !reflect.DeepEqual(actual, &v) {
t.Errorf("%s: Expected %#v, Got %#v", k, v, actual)
}

View File

@ -24,8 +24,7 @@ import (
"strconv"
"k8s.io/kubernetes/pkg/api/rest"
handlererrors "k8s.io/kubernetes/pkg/apiserver/handlers/errors"
"k8s.io/kubernetes/pkg/apiserver/handlers/negotiation"
"k8s.io/kubernetes/pkg/genericapiserver/api/handlers/negotiation"
"k8s.io/kubernetes/pkg/runtime"
"k8s.io/kubernetes/pkg/runtime/schema"
"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) {
serializer, err := negotiation.NegotiateOutputSerializer(req, s)
if err != nil {
status := handlererrors.ErrToAPIStatus(err)
status := apiStatus(err)
WriteRawJSON(int(status.Code), status, w)
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.
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)
// when writing an error, check to see if the status indicates a retry after period
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.
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))
status := handlererrors.ErrToAPIStatus(err)
status := apiStatus(err)
code := int(status.Code)
output, err := runtime.Encode(codec, status)
if err != nil {
@ -137,16 +136,3 @@ func WriteRawJSON(statusCode int, object interface{}, w http.ResponseWriter) {
w.WriteHeader(statusCode)
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/rest"
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/genericapiserver/api/handlers/negotiation"
"k8s.io/kubernetes/pkg/genericapiserver/api/handlers/responsewriters"
"k8s.io/kubernetes/pkg/runtime"
"k8s.io/kubernetes/pkg/runtime/schema"
"k8s.io/kubernetes/pkg/util"

View File

@ -24,7 +24,7 @@ import (
"time"
"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/runtime"
"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.
*/
package apiserver
package api
import (
"bytes"
@ -33,10 +33,10 @@ import (
"k8s.io/kubernetes/pkg/api/rest"
"k8s.io/kubernetes/pkg/apis/extensions"
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/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/schema"
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.
*/
package apiserver
package api
import (
"bytes"

View File

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
package apiserver
package api
import (
"bytes"

View File

@ -17,4 +17,4 @@ limitations under the License.
// Package request contains everything around extracting info from
// a http request object.
// 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.
*/
package apiserver
package api
import (
"encoding/json"
@ -34,9 +34,9 @@ import (
"k8s.io/kubernetes/pkg/api/rest"
apiv1 "k8s.io/kubernetes/pkg/api/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/genericapiserver/api/handlers"
apitesting "k8s.io/kubernetes/pkg/genericapiserver/api/testing"
"k8s.io/kubernetes/pkg/labels"
"k8s.io/kubernetes/pkg/runtime"
"k8s.io/kubernetes/pkg/runtime/serializer/streaming"
@ -69,9 +69,9 @@ var watchTestTable = []struct {
t watch.EventType
obj runtime.Object
}{
{watch.Added, &apiservertesting.Simple{ObjectMeta: apiv1.ObjectMeta{Name: "foo"}}},
{watch.Modified, &apiservertesting.Simple{ObjectMeta: apiv1.ObjectMeta{Name: "bar"}}},
{watch.Deleted, &apiservertesting.Simple{ObjectMeta: apiv1.ObjectMeta{Name: "bar"}}},
{watch.Added, &apitesting.Simple{ObjectMeta: apiv1.ObjectMeta{Name: "foo"}}},
{watch.Modified, &apitesting.Simple{ObjectMeta: apiv1.ObjectMeta{Name: "bar"}}},
{watch.Deleted, &apitesting.Simple{ObjectMeta: apiv1.ObjectMeta{Name: "bar"}}},
}
var podWatchTestTable = []struct {
@ -603,7 +603,7 @@ func TestWatchHTTPTimeout(t *testing.T) {
req, _ := http.NewRequest("GET", dest.String(), nil)
client := http.Client{}
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
decoder := json.NewDecoder(resp.Body)

View File

@ -39,15 +39,15 @@ import (
"k8s.io/kubernetes/pkg/admission"
"k8s.io/kubernetes/pkg/api"
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/authorizer"
authorizerunion "k8s.io/kubernetes/pkg/auth/authorizer/union"
authhandlers "k8s.io/kubernetes/pkg/auth/handlers"
"k8s.io/kubernetes/pkg/auth/user"
"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"
genericauthorizer "k8s.io/kubernetes/pkg/genericapiserver/authorizer"
genericfilters "k8s.io/kubernetes/pkg/genericapiserver/filters"
@ -229,7 +229,7 @@ func DefaultOpenAPIConfig(definitions *openapicommon.OpenAPIDefinitions) *openap
Description: "Default Response.",
},
},
GetOperationIDAndTags: apiserveropenapi.GetOperationIDAndTags,
GetOperationIDAndTags: apiopenapi.GetOperationIDAndTags,
Definitions: definitions,
}
}
@ -562,16 +562,16 @@ func DefaultBuildHandlerChain(apiHandler http.Handler, c *Config) (secure, insec
handler = genericfilters.WithPanicRecovery(handler, c.RequestContextMapper)
handler = genericfilters.WithTimeoutForNonLongRunningRequests(handler, 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)
return 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 {
handler = apiserverfilters.WithAuthorization(handler, c.RequestContextMapper, c.Authorizer)
handler = apiserverfilters.WithImpersonation(handler, c.RequestContextMapper, c.Authorizer)
handler = genericapifilters.WithAuthorization(handler, c.RequestContextMapper, c.Authorizer)
handler = genericapifilters.WithImpersonation(handler, c.RequestContextMapper, c.Authorizer)
handler = audit(handler) // before impersonation to read original user
handler = authhandlers.WithAuthentication(handler, c.RequestContextMapper, c.Authenticator, authhandlers.Unauthorized(c.SupportsBasicAuth))
return handler
@ -604,7 +604,7 @@ func (s *GenericAPIServer) installAPI(c *Config) {
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
legacyAPIPrefixes := sets.String{} // APIPrefixes that won't have groups (legacy)
for legacyAPIPrefix := range c.LegacyAPIGroupPrefixes {
@ -612,7 +612,7 @@ func NewRequestInfoResolver(c *Config) *apiserverrequest.RequestInfoFactory {
legacyAPIPrefixes.Insert(strings.Trim(legacyAPIPrefix, "/"))
}
return &apiserverrequest.RequestInfoFactory{
return &apirequest.RequestInfoFactory{
APIPrefixes: apiPrefixes,
GrouplessAPIPrefixes: legacyAPIPrefixes,
}

View File

@ -17,7 +17,7 @@ limitations under the License.
// Package genericapiserver contains code to setup a generic kubernetes-like API server.
// 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
// 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.
// For more details: https://github.com/kubernetes/kubernetes/issues/2742
package genericapiserver // import "k8s.io/kubernetes/pkg/genericapiserver"

View File

@ -22,7 +22,7 @@ go_library(
deps = [
"//pkg/api: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/util:go_default_library",
"//pkg/util/runtime:go_default_library",
@ -43,8 +43,8 @@ go_test(
deps = [
"//pkg/api:go_default_library",
"//pkg/api/errors:go_default_library",
"//pkg/apiserver/filters:go_default_library",
"//pkg/apiserver/request:go_default_library",
"//pkg/genericapiserver/api/filters:go_default_library",
"//pkg/genericapiserver/api/request:go_default_library",
"//pkg/util/sets:go_default_library",
],
)

View File

@ -19,16 +19,16 @@ package filters
import (
"net/http"
apiserverrequest "k8s.io/kubernetes/pkg/apiserver/request"
apirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request"
"k8s.io/kubernetes/pkg/util/sets"
)
// 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
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) {
return true
}

View File

@ -22,7 +22,7 @@ import (
"k8s.io/kubernetes/pkg/api"
"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/util/sets"
@ -67,7 +67,7 @@ func WithMaxInFlightLimit(
handleError(w, r, fmt.Errorf("no context found for request, handler chain must be wrong"))
return
}
requestInfo, ok := apiserverrequest.RequestInfoFrom(ctx)
requestInfo, ok := apirequest.RequestInfoFrom(ctx)
if !ok {
handleError(w, r, fmt.Errorf("no RequestInfo found in context, handler chain must be wrong"))
return

View File

@ -26,8 +26,8 @@ import (
"k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/api/errors"
apiserverfilters "k8s.io/kubernetes/pkg/apiserver/filters"
apiserverrequest "k8s.io/kubernetes/pkg/apiserver/request"
apifilters "k8s.io/kubernetes/pkg/genericapiserver/api/filters"
apirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request"
"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"))
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(
http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
// A short, accounted request that does not wait for block WaitGroup.
@ -56,7 +56,7 @@ func createMaxInflightServer(callsWg, blockWg *sync.WaitGroup, disableCallsWg *b
requestContextMapper,
longRunningRequestCheck,
)
handler = apiserverfilters.WithRequestInfo(handler, requestInfoFactory, requestContextMapper)
handler = apifilters.WithRequestInfo(handler, requestInfoFactory, requestContextMapper)
handler = api.WithRequestContext(handler, requestContextMapper)
return httptest.NewServer(handler)

View File

@ -24,7 +24,7 @@ import (
"k8s.io/kubernetes/pkg/api"
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/util/runtime"
)
@ -39,12 +39,12 @@ func WithPanicRecovery(handler http.Handler, requestContextMapper api.RequestCon
logger := httplog.NewLogged(req, &w)
var requestInfo *apiserverrequest.RequestInfo
var requestInfo *apirequest.RequestInfo
ctx, ok := requestContextMapper.Get(req)
if !ok {
glog.Errorf("no context found for request, handler chain must be wrong")
} else {
requestInfo, ok = apiserverrequest.RequestInfoFrom(ctx)
requestInfo, ok = apirequest.RequestInfoFrom(ctx)
if !ok {
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/errors"
apiserverrequest "k8s.io/kubernetes/pkg/apiserver/request"
apirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request"
)
const globalTimeout = time.Minute
@ -46,7 +46,7 @@ func WithTimeoutForNonLongRunningRequests(handler http.Handler, requestContextMa
return time.After(globalTimeout), ""
}
requestInfo, ok := apiserverrequest.RequestInfoFrom(ctx)
requestInfo, ok := apirequest.RequestInfoFrom(ctx)
if !ok {
return time.After(globalTimeout), ""
}

View File

@ -36,8 +36,8 @@ import (
"k8s.io/kubernetes/pkg/apimachinery"
"k8s.io/kubernetes/pkg/apimachinery/registered"
metav1 "k8s.io/kubernetes/pkg/apis/meta/v1"
"k8s.io/kubernetes/pkg/apiserver"
"k8s.io/kubernetes/pkg/client/restclient"
genericapi "k8s.io/kubernetes/pkg/genericapiserver/api"
genericmux "k8s.io/kubernetes/pkg/genericapiserver/mux"
openapicommon "k8s.io/kubernetes/pkg/genericapiserver/openapi/common"
"k8s.io/kubernetes/pkg/genericapiserver/routes"
@ -241,7 +241,7 @@ func (s *GenericAPIServer) InstallLegacyAPIGroup(apiPrefix string, apiGroupInfo
}
// Install the version handler.
// 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)
apiVersionsForDiscovery := metav1.APIVersions{
@ -293,7 +293,7 @@ func (s *GenericAPIServer) InstallAPIGroup(apiGroupInfo *APIGroupInfo) error {
}
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
}
@ -312,7 +312,7 @@ func (s *GenericAPIServer) RemoveAPIGroupForDiscovery(groupName string) {
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)
for k, v := range apiGroupInfo.VersionedResourcesStorageMap[groupVersion.Version] {
storage[strings.ToLower(k)] = v
@ -323,8 +323,8 @@ func (s *GenericAPIServer) getAPIGroupVersion(apiGroupInfo *APIGroupInfo, groupV
return version, err
}
func (s *GenericAPIServer) newAPIGroupVersion(apiGroupInfo *APIGroupInfo, groupVersion schema.GroupVersion) (*apiserver.APIGroupVersion, error) {
return &apiserver.APIGroupVersion{
func (s *GenericAPIServer) newAPIGroupVersion(apiGroupInfo *APIGroupInfo, groupVersion schema.GroupVersion) (*genericapi.APIGroupVersion, error) {
return &genericapi.APIGroupVersion{
GroupVersion: groupVersion,
ParameterCodec: apiGroupInfo.ParameterCodec,
@ -346,7 +346,7 @@ func (s *GenericAPIServer) newAPIGroupVersion(apiGroupInfo *APIGroupInfo, groupV
// DynamicApisDiscovery returns a webservice serving api group discovery.
// Note: during the server runtime apiGroupsForDiscovery might change.
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()
defer s.apiGroupsForDiscoveryLock.RUnlock()

View File

@ -19,7 +19,7 @@ go_library(
deps = [
"//pkg/api: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/schema:go_default_library",
"//vendor:github.com/emicklei/go-restful",

View File

@ -27,7 +27,7 @@ import (
"k8s.io/kubernetes/pkg/api"
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/schema"
)

View File

@ -22,8 +22,8 @@ go_library(
tags = ["automanaged"],
deps = [
"//pkg/apis/meta/v1:go_default_library",
"//pkg/apiserver/handlers/responsewriters:go_default_library",
"//pkg/apiserver/metrics:go_default_library",
"//pkg/genericapiserver/api/handlers/responsewriters:go_default_library",
"//pkg/genericapiserver/api/metrics:go_default_library",
"//pkg/genericapiserver/mux:go_default_library",
"//pkg/genericapiserver/openapi:go_default_library",
"//pkg/genericapiserver/openapi/common:go_default_library",

View File

@ -21,7 +21,7 @@ import (
"sort"
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"
)

View File

@ -20,7 +20,7 @@ import (
"io"
"net/http"
apiservermetrics "k8s.io/kubernetes/pkg/apiserver/metrics"
apimetrics "k8s.io/kubernetes/pkg/genericapiserver/api/metrics"
"k8s.io/kubernetes/pkg/genericapiserver/mux"
etcdmetrics "k8s.io/kubernetes/pkg/storage/etcd/metrics"
@ -44,7 +44,7 @@ func (m MetricsWithReset) Install(c *mux.APIContainer) {
defaultMetricsHandler := prometheus.Handler().ServeHTTP
c.NonSwaggerRoutes.HandleFunc("/metrics", func(w http.ResponseWriter, req *http.Request) {
if req.Method == "DELETE" {
apiservermetrics.Reset()
apimetrics.Reset()
etcdmetrics.Reset()
io.WriteString(w, "metrics reset\n")
return

View File

@ -21,7 +21,7 @@ import (
"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/version"
)

View File

@ -18,9 +18,9 @@ go_library(
"//pkg/apimachinery/registered:go_default_library",
"//pkg/apis/extensions: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/api:go_default_library",
"//pkg/genericapiserver/api/handlers:go_default_library",
"//pkg/registry/extensions/rest:go_default_library",
"//pkg/registry/extensions/thirdpartyresourcedata: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/apis/extensions"
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"
genericapi "k8s.io/kubernetes/pkg/genericapiserver/api"
genericapihandlers "k8s.io/kubernetes/pkg/genericapiserver/api/handlers"
extensionsrest "k8s.io/kubernetes/pkg/registry/extensions/rest"
"k8s.io/kubernetes/pkg/registry/extensions/thirdpartyresourcedata"
thirdpartyresourcedataetcd "k8s.io/kubernetes/pkg/registry/extensions/thirdpartyresourcedata/etcd"
@ -42,7 +42,7 @@ import (
)
// 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 {
m *ThirdPartyResourceServer
path string
@ -52,7 +52,7 @@ func (d dynamicLister) ListAPIResources() []metav1.APIResource {
return d.m.getExistingThirdPartyResources(d.path)
}
var _ apiserverhandlers.APIResourceLister = &dynamicLister{}
var _ genericapihandlers.APIResourceLister = &dynamicLister{}
type ThirdPartyResourceServer struct {
genericAPIServer *genericapiserver.GenericAPIServer
@ -280,13 +280,13 @@ func (m *ThirdPartyResourceServer) InstallThirdPartyResource(rsrc *extensions.Th
if err := thirdparty.InstallREST(m.genericAPIServer.HandlerContainer.Container); err != nil {
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)
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(
generic.RESTOptions{
StorageConfig: m.thirdPartyStorageConfig,
@ -306,7 +306,7 @@ func (m *ThirdPartyResourceServer) thirdpartyapi(group, kind, version, pluralRes
externalVersion := schema.GroupVersion{Group: group, Version: version}
apiRoot := extensionsrest.MakeThirdPartyPath("")
return &apiserver.APIGroupVersion{
return &genericapi.APIGroupVersion{
Root: apiRoot,
GroupVersion: externalVersion,

View File

@ -99,7 +99,7 @@ func (h *UpgradeAwareProxyHandler) ServeHTTP(w http.ResponseWriter, req *http.Re
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 '/'
// This is essentially a hack for http://issue.k8s.io/4958.
// 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/rbac/validation,erictune,0
k8s.io/kubernetes/pkg/apis/storage/validation,caesarxuchao,1
k8s.io/kubernetes/pkg/apiserver,nikhiljindal,0
k8s.io/kubernetes/pkg/apiserver/filters,dchen1107,1
k8s.io/kubernetes/pkg/apiserver/handlers,rkouj,0
k8s.io/kubernetes/pkg/apiserver/handlers/errors,rkouj,0
k8s.io/kubernetes/pkg/apiserver/handlers/negotiation,rkouj,0
k8s.io/kubernetes/pkg/apiserver/request,lavalamp,1
k8s.io/kubernetes/pkg/genericapiserver/api,nikhiljindal,0
k8s.io/kubernetes/pkg/genericapiserver/api/filters,dchen1107,1
k8s.io/kubernetes/pkg/genericapiserver/api/handlers,rkouj,0
k8s.io/kubernetes/pkg/genericapiserver/api/handlers/errors,rkouj,0
k8s.io/kubernetes/pkg/genericapiserver/api/handlers/negotiation,rkouj,0
k8s.io/kubernetes/pkg/genericapiserver/api/request,lavalamp,1
k8s.io/kubernetes/pkg/auth/authenticator/bearertoken,liggitt,0
k8s.io/kubernetes/pkg/auth/authorizer/abac,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