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