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