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:
commit
123026aa28
@ -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",
|
||||
|
@ -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
|
||||
|
@ -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"
|
||||
|
||||
|
@ -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"
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -1,18 +0,0 @@
|
||||
/*
|
||||
Copyright 2016 The Kubernetes Authors.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
// Package errors contains HTTP handler related errors
|
||||
package errors // import "k8s.io/kubernetes/pkg/apiserver/handlers/errors"
|
@ -1,27 +0,0 @@
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
licenses(["notice"])
|
||||
|
||||
load(
|
||||
"@io_bazel_rules_go//go:def.bzl",
|
||||
"go_library",
|
||||
)
|
||||
|
||||
go_library(
|
||||
name = "go_default_library",
|
||||
srcs = [
|
||||
"doc.go",
|
||||
"writers.go",
|
||||
],
|
||||
tags = ["automanaged"],
|
||||
deps = [
|
||||
"//pkg/api/rest:go_default_library",
|
||||
"//pkg/apiserver/handlers/errors:go_default_library",
|
||||
"//pkg/apiserver/handlers/negotiation:go_default_library",
|
||||
"//pkg/runtime:go_default_library",
|
||||
"//pkg/runtime/schema:go_default_library",
|
||||
"//pkg/util/flushwriter:go_default_library",
|
||||
"//pkg/util/runtime:go_default_library",
|
||||
"//pkg/util/wsstream:go_default_library",
|
||||
],
|
||||
)
|
@ -33,16 +33,16 @@ go_library(
|
||||
"//pkg/apimachinery:go_default_library",
|
||||
"//pkg/apimachinery/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",
|
||||
|
@ -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",
|
@ -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() {
|
@ -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)
|
||||
}
|
@ -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"
|
||||
)
|
@ -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"
|
@ -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",
|
||||
],
|
||||
)
|
@ -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
|
||||
}
|
||||
|
@ -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 {
|
@ -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)
|
||||
})
|
||||
}
|
||||
|
@ -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)
|
@ -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"
|
@ -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
|
||||
}
|
||||
}
|
@ -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
|
||||
}
|
||||
|
@ -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"
|
||||
)
|
||||
|
@ -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"
|
@ -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",
|
@ -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"
|
||||
|
@ -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"
|
@ -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"
|
@ -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"
|
@ -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",
|
||||
],
|
||||
)
|
@ -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"
|
@ -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)
|
||||
}
|
@ -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
|
||||
}
|
@ -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)
|
||||
}
|
@ -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)
|
||||
}
|
@ -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"
|
@ -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"
|
@ -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"
|
@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package apiserver
|
||||
package api
|
||||
|
||||
import (
|
||||
"bytes"
|
@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package apiserver
|
||||
package api
|
||||
|
||||
import (
|
||||
"bytes"
|
@ -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"
|
@ -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)
|
@ -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,
|
||||
}
|
||||
|
@ -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"
|
||||
|
@ -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",
|
||||
],
|
||||
)
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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")
|
||||
}
|
||||
|
@ -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), ""
|
||||
}
|
||||
|
@ -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()
|
||||
|
||||
|
@ -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",
|
||||
|
@ -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"
|
||||
)
|
||||
|
@ -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",
|
||||
|
@ -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"
|
||||
)
|
||||
|
||||
|
@ -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
|
||||
|
@ -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"
|
||||
)
|
||||
|
4
pkg/master/thirdparty/BUILD
vendored
4
pkg/master/thirdparty/BUILD
vendored
@ -18,9 +18,9 @@ go_library(
|
||||
"//pkg/apimachinery/registered:go_default_library",
|
||||
"//pkg/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",
|
||||
|
14
pkg/master/thirdparty/thirdparty.go
vendored
14
pkg/master/thirdparty/thirdparty.go
vendored
@ -29,9 +29,9 @@ import (
|
||||
"k8s.io/kubernetes/pkg/apimachinery/registered"
|
||||
"k8s.io/kubernetes/pkg/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,
|
||||
|
||||
|
@ -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.
|
||||
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue
Block a user