From 87dd990bb7a4b81ea76eea8f828d9ac9e4ffe777 Mon Sep 17 00:00:00 2001 From: "Dr. Stefan Schimanski" Date: Mon, 2 Jan 2017 15:07:36 +0100 Subject: [PATCH] Move pkg/api.{Context,RequestContextMapper} into pkg/genericapiserver/api/request --- cmd/kubernetes-discovery/pkg/apiserver/BUILD | 1 + .../pkg/apiserver/apiserver.go | 6 +- .../pkg/apiserver/handler_proxy.go | 6 +- .../pkg/apiserver/handler_proxy_test.go | 8 +-- .../pkg/registry/apiservice/BUILD | 1 + .../pkg/registry/apiservice/strategy.go | 9 +-- examples/apiserver/rest/BUILD | 1 + examples/apiserver/rest/reststorage.go | 11 +-- federation/registry/cluster/BUILD | 2 + federation/registry/cluster/etcd/BUILD | 2 +- federation/registry/cluster/etcd/etcd.go | 4 +- federation/registry/cluster/registry.go | 25 +++---- federation/registry/cluster/strategy.go | 15 ++-- federation/registry/cluster/strategy_test.go | 5 +- hack/.linted_packages | 1 + pkg/api/BUILD | 9 +-- pkg/api/meta.go | 5 +- pkg/api/meta_test.go | 7 +- pkg/api/resource_helpers.go | 11 +++ pkg/api/rest/BUILD | 1 + pkg/api/rest/create.go | 7 +- pkg/api/rest/delete.go | 5 +- pkg/api/rest/export.go | 4 +- pkg/api/rest/rest.go | 33 ++++----- pkg/api/rest/resttest/BUILD | 1 + pkg/api/rest/resttest/resttest.go | 47 ++++++------- pkg/api/rest/update.go | 13 ++-- pkg/apis/rbac/validation/BUILD | 2 +- pkg/apis/rbac/validation/rulevalidation.go | 10 +-- pkg/auth/handlers/BUILD | 4 +- pkg/auth/handlers/handlers.go | 8 +-- pkg/auth/handlers/handlers_test.go | 16 ++--- pkg/controller/serviceaccount/BUILD | 1 + pkg/controller/serviceaccount/tokengetter.go | 6 +- pkg/genericapiserver/BUILD | 1 + pkg/genericapiserver/api/BUILD | 1 + pkg/genericapiserver/api/apiserver_test.go | 46 ++++++------- pkg/genericapiserver/api/filters/BUILD | 1 - pkg/genericapiserver/api/filters/audit.go | 4 +- .../api/filters/audit_test.go | 9 ++- .../api/filters/authorization.go | 7 +- .../api/filters/authorization_test.go | 6 +- .../api/filters/impersonation.go | 9 +-- .../api/filters/impersonation_test.go | 14 ++-- .../api/filters/requestinfo.go | 3 +- pkg/genericapiserver/api/groupversion.go | 4 +- pkg/genericapiserver/api/handlers/BUILD | 1 + pkg/genericapiserver/api/handlers/proxy.go | 4 +- .../api/handlers/responsewriters/BUILD | 26 +++---- pkg/genericapiserver/api/handlers/rest.go | 49 ++++++------- .../api/handlers/rest_test.go | 9 +-- pkg/genericapiserver/api/installer.go | 9 +-- pkg/genericapiserver/api/request/BUILD | 19 ++++- .../api/request}/context.go | 17 ++--- .../api/request}/context_test.go | 45 ++++++------ .../api/request}/requestcontext.go | 2 +- .../api/request/requestinfo.go | 9 ++- .../api/request/requestinfo_test.go | 21 ++---- pkg/genericapiserver/config.go | 6 +- pkg/genericapiserver/filters/BUILD | 1 - pkg/genericapiserver/filters/maxinflight.go | 4 +- .../filters/maxinflight_test.go | 5 +- pkg/genericapiserver/filters/panics.go | 3 +- pkg/genericapiserver/filters/timeout.go | 2 +- pkg/genericapiserver/genericapiserver.go | 5 +- pkg/genericapiserver/genericapiserver_test.go | 5 +- pkg/kubelet/client/BUILD | 1 - pkg/kubelet/client/kubelet_client.go | 5 +- pkg/master/BUILD | 1 + pkg/master/master_test.go | 3 +- pkg/master/thirdparty/BUILD | 1 + pkg/master/thirdparty/thirdparty.go | 3 +- pkg/registry/apps/petset/BUILD | 2 + pkg/registry/apps/petset/etcd/BUILD | 3 +- pkg/registry/apps/petset/etcd/etcd.go | 6 +- pkg/registry/apps/petset/etcd/etcd_test.go | 5 +- pkg/registry/apps/petset/strategy.go | 13 ++-- pkg/registry/apps/petset/strategy_test.go | 5 +- pkg/registry/authentication/tokenreview/BUILD | 2 +- .../authentication/tokenreview/storage.go | 6 +- .../localsubjectaccessreview/BUILD | 2 +- .../localsubjectaccessreview/rest.go | 6 +- .../selfsubjectaccessreview/BUILD | 2 +- .../selfsubjectaccessreview/rest.go | 6 +- .../authorization/subjectaccessreview/BUILD | 2 +- .../authorization/subjectaccessreview/rest.go | 4 +- .../autoscaling/horizontalpodautoscaler/BUILD | 1 + .../horizontalpodautoscaler/etcd/BUILD | 2 +- .../horizontalpodautoscaler/etcd/etcd.go | 6 +- .../horizontalpodautoscaler/strategy.go | 13 ++-- pkg/registry/batch/cronjob/BUILD | 2 + pkg/registry/batch/cronjob/etcd/BUILD | 2 +- pkg/registry/batch/cronjob/etcd/etcd.go | 6 +- pkg/registry/batch/cronjob/strategy.go | 13 ++-- pkg/registry/batch/cronjob/strategy_test.go | 5 +- pkg/registry/batch/job/BUILD | 2 + pkg/registry/batch/job/etcd/BUILD | 2 +- pkg/registry/batch/job/etcd/etcd.go | 6 +- pkg/registry/batch/job/strategy.go | 13 ++-- pkg/registry/batch/job/strategy_test.go | 7 +- pkg/registry/certificates/certificates/BUILD | 3 +- .../certificates/certificates/etcd/BUILD | 2 +- .../certificates/certificates/etcd/etcd.go | 6 +- .../certificates/certificates/registry.go | 25 +++---- .../certificates/certificates/strategy.go | 21 +++--- .../certificates/strategy_test.go | 18 ++--- pkg/registry/core/componentstatus/BUILD | 2 + pkg/registry/core/componentstatus/rest.go | 6 +- .../core/componentstatus/rest_test.go | 11 +-- pkg/registry/core/configmap/BUILD | 2 + pkg/registry/core/configmap/registry.go | 25 +++---- pkg/registry/core/configmap/strategy.go | 9 +-- pkg/registry/core/configmap/strategy_test.go | 3 +- pkg/registry/core/controller/BUILD | 2 + pkg/registry/core/controller/etcd/BUILD | 2 + pkg/registry/core/controller/etcd/etcd.go | 9 +-- .../core/controller/etcd/etcd_test.go | 9 +-- pkg/registry/core/controller/registry.go | 25 +++---- pkg/registry/core/controller/strategy.go | 13 ++-- pkg/registry/core/controller/strategy_test.go | 5 +- pkg/registry/core/endpoint/BUILD | 1 + pkg/registry/core/endpoint/registry.go | 21 +++--- pkg/registry/core/endpoint/strategy.go | 9 +-- pkg/registry/core/event/BUILD | 1 + pkg/registry/core/event/strategy.go | 9 +-- pkg/registry/core/limitrange/BUILD | 1 + pkg/registry/core/limitrange/strategy.go | 11 +-- pkg/registry/core/namespace/BUILD | 2 + pkg/registry/core/namespace/etcd/BUILD | 2 + pkg/registry/core/namespace/etcd/etcd.go | 9 +-- pkg/registry/core/namespace/etcd/etcd_test.go | 7 +- pkg/registry/core/namespace/registry.go | 25 +++---- pkg/registry/core/namespace/strategy.go | 17 ++--- pkg/registry/core/namespace/strategy_test.go | 7 +- pkg/registry/core/node/BUILD | 1 + pkg/registry/core/node/etcd/BUILD | 1 + pkg/registry/core/node/etcd/etcd.go | 9 +-- pkg/registry/core/node/registry.go | 25 +++---- pkg/registry/core/node/rest/BUILD | 1 + pkg/registry/core/node/rest/proxy.go | 3 +- pkg/registry/core/node/strategy.go | 23 ++++--- pkg/registry/core/persistentvolume/BUILD | 1 + pkg/registry/core/persistentvolume/etcd/BUILD | 2 + .../core/persistentvolume/etcd/etcd.go | 5 +- .../core/persistentvolume/etcd/etcd_test.go | 3 +- .../core/persistentvolume/strategy.go | 13 ++-- pkg/registry/core/persistentvolumeclaim/BUILD | 1 + .../core/persistentvolumeclaim/etcd/BUILD | 2 + .../core/persistentvolumeclaim/etcd/etcd.go | 5 +- .../persistentvolumeclaim/etcd/etcd_test.go | 3 +- .../core/persistentvolumeclaim/strategy.go | 13 ++-- pkg/registry/core/pod/BUILD | 2 + pkg/registry/core/pod/etcd/BUILD | 2 + pkg/registry/core/pod/etcd/etcd.go | 13 ++-- pkg/registry/core/pod/etcd/etcd_test.go | 31 +++++---- pkg/registry/core/pod/etcd/eviction.go | 5 +- pkg/registry/core/pod/rest/BUILD | 2 + pkg/registry/core/pod/rest/log.go | 3 +- pkg/registry/core/pod/rest/log_test.go | 3 +- pkg/registry/core/pod/rest/subresources.go | 9 +-- pkg/registry/core/pod/strategy.go | 39 ++++++----- pkg/registry/core/pod/strategy_test.go | 7 +- pkg/registry/core/podtemplate/BUILD | 1 + pkg/registry/core/podtemplate/strategy.go | 11 +-- pkg/registry/core/resourcequota/BUILD | 2 + pkg/registry/core/resourcequota/etcd/BUILD | 2 + pkg/registry/core/resourcequota/etcd/etcd.go | 5 +- .../core/resourcequota/etcd/etcd_test.go | 7 +- pkg/registry/core/resourcequota/strategy.go | 13 ++-- .../core/resourcequota/strategy_test.go | 3 +- pkg/registry/core/secret/BUILD | 2 + pkg/registry/core/secret/registry.go | 25 +++---- pkg/registry/core/secret/strategy.go | 11 +-- pkg/registry/core/secret/strategy_test.go | 3 +- pkg/registry/core/service/BUILD | 2 + pkg/registry/core/service/etcd/BUILD | 1 + pkg/registry/core/service/etcd/etcd.go | 5 +- pkg/registry/core/service/proxy.go | 3 +- pkg/registry/core/service/registry.go | 29 ++++---- pkg/registry/core/service/rest.go | 17 ++--- pkg/registry/core/service/rest_test.go | 53 +++++++------- pkg/registry/core/service/strategy.go | 15 ++-- pkg/registry/core/service/strategy_test.go | 7 +- pkg/registry/core/serviceaccount/BUILD | 1 + pkg/registry/core/serviceaccount/registry.go | 25 +++---- pkg/registry/core/serviceaccount/strategy.go | 9 +-- pkg/registry/extensions/controller/etcd/BUILD | 2 + .../extensions/controller/etcd/etcd.go | 11 ++- .../extensions/controller/etcd/etcd_test.go | 5 +- pkg/registry/extensions/daemonset/BUILD | 1 + pkg/registry/extensions/daemonset/etcd/BUILD | 2 +- .../extensions/daemonset/etcd/etcd.go | 6 +- pkg/registry/extensions/daemonset/strategy.go | 13 ++-- pkg/registry/extensions/deployment/BUILD | 2 + pkg/registry/extensions/deployment/etcd/BUILD | 2 + .../extensions/deployment/etcd/etcd.go | 15 ++-- .../extensions/deployment/etcd/etcd_test.go | 11 +-- .../extensions/deployment/registry.go | 21 +++--- .../extensions/deployment/strategy.go | 13 ++-- .../extensions/deployment/strategy_test.go | 3 +- pkg/registry/extensions/ingress/BUILD | 2 + pkg/registry/extensions/ingress/etcd/BUILD | 2 +- pkg/registry/extensions/ingress/etcd/etcd.go | 6 +- pkg/registry/extensions/ingress/strategy.go | 13 ++-- .../extensions/ingress/strategy_test.go | 5 +- pkg/registry/extensions/networkpolicy/BUILD | 2 + .../extensions/networkpolicy/etcd/BUILD | 1 + .../networkpolicy/etcd/etcd_test.go | 3 +- .../extensions/networkpolicy/strategy.go | 9 +-- .../extensions/networkpolicy/strategy_test.go | 3 +- .../extensions/podsecuritypolicy/BUILD | 1 + .../extensions/podsecuritypolicy/strategy.go | 9 +-- pkg/registry/extensions/replicaset/BUILD | 2 + pkg/registry/extensions/replicaset/etcd/BUILD | 2 + .../extensions/replicaset/etcd/etcd.go | 9 +-- .../extensions/replicaset/etcd/etcd_test.go | 11 +-- .../extensions/replicaset/registry.go | 25 +++---- .../extensions/replicaset/strategy.go | 13 ++-- .../extensions/replicaset/strategy_test.go | 5 +- .../extensions/thirdpartyresource/BUILD | 1 + .../extensions/thirdpartyresource/strategy.go | 9 +-- .../extensions/thirdpartyresourcedata/BUILD | 1 + .../thirdpartyresourcedata/registry.go | 25 +++---- .../thirdpartyresourcedata/strategy.go | 9 +-- pkg/registry/generic/registry/BUILD | 2 + pkg/registry/generic/registry/store.go | 55 +++++++-------- pkg/registry/generic/registry/store_test.go | 69 ++++++++++--------- pkg/registry/policy/poddisruptionbudget/BUILD | 2 + .../policy/poddisruptionbudget/etcd/BUILD | 3 +- .../policy/poddisruptionbudget/etcd/etcd.go | 6 +- .../poddisruptionbudget/etcd/etcd_test.go | 5 +- .../policy/poddisruptionbudget/strategy.go | 13 ++-- .../poddisruptionbudget/strategy_test.go | 5 +- pkg/registry/rbac/BUILD | 2 +- pkg/registry/rbac/clusterrole/BUILD | 1 + .../rbac/clusterrole/policybased/BUILD | 2 +- .../rbac/clusterrole/policybased/storage.go | 8 +-- pkg/registry/rbac/clusterrole/registry.go | 27 ++++---- pkg/registry/rbac/clusterrole/strategy.go | 11 +-- pkg/registry/rbac/clusterrolebinding/BUILD | 1 + .../rbac/clusterrolebinding/policybased/BUILD | 2 +- .../clusterrolebinding/policybased/storage.go | 8 +-- .../rbac/clusterrolebinding/registry.go | 27 ++++---- .../rbac/clusterrolebinding/strategy.go | 11 +-- pkg/registry/rbac/escalation_check.go | 6 +- pkg/registry/rbac/role/BUILD | 1 + pkg/registry/rbac/role/policybased/BUILD | 2 +- pkg/registry/rbac/role/policybased/storage.go | 8 +-- pkg/registry/rbac/role/registry.go | 27 ++++---- pkg/registry/rbac/role/strategy.go | 11 +-- pkg/registry/rbac/rolebinding/BUILD | 1 + .../rbac/rolebinding/policybased/BUILD | 2 +- .../rbac/rolebinding/policybased/storage.go | 8 +-- pkg/registry/rbac/rolebinding/registry.go | 27 ++++---- pkg/registry/rbac/rolebinding/strategy.go | 11 +-- pkg/registry/registrytest/BUILD | 1 + pkg/registry/registrytest/endpoint.go | 11 +-- pkg/registry/registrytest/etcd.go | 5 +- pkg/registry/registrytest/node.go | 13 ++-- pkg/registry/registrytest/service.go | 17 ++--- pkg/registry/storage/storageclass/BUILD | 2 + pkg/registry/storage/storageclass/strategy.go | 9 +-- .../storage/storageclass/strategy_test.go | 3 +- plugin/pkg/scheduler/factory/BUILD | 2 +- plugin/pkg/scheduler/factory/factory.go | 6 +- 265 files changed, 1256 insertions(+), 1043 deletions(-) rename pkg/{api => genericapiserver/api/request}/context.go (90%) rename pkg/{api => genericapiserver/api/request}/context_test.go (80%) rename pkg/{api => genericapiserver/api/request}/requestcontext.go (99%) diff --git a/cmd/kubernetes-discovery/pkg/apiserver/BUILD b/cmd/kubernetes-discovery/pkg/apiserver/BUILD index 001aa73a4c..f03ddc0bfa 100644 --- a/cmd/kubernetes-discovery/pkg/apiserver/BUILD +++ b/cmd/kubernetes-discovery/pkg/apiserver/BUILD @@ -41,6 +41,7 @@ go_library( "//pkg/genericapiserver:go_default_library", "//pkg/genericapiserver/api/filters:go_default_library", "//pkg/genericapiserver/api/handlers/responsewriters:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/genericapiserver/filters:go_default_library", "//pkg/labels:go_default_library", "//pkg/registry/generic:go_default_library", diff --git a/cmd/kubernetes-discovery/pkg/apiserver/apiserver.go b/cmd/kubernetes-discovery/pkg/apiserver/apiserver.go index eefbd7fc5c..7ce2737231 100644 --- a/cmd/kubernetes-discovery/pkg/apiserver/apiserver.go +++ b/cmd/kubernetes-discovery/pkg/apiserver/apiserver.go @@ -21,7 +21,6 @@ import ( "os" "time" - "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/rest" authhandlers "k8s.io/kubernetes/pkg/auth/handlers" kubeclientset "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" @@ -29,6 +28,7 @@ import ( v1listers "k8s.io/kubernetes/pkg/client/listers/core/v1" "k8s.io/kubernetes/pkg/genericapiserver" genericapifilters "k8s.io/kubernetes/pkg/genericapiserver/api/filters" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" genericfilters "k8s.io/kubernetes/pkg/genericapiserver/filters" "k8s.io/kubernetes/pkg/registry/generic" "k8s.io/kubernetes/pkg/util/wait" @@ -63,7 +63,7 @@ type Config struct { type APIDiscoveryServer struct { GenericAPIServer *genericapiserver.GenericAPIServer - contextMapper api.RequestContextMapper + contextMapper genericapirequest.RequestContextMapper // proxyClientCert/Key are the client cert used to identify this proxy. Backing APIServices use // this to confirm the proxy's identity @@ -198,7 +198,7 @@ func (h *handlerChainConfig) handlerChain(apiHandler http.Handler, c *genericapi handler = genericfilters.WithTimeoutForNonLongRunningRequests(handler, c.RequestContextMapper, c.LongRunningFunc) handler = genericfilters.WithMaxInFlightLimit(handler, c.MaxRequestsInFlight, c.MaxMutatingRequestsInFlight, c.RequestContextMapper, c.LongRunningFunc) handler = genericapifilters.WithRequestInfo(handler, genericapiserver.NewRequestInfoResolver(c), c.RequestContextMapper) - handler = api.WithRequestContext(handler, c.RequestContextMapper) + handler = genericapirequest.WithRequestContext(handler, c.RequestContextMapper) return handler, nil } diff --git a/cmd/kubernetes-discovery/pkg/apiserver/handler_proxy.go b/cmd/kubernetes-discovery/pkg/apiserver/handler_proxy.go index b13f3fd77d..6db2afe601 100644 --- a/cmd/kubernetes-discovery/pkg/apiserver/handler_proxy.go +++ b/cmd/kubernetes-discovery/pkg/apiserver/handler_proxy.go @@ -21,10 +21,10 @@ import ( "net/url" "sync" - "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/client/transport" "k8s.io/kubernetes/pkg/genericapiserver/api/handlers/responsewriters" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" genericrest "k8s.io/kubernetes/pkg/registry/generic/rest" "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/util/httpstream/spdy" @@ -35,7 +35,7 @@ import ( // proxyHandler provides a http.Handler which will proxy traffic to locations // specified by items implementing Redirector. type proxyHandler struct { - contextMapper api.RequestContextMapper + contextMapper genericapirequest.RequestContextMapper // proxyClientCert/Key are the client cert used to identify this proxy. Backing APIServices use // this to confirm the proxy's identity @@ -71,7 +71,7 @@ func (r *proxyHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { http.Error(w, "missing context", http.StatusInternalServerError) return } - user, ok := api.UserFrom(ctx) + user, ok := genericapirequest.UserFrom(ctx) if !ok { http.Error(w, "missing user", http.StatusInternalServerError) return diff --git a/cmd/kubernetes-discovery/pkg/apiserver/handler_proxy_test.go b/cmd/kubernetes-discovery/pkg/apiserver/handler_proxy_test.go index 06a427f83b..e5fa8ce28f 100644 --- a/cmd/kubernetes-discovery/pkg/apiserver/handler_proxy_test.go +++ b/cmd/kubernetes-discovery/pkg/apiserver/handler_proxy_test.go @@ -56,10 +56,10 @@ type fakeRequestContextMapper struct { user user.Info } -func (m *fakeRequestContextMapper) Get(req *http.Request) (api.Context, bool) { - ctx := api.NewContext() +func (m *fakeRequestContextMapper) Get(req *http.Request) (genericapirequest.Context, bool) { + ctx := genericapirequest.NewContext() if m.user != nil { - ctx = api.WithUser(ctx, m.user) + ctx = genericapirequest.WithUser(ctx, m.user) } resolver := &genericapirequest.RequestInfoFactory{ @@ -74,7 +74,7 @@ func (m *fakeRequestContextMapper) Get(req *http.Request) (api.Context, bool) { return ctx, true } -func (*fakeRequestContextMapper) Update(req *http.Request, context api.Context) error { +func (*fakeRequestContextMapper) Update(req *http.Request, context genericapirequest.Context) error { return nil } diff --git a/cmd/kubernetes-discovery/pkg/registry/apiservice/BUILD b/cmd/kubernetes-discovery/pkg/registry/apiservice/BUILD index 1566c22825..45d6cc1e27 100644 --- a/cmd/kubernetes-discovery/pkg/registry/apiservice/BUILD +++ b/cmd/kubernetes-discovery/pkg/registry/apiservice/BUILD @@ -16,6 +16,7 @@ go_library( "//cmd/kubernetes-discovery/pkg/apis/apiregistration/validation:go_default_library", "//pkg/api:go_default_library", "//pkg/fields:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/labels:go_default_library", "//pkg/registry/generic:go_default_library", "//pkg/runtime:go_default_library", diff --git a/cmd/kubernetes-discovery/pkg/registry/apiservice/strategy.go b/cmd/kubernetes-discovery/pkg/registry/apiservice/strategy.go index 89fa671f75..423c123857 100644 --- a/cmd/kubernetes-discovery/pkg/registry/apiservice/strategy.go +++ b/cmd/kubernetes-discovery/pkg/registry/apiservice/strategy.go @@ -21,6 +21,7 @@ import ( kapi "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/fields" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/registry/generic" "k8s.io/kubernetes/pkg/runtime" @@ -42,17 +43,17 @@ func (apiServerStrategy) NamespaceScoped() bool { return false } -func (apiServerStrategy) PrepareForCreate(ctx kapi.Context, obj runtime.Object) { +func (apiServerStrategy) PrepareForCreate(ctx genericapirequest.Context, obj runtime.Object) { _ = obj.(*apiregistration.APIService) } -func (apiServerStrategy) PrepareForUpdate(ctx kapi.Context, obj, old runtime.Object) { +func (apiServerStrategy) PrepareForUpdate(ctx genericapirequest.Context, obj, old runtime.Object) { newAPIService := obj.(*apiregistration.APIService) oldAPIService := old.(*apiregistration.APIService) newAPIService.Status = oldAPIService.Status } -func (apiServerStrategy) Validate(ctx kapi.Context, obj runtime.Object) field.ErrorList { +func (apiServerStrategy) Validate(ctx genericapirequest.Context, obj runtime.Object) field.ErrorList { return validation.ValidateAPIService(obj.(*apiregistration.APIService)) } @@ -67,7 +68,7 @@ func (apiServerStrategy) AllowUnconditionalUpdate() bool { func (apiServerStrategy) Canonicalize(obj runtime.Object) { } -func (apiServerStrategy) ValidateUpdate(ctx kapi.Context, obj, old runtime.Object) field.ErrorList { +func (apiServerStrategy) ValidateUpdate(ctx genericapirequest.Context, obj, old runtime.Object) field.ErrorList { return validation.ValidateAPIServiceUpdate(obj.(*apiregistration.APIService), old.(*apiregistration.APIService)) } diff --git a/examples/apiserver/rest/BUILD b/examples/apiserver/rest/BUILD index 23355813d4..fd74919f9f 100644 --- a/examples/apiserver/rest/BUILD +++ b/examples/apiserver/rest/BUILD @@ -15,6 +15,7 @@ go_library( "//cmd/libs/go2idl/client-gen/test_apis/testgroup:go_default_library", "//pkg/api:go_default_library", "//pkg/fields:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/labels:go_default_library", "//pkg/registry/generic:go_default_library", "//pkg/registry/generic/registry:go_default_library", diff --git a/examples/apiserver/rest/reststorage.go b/examples/apiserver/rest/reststorage.go index 00e2742993..412695d5f0 100644 --- a/examples/apiserver/rest/reststorage.go +++ b/examples/apiserver/rest/reststorage.go @@ -22,6 +22,7 @@ import ( "k8s.io/kubernetes/cmd/libs/go2idl/client-gen/test_apis/testgroup" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/fields" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/registry/generic" genericregistry "k8s.io/kubernetes/pkg/registry/generic/registry" @@ -63,10 +64,12 @@ type fakeStrategy struct { api.NameGenerator } -func (*fakeStrategy) NamespaceScoped() bool { return false } -func (*fakeStrategy) PrepareForCreate(ctx api.Context, obj runtime.Object) {} -func (*fakeStrategy) Validate(ctx api.Context, obj runtime.Object) field.ErrorList { return nil } -func (*fakeStrategy) Canonicalize(obj runtime.Object) {} +func (*fakeStrategy) NamespaceScoped() bool { return false } +func (*fakeStrategy) PrepareForCreate(ctx genericapirequest.Context, obj runtime.Object) {} +func (*fakeStrategy) Validate(ctx genericapirequest.Context, obj runtime.Object) field.ErrorList { + return nil +} +func (*fakeStrategy) Canonicalize(obj runtime.Object) {} var strategy = &fakeStrategy{api.Scheme, api.SimpleNameGenerator} diff --git a/federation/registry/cluster/BUILD b/federation/registry/cluster/BUILD index 159fe44d28..ac44bcaea0 100644 --- a/federation/registry/cluster/BUILD +++ b/federation/registry/cluster/BUILD @@ -22,6 +22,7 @@ go_library( "//pkg/api/rest:go_default_library", "//pkg/apis/meta/v1:go_default_library", "//pkg/fields:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/labels:go_default_library", "//pkg/registry/generic:go_default_library", "//pkg/runtime:go_default_library", @@ -42,6 +43,7 @@ go_test( "//pkg/api/testing:go_default_library", "//pkg/apimachinery/registered:go_default_library", "//pkg/fields:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/labels:go_default_library", ], ) diff --git a/federation/registry/cluster/etcd/BUILD b/federation/registry/cluster/etcd/BUILD index b67183bd4d..118e2c7f40 100644 --- a/federation/registry/cluster/etcd/BUILD +++ b/federation/registry/cluster/etcd/BUILD @@ -15,8 +15,8 @@ go_library( deps = [ "//federation/apis/federation:go_default_library", "//federation/registry/cluster:go_default_library", - "//pkg/api:go_default_library", "//pkg/api/rest:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/registry/generic:go_default_library", "//pkg/registry/generic/registry:go_default_library", "//pkg/runtime:go_default_library", diff --git a/federation/registry/cluster/etcd/etcd.go b/federation/registry/cluster/etcd/etcd.go index dc690305aa..b2a6a8535c 100644 --- a/federation/registry/cluster/etcd/etcd.go +++ b/federation/registry/cluster/etcd/etcd.go @@ -19,8 +19,8 @@ package etcd import ( "k8s.io/kubernetes/federation/apis/federation" "k8s.io/kubernetes/federation/registry/cluster" - "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/rest" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/registry/generic" genericregistry "k8s.io/kubernetes/pkg/registry/generic/registry" "k8s.io/kubernetes/pkg/runtime" @@ -39,7 +39,7 @@ func (r *StatusREST) New() runtime.Object { } // Update alters the status subset of an object. -func (r *StatusREST) Update(ctx api.Context, name string, objInfo rest.UpdatedObjectInfo) (runtime.Object, bool, error) { +func (r *StatusREST) Update(ctx genericapirequest.Context, name string, objInfo rest.UpdatedObjectInfo) (runtime.Object, bool, error) { return r.store.Update(ctx, name, objInfo) } diff --git a/federation/registry/cluster/registry.go b/federation/registry/cluster/registry.go index 65e6bbb558..3025a312ad 100644 --- a/federation/registry/cluster/registry.go +++ b/federation/registry/cluster/registry.go @@ -21,17 +21,18 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/rest" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/watch" ) // Registry is an interface implemented by things that know how to store Cluster objects. type Registry interface { - ListClusters(ctx api.Context, options *api.ListOptions) (*federation.ClusterList, error) - WatchCluster(ctx api.Context, options *api.ListOptions) (watch.Interface, error) - GetCluster(ctx api.Context, name string, options *metav1.GetOptions) (*federation.Cluster, error) - CreateCluster(ctx api.Context, cluster *federation.Cluster) error - UpdateCluster(ctx api.Context, cluster *federation.Cluster) error - DeleteCluster(ctx api.Context, name string) error + ListClusters(ctx genericapirequest.Context, options *api.ListOptions) (*federation.ClusterList, error) + WatchCluster(ctx genericapirequest.Context, options *api.ListOptions) (watch.Interface, error) + GetCluster(ctx genericapirequest.Context, name string, options *metav1.GetOptions) (*federation.Cluster, error) + CreateCluster(ctx genericapirequest.Context, cluster *federation.Cluster) error + UpdateCluster(ctx genericapirequest.Context, cluster *federation.Cluster) error + DeleteCluster(ctx genericapirequest.Context, name string) error } // storage puts strong typing around storage calls @@ -45,7 +46,7 @@ func NewRegistry(s rest.StandardStorage) Registry { return &storage{s} } -func (s *storage) ListClusters(ctx api.Context, options *api.ListOptions) (*federation.ClusterList, error) { +func (s *storage) ListClusters(ctx genericapirequest.Context, options *api.ListOptions) (*federation.ClusterList, error) { obj, err := s.List(ctx, options) if err != nil { return nil, err @@ -53,11 +54,11 @@ func (s *storage) ListClusters(ctx api.Context, options *api.ListOptions) (*fede return obj.(*federation.ClusterList), nil } -func (s *storage) WatchCluster(ctx api.Context, options *api.ListOptions) (watch.Interface, error) { +func (s *storage) WatchCluster(ctx genericapirequest.Context, options *api.ListOptions) (watch.Interface, error) { return s.Watch(ctx, options) } -func (s *storage) GetCluster(ctx api.Context, name string, options *metav1.GetOptions) (*federation.Cluster, error) { +func (s *storage) GetCluster(ctx genericapirequest.Context, name string, options *metav1.GetOptions) (*federation.Cluster, error) { obj, err := s.Get(ctx, name, options) if err != nil { return nil, err @@ -65,17 +66,17 @@ func (s *storage) GetCluster(ctx api.Context, name string, options *metav1.GetOp return obj.(*federation.Cluster), nil } -func (s *storage) CreateCluster(ctx api.Context, cluster *federation.Cluster) error { +func (s *storage) CreateCluster(ctx genericapirequest.Context, cluster *federation.Cluster) error { _, err := s.Create(ctx, cluster) return err } -func (s *storage) UpdateCluster(ctx api.Context, cluster *federation.Cluster) error { +func (s *storage) UpdateCluster(ctx genericapirequest.Context, cluster *federation.Cluster) error { _, _, err := s.Update(ctx, cluster.Name, rest.DefaultUpdatedObjectInfo(cluster, api.Scheme)) return err } -func (s *storage) DeleteCluster(ctx api.Context, name string) error { +func (s *storage) DeleteCluster(ctx genericapirequest.Context, name string) error { _, err := s.Delete(ctx, name, nil) return err } diff --git a/federation/registry/cluster/strategy.go b/federation/registry/cluster/strategy.go index 6660139c04..61464f0455 100644 --- a/federation/registry/cluster/strategy.go +++ b/federation/registry/cluster/strategy.go @@ -23,6 +23,7 @@ import ( "k8s.io/kubernetes/federation/apis/federation/validation" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/fields" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/registry/generic" "k8s.io/kubernetes/pkg/runtime" @@ -63,13 +64,13 @@ func MatchCluster(label labels.Selector, field fields.Selector) apistorage.Selec } // PrepareForCreate clears fields that are not allowed to be set by end users on creation. -func (clusterStrategy) PrepareForCreate(ctx api.Context, obj runtime.Object) { +func (clusterStrategy) PrepareForCreate(ctx genericapirequest.Context, obj runtime.Object) { cluster := obj.(*federation.Cluster) cluster.Status = federation.ClusterStatus{} } // Validate validates a new cluster. -func (clusterStrategy) Validate(ctx api.Context, obj runtime.Object) field.ErrorList { +func (clusterStrategy) Validate(ctx genericapirequest.Context, obj runtime.Object) field.ErrorList { cluster := obj.(*federation.Cluster) return validation.ValidateCluster(cluster) } @@ -84,14 +85,14 @@ func (clusterStrategy) AllowCreateOnUpdate() bool { } // PrepareForUpdate clears fields that are not allowed to be set by end users on update. -func (clusterStrategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { +func (clusterStrategy) PrepareForUpdate(ctx genericapirequest.Context, obj, old runtime.Object) { cluster := obj.(*federation.Cluster) oldCluster := old.(*federation.Cluster) cluster.Status = oldCluster.Status } // ValidateUpdate is the default update validation for an end user. -func (clusterStrategy) ValidateUpdate(ctx api.Context, obj, old runtime.Object) field.ErrorList { +func (clusterStrategy) ValidateUpdate(ctx genericapirequest.Context, obj, old runtime.Object) field.ErrorList { return validation.ValidateClusterUpdate(obj.(*federation.Cluster), old.(*federation.Cluster)) } func (clusterStrategy) AllowUnconditionalUpdate() bool { @@ -104,16 +105,16 @@ type clusterStatusStrategy struct { var StatusStrategy = clusterStatusStrategy{Strategy} -func (clusterStatusStrategy) PrepareForCreate(ctx api.Context, obj runtime.Object) { +func (clusterStatusStrategy) PrepareForCreate(ctx genericapirequest.Context, obj runtime.Object) { _ = obj.(*federation.Cluster) } -func (clusterStatusStrategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { +func (clusterStatusStrategy) PrepareForUpdate(ctx genericapirequest.Context, obj, old runtime.Object) { cluster := obj.(*federation.Cluster) oldCluster := old.(*federation.Cluster) cluster.Spec = oldCluster.Spec } // ValidateUpdate is the default update validation for an end user. -func (clusterStatusStrategy) ValidateUpdate(ctx api.Context, obj, old runtime.Object) field.ErrorList { +func (clusterStatusStrategy) ValidateUpdate(ctx genericapirequest.Context, obj, old runtime.Object) field.ErrorList { return validation.ValidateClusterStatusUpdate(obj.(*federation.Cluster), old.(*federation.Cluster)) } diff --git a/federation/registry/cluster/strategy_test.go b/federation/registry/cluster/strategy_test.go index 4846d44cdf..8ecc7021ae 100644 --- a/federation/registry/cluster/strategy_test.go +++ b/federation/registry/cluster/strategy_test.go @@ -26,6 +26,7 @@ import ( apitesting "k8s.io/kubernetes/pkg/api/testing" "k8s.io/kubernetes/pkg/apimachinery/registered" "k8s.io/kubernetes/pkg/fields" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/labels" ) @@ -70,7 +71,7 @@ func invalidNewCluster() *federation.Cluster { } func TestClusterStrategy(t *testing.T) { - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() if Strategy.NamespaceScoped() { t.Errorf("Cluster should not be namespace scoped") } @@ -104,7 +105,7 @@ func TestClusterStrategy(t *testing.T) { } func TestClusterStatusStrategy(t *testing.T) { - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() if StatusStrategy.NamespaceScoped() { t.Errorf("Cluster should not be namespace scoped") } diff --git a/hack/.linted_packages b/hack/.linted_packages index 735521d93f..e4386366f8 100644 --- a/hack/.linted_packages +++ b/hack/.linted_packages @@ -179,6 +179,7 @@ pkg/credentialprovider/aws pkg/genericapiserver/api/audit pkg/genericapiserver/api/handlers/responsewriters pkg/genericapiserver/api/openapi +pkg/genericapiserver/api/request pkg/genericapiserver/filters pkg/genericapiserver/mux pkg/genericapiserver/routes diff --git a/pkg/api/BUILD b/pkg/api/BUILD index 94517ef4d2..513abd3fd2 100644 --- a/pkg/api/BUILD +++ b/pkg/api/BUILD @@ -11,7 +11,6 @@ load( go_library( name = "go_default_library", srcs = [ - "context.go", "conversion.go", "defaults.go", "doc.go", @@ -22,7 +21,6 @@ go_library( "meta.go", "ref.go", "register.go", - "requestcontext.go", "resource_helpers.go", "types.go", "zz_generated.deepcopy.go", @@ -32,9 +30,9 @@ go_library( "//pkg/api/meta:go_default_library", "//pkg/api/resource:go_default_library", "//pkg/apis/meta/v1:go_default_library", - "//pkg/auth/user:go_default_library", "//pkg/conversion:go_default_library", "//pkg/fields:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/labels:go_default_library", "//pkg/runtime:go_default_library", "//pkg/runtime/schema:go_default_library", @@ -48,8 +46,6 @@ go_library( "//pkg/util/uuid:go_default_library", "//pkg/util/validation/field:go_default_library", "//vendor:github.com/davecgh/go-spew/spew", - "//vendor:github.com/golang/glog", - "//vendor:golang.org/x/net/context", ], ) @@ -75,7 +71,6 @@ go_test( go_test( name = "go_default_xtest", srcs = [ - "context_test.go", "conversion_test.go", "copy_test.go", "deep_copy_test.go", @@ -96,8 +91,8 @@ go_test( "//pkg/apis/extensions:go_default_library", "//pkg/apis/extensions/v1beta1:go_default_library", "//pkg/apis/meta/v1:go_default_library", - "//pkg/auth/user:go_default_library", "//pkg/conversion:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/runtime:go_default_library", "//pkg/runtime/schema:go_default_library", "//pkg/runtime/serializer/protobuf:go_default_library", diff --git a/pkg/api/meta.go b/pkg/api/meta.go index bddc0dbfa4..b4349f0f08 100644 --- a/pkg/api/meta.go +++ b/pkg/api/meta.go @@ -20,17 +20,18 @@ import ( "k8s.io/kubernetes/pkg/api/meta" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" "k8s.io/kubernetes/pkg/conversion" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/types" "k8s.io/kubernetes/pkg/util/uuid" ) // FillObjectMetaSystemFields populates fields that are managed by the system on ObjectMeta. -func FillObjectMetaSystemFields(ctx Context, meta *ObjectMeta) { +func FillObjectMetaSystemFields(ctx genericapirequest.Context, meta *ObjectMeta) { meta.CreationTimestamp = metav1.Now() // allows admission controllers to assign a UID earlier in the request processing // to support tracking resources pending creation. - uid, found := UIDFrom(ctx) + uid, found := genericapirequest.UIDFrom(ctx) if !found { uid = uuid.NewUUID() } diff --git a/pkg/api/meta_test.go b/pkg/api/meta_test.go index aa597c97c4..2153e1198b 100644 --- a/pkg/api/meta_test.go +++ b/pkg/api/meta_test.go @@ -26,6 +26,7 @@ import ( "k8s.io/kubernetes/pkg/api/meta" "k8s.io/kubernetes/pkg/apimachinery/registered" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/runtime/schema" "k8s.io/kubernetes/pkg/util/uuid" @@ -35,7 +36,7 @@ var _ meta.Object = &api.ObjectMeta{} // TestFillObjectMetaSystemFields validates that system populated fields are set on an object func TestFillObjectMetaSystemFields(t *testing.T) { - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() resource := api.ObjectMeta{} api.FillObjectMetaSystemFields(ctx, &resource) if resource.CreationTimestamp.Time.IsZero() { @@ -45,7 +46,7 @@ func TestFillObjectMetaSystemFields(t *testing.T) { } // verify we can inject a UID uid := uuid.NewUUID() - ctx = api.WithUID(ctx, uid) + ctx = genericapirequest.WithUID(ctx, uid) resource = api.ObjectMeta{} api.FillObjectMetaSystemFields(ctx, &resource) if resource.UID != uid { @@ -55,7 +56,7 @@ func TestFillObjectMetaSystemFields(t *testing.T) { // TestHasObjectMetaSystemFieldValues validates that true is returned if and only if all fields are populated func TestHasObjectMetaSystemFieldValues(t *testing.T) { - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() resource := api.ObjectMeta{} if api.HasObjectMetaSystemFieldValues(&resource) { t.Errorf("the resource does not have all fields yet populated, but incorrectly reports it does") diff --git a/pkg/api/resource_helpers.go b/pkg/api/resource_helpers.go index 816df56fb0..61dc6bac17 100644 --- a/pkg/api/resource_helpers.go +++ b/pkg/api/resource_helpers.go @@ -21,6 +21,7 @@ import ( "k8s.io/kubernetes/pkg/api/resource" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" ) // Returns string version of ResourceName. @@ -227,3 +228,13 @@ func PodRequestsAndLimits(pod *Pod) (reqs map[ResourceName]resource.Quantity, li } return } + +// ValidNamespace returns false if the namespace on the context differs from the resource. If the resource has no namespace, it is set to the value in the context. +// TODO(sttts): move into pkg/genericapiserver/api +func ValidNamespace(ctx genericapirequest.Context, resource *ObjectMeta) bool { + ns, ok := genericapirequest.NamespaceFrom(ctx) + if len(resource.Namespace) == 0 { + resource.Namespace = ns + } + return ns == resource.Namespace && ok +} diff --git a/pkg/api/rest/BUILD b/pkg/api/rest/BUILD index 6ea4d80a58..8bbafc7a0d 100644 --- a/pkg/api/rest/BUILD +++ b/pkg/api/rest/BUILD @@ -26,6 +26,7 @@ go_library( "//pkg/api/validation:go_default_library", "//pkg/api/validation/path:go_default_library", "//pkg/apis/meta/v1:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/runtime:go_default_library", "//pkg/runtime/schema:go_default_library", "//pkg/util/validation/field:go_default_library", diff --git a/pkg/api/rest/create.go b/pkg/api/rest/create.go index 3cab29aedf..12538b9204 100644 --- a/pkg/api/rest/create.go +++ b/pkg/api/rest/create.go @@ -21,6 +21,7 @@ import ( "k8s.io/kubernetes/pkg/api/errors" "k8s.io/kubernetes/pkg/api/validation" path "k8s.io/kubernetes/pkg/api/validation/path" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/runtime/schema" "k8s.io/kubernetes/pkg/util/validation/field" @@ -41,10 +42,10 @@ type RESTCreateStrategy interface { // the object. For example: remove fields that are not to be persisted, // sort order-insensitive list fields, etc. This should not remove fields // whose presence would be considered a validation error. - PrepareForCreate(ctx api.Context, obj runtime.Object) + PrepareForCreate(ctx genericapirequest.Context, obj runtime.Object) // Validate is invoked after default fields in the object have been filled in before // the object is persisted. This method should not mutate the object. - Validate(ctx api.Context, obj runtime.Object) field.ErrorList + Validate(ctx genericapirequest.Context, obj runtime.Object) field.ErrorList // Canonicalize is invoked after validation has succeeded but before the // object has been persisted. This method may mutate the object. Canonicalize(obj runtime.Object) @@ -53,7 +54,7 @@ type RESTCreateStrategy interface { // BeforeCreate ensures that common operations for all resources are performed on creation. It only returns // errors that can be converted to api.Status. It invokes PrepareForCreate, then GenerateName, then Validate. // It returns nil if the object should be created. -func BeforeCreate(strategy RESTCreateStrategy, ctx api.Context, obj runtime.Object) error { +func BeforeCreate(strategy RESTCreateStrategy, ctx genericapirequest.Context, obj runtime.Object) error { objectMeta, kind, kerr := objectMetaAndKind(strategy, obj) if kerr != nil { return kerr diff --git a/pkg/api/rest/delete.go b/pkg/api/rest/delete.go index 1134334b92..f1c71218a5 100644 --- a/pkg/api/rest/delete.go +++ b/pkg/api/rest/delete.go @@ -23,6 +23,7 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/errors" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/runtime/schema" ) @@ -52,7 +53,7 @@ type GarbageCollectionDeleteStrategy interface { type RESTGracefulDeleteStrategy interface { // CheckGracefulDelete should return true if the object can be gracefully deleted and set // any default values on the DeleteOptions. - CheckGracefulDelete(ctx api.Context, obj runtime.Object, options *api.DeleteOptions) bool + CheckGracefulDelete(ctx genericapirequest.Context, obj runtime.Object, options *api.DeleteOptions) bool } // BeforeDelete tests whether the object can be gracefully deleted. If graceful is set the object @@ -61,7 +62,7 @@ type RESTGracefulDeleteStrategy interface { // condition cannot be checked or the gracePeriodSeconds is invalid. The options argument may be updated with // default values if graceful is true. Second place where we set deletionTimestamp is pkg/registry/generic/registry/store.go // this function is responsible for setting deletionTimestamp during gracefulDeletion, other one for cascading deletions. -func BeforeDelete(strategy RESTDeleteStrategy, ctx api.Context, obj runtime.Object, options *api.DeleteOptions) (graceful, gracefulPending bool, err error) { +func BeforeDelete(strategy RESTDeleteStrategy, ctx genericapirequest.Context, obj runtime.Object, options *api.DeleteOptions) (graceful, gracefulPending bool, err error) { objectMeta, gvk, kerr := objectMetaAndKind(strategy, obj) if kerr != nil { return false, false, kerr diff --git a/pkg/api/rest/export.go b/pkg/api/rest/export.go index f072517583..00ce881bba 100644 --- a/pkg/api/rest/export.go +++ b/pkg/api/rest/export.go @@ -17,7 +17,7 @@ limitations under the License. package rest import ( - "k8s.io/kubernetes/pkg/api" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/runtime" ) @@ -25,5 +25,5 @@ import ( type RESTExportStrategy interface { // Export strips fields that can not be set by the user. If 'exact' is false // fields specific to the cluster are also stripped - Export(ctx api.Context, obj runtime.Object, exact bool) error + Export(ctx genericapirequest.Context, obj runtime.Object, exact bool) error } diff --git a/pkg/api/rest/rest.go b/pkg/api/rest/rest.go index 0e0db3382d..7e68538aae 100644 --- a/pkg/api/rest/rest.go +++ b/pkg/api/rest/rest.go @@ -23,6 +23,7 @@ import ( "k8s.io/kubernetes/pkg/api" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/runtime/schema" "k8s.io/kubernetes/pkg/watch" @@ -70,7 +71,7 @@ type Lister interface { // This object must be a pointer type for use with Codec.DecodeInto([]byte, runtime.Object) NewList() runtime.Object // List selects resources in the storage which match to the selector. 'options' can be nil. - List(ctx api.Context, options *api.ListOptions) (runtime.Object, error) + List(ctx genericapirequest.Context, options *api.ListOptions) (runtime.Object, error) } // Exporter is an object that knows how to strip a RESTful resource for export @@ -78,7 +79,7 @@ type Exporter interface { // Export an object. Fields that are not user specified (e.g. Status, ObjectMeta.ResourceVersion) are stripped out // Returns the stripped object. If 'exact' is true, fields that are specific to the cluster (e.g. namespace) are // retained, otherwise they are stripped also. - Export(ctx api.Context, name string, opts metav1.ExportOptions) (runtime.Object, error) + Export(ctx genericapirequest.Context, name string, opts metav1.ExportOptions) (runtime.Object, error) } // Getter is an object that can retrieve a named RESTful resource. @@ -86,7 +87,7 @@ type Getter interface { // Get finds a resource in the storage by name and returns it. // Although it can return an arbitrary error value, IsNotFound(err) is true for the // returned error value err when the specified resource is not found. - Get(ctx api.Context, name string, options *metav1.GetOptions) (runtime.Object, error) + Get(ctx genericapirequest.Context, name string, options *metav1.GetOptions) (runtime.Object, error) } // GetterWithOptions is an object that retrieve a named RESTful resource and takes @@ -99,7 +100,7 @@ type GetterWithOptions interface { // The options object passed to it is of the same type returned by the NewGetOptions // method. // TODO: Pass metav1.GetOptions. - Get(ctx api.Context, name string, options runtime.Object) (runtime.Object, error) + Get(ctx genericapirequest.Context, name string, options runtime.Object) (runtime.Object, error) // NewGetOptions returns an empty options object that will be used to pass // options to the Get method. It may return a bool and a string, if true, the @@ -117,7 +118,7 @@ type Deleter interface { // returned error value err when the specified resource is not found. // Delete *may* return the object that was deleted, or a status object indicating additional // information about deletion. - Delete(ctx api.Context, name string) (runtime.Object, error) + Delete(ctx genericapirequest.Context, name string) (runtime.Object, error) } // GracefulDeleter knows how to pass deletion options to allow delayed deletion of a @@ -130,7 +131,7 @@ type GracefulDeleter interface { // returned error value err when the specified resource is not found. // Delete *may* return the object that was deleted, or a status object indicating additional // information about deletion. - Delete(ctx api.Context, name string, options *api.DeleteOptions) (runtime.Object, error) + Delete(ctx genericapirequest.Context, name string, options *api.DeleteOptions) (runtime.Object, error) } // GracefulDeleteAdapter adapts the Deleter interface to GracefulDeleter @@ -139,7 +140,7 @@ type GracefulDeleteAdapter struct { } // Delete implements RESTGracefulDeleter in terms of Deleter -func (w GracefulDeleteAdapter) Delete(ctx api.Context, name string, options *api.DeleteOptions) (runtime.Object, error) { +func (w GracefulDeleteAdapter) Delete(ctx genericapirequest.Context, name string, options *api.DeleteOptions) (runtime.Object, error) { return w.Deleter.Delete(ctx, name) } @@ -151,7 +152,7 @@ type CollectionDeleter interface { // them or return an invalid request error. // DeleteCollection may not be atomic - i.e. it may delete some objects and still // return an error after it. On success, returns a list of deleted objects. - DeleteCollection(ctx api.Context, options *api.DeleteOptions, listOptions *api.ListOptions) (runtime.Object, error) + DeleteCollection(ctx genericapirequest.Context, options *api.DeleteOptions, listOptions *api.ListOptions) (runtime.Object, error) } // Creater is an object that can create an instance of a RESTful object. @@ -161,7 +162,7 @@ type Creater interface { New() runtime.Object // Create creates a new version of a resource. - Create(ctx api.Context, obj runtime.Object) (runtime.Object, error) + Create(ctx genericapirequest.Context, obj runtime.Object) (runtime.Object, error) } // NamedCreater is an object that can create an instance of a RESTful object using a name parameter. @@ -173,7 +174,7 @@ type NamedCreater interface { // Create creates a new version of a resource. It expects a name parameter from the path. // This is needed for create operations on subresources which include the name of the parent // resource in the path. - Create(ctx api.Context, name string, obj runtime.Object) (runtime.Object, error) + Create(ctx genericapirequest.Context, name string, obj runtime.Object) (runtime.Object, error) } // UpdatedObjectInfo provides information about an updated object to an Updater. @@ -186,7 +187,7 @@ type UpdatedObjectInfo interface { // UpdatedObject returns the updated object, given a context and old object. // The only time an empty oldObj should be passed in is if a "create on update" is occurring (there is no oldObj). - UpdatedObject(ctx api.Context, oldObj runtime.Object) (newObj runtime.Object, err error) + UpdatedObject(ctx genericapirequest.Context, oldObj runtime.Object) (newObj runtime.Object, err error) } // Updater is an object that can update an instance of a RESTful object. @@ -198,14 +199,14 @@ type Updater interface { // Update finds a resource in the storage and updates it. Some implementations // may allow updates creates the object - they should set the created boolean // to true. - Update(ctx api.Context, name string, objInfo UpdatedObjectInfo) (runtime.Object, bool, error) + Update(ctx genericapirequest.Context, name string, objInfo UpdatedObjectInfo) (runtime.Object, bool, error) } // CreaterUpdater is a storage object that must support both create and update. // Go prevents embedded interfaces that implement the same method. type CreaterUpdater interface { Creater - Update(ctx api.Context, name string, objInfo UpdatedObjectInfo) (runtime.Object, bool, error) + Update(ctx genericapirequest.Context, name string, objInfo UpdatedObjectInfo) (runtime.Object, bool, error) } // CreaterUpdater must satisfy the Updater interface. @@ -224,7 +225,7 @@ type Watcher interface { // are supported; an error should be returned if 'field' tries to select on a field that // isn't supported. 'resourceVersion' allows for continuing/starting a watch at a // particular version. - Watch(ctx api.Context, options *api.ListOptions) (watch.Interface, error) + Watch(ctx genericapirequest.Context, options *api.ListOptions) (watch.Interface, error) } // StandardStorage is an interface covering the common verbs. Provided for testing whether a @@ -241,7 +242,7 @@ type StandardStorage interface { // Redirector know how to return a remote resource's location. type Redirector interface { // ResourceLocation should return the remote location of the given resource, and an optional transport to use to request it, or an error. - ResourceLocation(ctx api.Context, id string) (remoteLocation *url.URL, transport http.RoundTripper, err error) + ResourceLocation(ctx genericapirequest.Context, id string) (remoteLocation *url.URL, transport http.RoundTripper, err error) } // Responder abstracts the normal response behavior for a REST method and is passed to callers that @@ -261,7 +262,7 @@ type Connecter interface { // code and body, so the ServeHTTP method should exit after invoking the responder. The Handler will // be used for a single API request and then discarded. The Responder is guaranteed to write to the // same http.ResponseWriter passed to ServeHTTP. - Connect(ctx api.Context, id string, options runtime.Object, r Responder) (http.Handler, error) + Connect(ctx genericapirequest.Context, id string, options runtime.Object, r Responder) (http.Handler, error) // NewConnectOptions returns an empty options object that will be used to pass // options to the Connect method. If nil, then a nil options object is passed to diff --git a/pkg/api/rest/resttest/BUILD b/pkg/api/rest/resttest/BUILD index c0d0adcd2e..9dfcd44a64 100644 --- a/pkg/api/rest/resttest/BUILD +++ b/pkg/api/rest/resttest/BUILD @@ -19,6 +19,7 @@ go_library( "//pkg/apis/meta/v1:go_default_library", "//pkg/conversion:go_default_library", "//pkg/fields:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/labels:go_default_library", "//pkg/runtime:go_default_library", "//pkg/types:go_default_library", diff --git a/pkg/api/rest/resttest/resttest.go b/pkg/api/rest/resttest/resttest.go index 04e304d90d..f5be6c54f1 100644 --- a/pkg/api/rest/resttest/resttest.go +++ b/pkg/api/rest/resttest/resttest.go @@ -30,6 +30,7 @@ import ( metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" "k8s.io/kubernetes/pkg/conversion" "k8s.io/kubernetes/pkg/fields" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/types" @@ -96,11 +97,11 @@ func (t *Tester) TestNamespace() string { // TestContext returns a namespaced context that will be used when making storage calls. // Namespace is determined by TestNamespace() -func (t *Tester) TestContext() api.Context { +func (t *Tester) TestContext() genericapirequest.Context { if t.clusterScope { - return api.NewContext() + return genericapirequest.NewContext() } - return api.WithNamespace(api.NewContext(), t.TestNamespace()) + return genericapirequest.WithNamespace(genericapirequest.NewContext(), t.TestNamespace()) } func (t *Tester) getObjectMetaOrFail(obj runtime.Object) *api.ObjectMeta { @@ -117,7 +118,7 @@ func (t *Tester) setObjectMeta(obj runtime.Object, name string) { if t.clusterScope { meta.Namespace = api.NamespaceNone } else { - meta.Namespace = api.NamespaceValue(t.TestContext()) + meta.Namespace = genericapirequest.NamespaceValue(t.TestContext()) } meta.GenerateName = "" meta.Generation = 1 @@ -133,11 +134,11 @@ func copyOrDie(obj runtime.Object) runtime.Object { type AssignFunc func([]runtime.Object) []runtime.Object type EmitFunc func(runtime.Object, string) error -type GetFunc func(api.Context, runtime.Object) (runtime.Object, error) +type GetFunc func(genericapirequest.Context, runtime.Object) (runtime.Object, error) type InitWatchFunc func() type InjectErrFunc func(err error) type IsErrorFunc func(err error) bool -type CreateFunc func(api.Context, runtime.Object) error +type CreateFunc func(genericapirequest.Context, runtime.Object) error type SetRVFunc func(uint64) type UpdateFunc func(runtime.Object) runtime.Object @@ -223,7 +224,7 @@ func (t *Tester) TestWatch( // ============================================================================= // Creation tests. -func (t *Tester) delete(ctx api.Context, obj runtime.Object) error { +func (t *Tester) delete(ctx genericapirequest.Context, obj runtime.Object) error { objectMeta, err := api.ObjectMetaFor(obj) if err != nil { return err @@ -332,7 +333,7 @@ func (t *Tester) testCreateHasMetadata(valid runtime.Object) { func (t *Tester) testCreateIgnoresContextNamespace(valid runtime.Object) { // Ignore non-empty namespace in context - ctx := api.WithNamespace(api.NewContext(), "not-default2") + ctx := genericapirequest.WithNamespace(genericapirequest.NewContext(), "not-default2") // Ideally, we'd get an error back here, but at least verify the namespace wasn't persisted created, err := t.storage.(rest.Creater).Create(ctx, copyOrDie(valid)) @@ -351,7 +352,7 @@ func (t *Tester) testCreateIgnoresMismatchedNamespace(valid runtime.Object) { // Ignore non-empty namespace in object meta objectMeta.Namespace = "not-default" - ctx := api.WithNamespace(api.NewContext(), "not-default2") + ctx := genericapirequest.WithNamespace(genericapirequest.NewContext(), "not-default2") // Ideally, we'd get an error back here, but at least verify the namespace wasn't persisted created, err := t.storage.(rest.Creater).Create(ctx, copyOrDie(valid)) @@ -580,7 +581,7 @@ func (t *Tester) testUpdateRetrievesOldObject(obj runtime.Object, createFn Creat // Make sure a custom transform is called, and sees the expected updatedObject and oldObject // This tests the mechanism used to pass the old and new object to admission calledUpdatedObject := 0 - noopTransform := func(_ api.Context, updatedObject runtime.Object, oldObject runtime.Object) (runtime.Object, error) { + noopTransform := func(_ genericapirequest.Context, updatedObject runtime.Object, oldObject runtime.Object) (runtime.Object, error) { if !reflect.DeepEqual(storedFoo, oldObject) { t.Errorf("Expected\n\t%#v\ngot\n\t%#v", storedFoo, oldObject) } @@ -622,7 +623,7 @@ func (t *Tester) testUpdatePropagatesUpdatedObjectError(obj runtime.Object, crea // Make sure our transform is called, and sees the expected updatedObject and oldObject propagateErr := fmt.Errorf("custom updated object error for %v", foo) - noopTransform := func(_ api.Context, updatedObject runtime.Object, oldObject runtime.Object) (runtime.Object, error) { + noopTransform := func(_ genericapirequest.Context, updatedObject runtime.Object, oldObject runtime.Object) (runtime.Object, error) { return nil, propagateErr } @@ -1029,15 +1030,15 @@ func (t *Tester) testGetDifferentNamespace(obj runtime.Object) { objMeta := t.getObjectMetaOrFail(obj) objMeta.Name = t.namer(5) - ctx1 := api.WithNamespace(api.NewContext(), "bar3") - objMeta.Namespace = api.NamespaceValue(ctx1) + ctx1 := genericapirequest.WithNamespace(genericapirequest.NewContext(), "bar3") + objMeta.Namespace = genericapirequest.NamespaceValue(ctx1) _, err := t.storage.(rest.Creater).Create(ctx1, obj) if err != nil { t.Errorf("unexpected error: %v", err) } - ctx2 := api.WithNamespace(api.NewContext(), "bar4") - objMeta.Namespace = api.NamespaceValue(ctx2) + ctx2 := genericapirequest.WithNamespace(genericapirequest.NewContext(), "bar4") + objMeta.Namespace = genericapirequest.NamespaceValue(ctx2) _, err = t.storage.(rest.Creater).Create(ctx2, obj) if err != nil { t.Errorf("unexpected error: %v", err) @@ -1051,8 +1052,8 @@ func (t *Tester) testGetDifferentNamespace(obj runtime.Object) { if got1Meta.Name != objMeta.Name { t.Errorf("unexpected name of object: %#v, expected: %s", got1, objMeta.Name) } - if got1Meta.Namespace != api.NamespaceValue(ctx1) { - t.Errorf("unexpected namespace of object: %#v, expected: %s", got1, api.NamespaceValue(ctx1)) + if got1Meta.Namespace != genericapirequest.NamespaceValue(ctx1) { + t.Errorf("unexpected namespace of object: %#v, expected: %s", got1, genericapirequest.NamespaceValue(ctx1)) } got2, err := t.storage.(rest.Getter).Get(ctx2, objMeta.Name, &metav1.GetOptions{}) @@ -1063,8 +1064,8 @@ func (t *Tester) testGetDifferentNamespace(obj runtime.Object) { if got2Meta.Name != objMeta.Name { t.Errorf("unexpected name of object: %#v, expected: %s", got2, objMeta.Name) } - if got2Meta.Namespace != api.NamespaceValue(ctx2) { - t.Errorf("unexpected namespace of object: %#v, expected: %s", got2, api.NamespaceValue(ctx2)) + if got2Meta.Namespace != genericapirequest.NamespaceValue(ctx2) { + t.Errorf("unexpected namespace of object: %#v, expected: %s", got2, genericapirequest.NamespaceValue(ctx2)) } } @@ -1090,11 +1091,11 @@ func (t *Tester) testGetFound(obj runtime.Object) { } func (t *Tester) testGetMimatchedNamespace(obj runtime.Object) { - ctx1 := api.WithNamespace(api.NewContext(), "bar1") - ctx2 := api.WithNamespace(api.NewContext(), "bar2") + ctx1 := genericapirequest.WithNamespace(genericapirequest.NewContext(), "bar1") + ctx2 := genericapirequest.WithNamespace(genericapirequest.NewContext(), "bar2") objMeta := t.getObjectMetaOrFail(obj) objMeta.Name = t.namer(4) - objMeta.Namespace = api.NamespaceValue(ctx1) + objMeta.Namespace = genericapirequest.NamespaceValue(ctx1) _, err := t.storage.(rest.Creater).Create(ctx1, obj) if err != nil { t.Errorf("unexpected error: %v", err) @@ -1181,7 +1182,7 @@ func (t *Tester) testListMatchLabels(obj runtime.Object, assignFn AssignFunc) { foo4 := copyOrDie(obj) foo4Meta := t.getObjectMetaOrFail(foo4) foo4Meta.Name = "foo4" - foo4Meta.Namespace = api.NamespaceValue(ctx) + foo4Meta.Namespace = genericapirequest.NamespaceValue(ctx) foo4Meta.Labels = testLabels objs := ([]runtime.Object{foo3, foo4}) diff --git a/pkg/api/rest/update.go b/pkg/api/rest/update.go index af65dbc463..6e5e9f41cb 100644 --- a/pkg/api/rest/update.go +++ b/pkg/api/rest/update.go @@ -23,6 +23,7 @@ import ( "k8s.io/kubernetes/pkg/api/errors" "k8s.io/kubernetes/pkg/api/meta" "k8s.io/kubernetes/pkg/api/validation" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/util/validation/field" ) @@ -41,11 +42,11 @@ type RESTUpdateStrategy interface { // the object. For example: remove fields that are not to be persisted, // sort order-insensitive list fields, etc. This should not remove fields // whose presence would be considered a validation error. - PrepareForUpdate(ctx api.Context, obj, old runtime.Object) + PrepareForUpdate(ctx genericapirequest.Context, obj, old runtime.Object) // ValidateUpdate is invoked after default fields in the object have been // filled in before the object is persisted. This method should not mutate // the object. - ValidateUpdate(ctx api.Context, obj, old runtime.Object) field.ErrorList + ValidateUpdate(ctx genericapirequest.Context, obj, old runtime.Object) field.ErrorList // Canonicalize is invoked after validation has succeeded but before the // object has been persisted. This method may mutate the object. Canonicalize(obj runtime.Object) @@ -74,7 +75,7 @@ func validateCommonFields(obj, old runtime.Object) (field.ErrorList, error) { // BeforeUpdate ensures that common operations for all resources are performed on update. It only returns // errors that can be converted to api.Status. It will invoke update validation with the provided existing // and updated objects. -func BeforeUpdate(strategy RESTUpdateStrategy, ctx api.Context, obj, old runtime.Object) error { +func BeforeUpdate(strategy RESTUpdateStrategy, ctx genericapirequest.Context, obj, old runtime.Object) error { objectMeta, kind, kerr := objectMetaAndKind(strategy, obj) if kerr != nil { return kerr @@ -115,7 +116,7 @@ func BeforeUpdate(strategy RESTUpdateStrategy, ctx api.Context, obj, old runtime } // TransformFunc is a function to transform and return newObj -type TransformFunc func(ctx api.Context, newObj runtime.Object, oldObj runtime.Object) (transformedNewObj runtime.Object, err error) +type TransformFunc func(ctx genericapirequest.Context, newObj runtime.Object, oldObj runtime.Object) (transformedNewObj runtime.Object, err error) // defaultUpdatedObjectInfo implements UpdatedObjectInfo type defaultUpdatedObjectInfo struct { @@ -157,7 +158,7 @@ func (i *defaultUpdatedObjectInfo) Preconditions() *api.Preconditions { // UpdatedObject satisfies the UpdatedObjectInfo interface. // It returns a copy of the held obj, passed through any configured transformers. -func (i *defaultUpdatedObjectInfo) UpdatedObject(ctx api.Context, oldObj runtime.Object) (runtime.Object, error) { +func (i *defaultUpdatedObjectInfo) UpdatedObject(ctx genericapirequest.Context, oldObj runtime.Object) (runtime.Object, error) { var err error // Start with the configured object newObj := i.obj @@ -207,7 +208,7 @@ func (i *wrappedUpdatedObjectInfo) Preconditions() *api.Preconditions { // UpdatedObject satisfies the UpdatedObjectInfo interface. // It delegates to the wrapped objInfo and passes the result through any configured transformers. -func (i *wrappedUpdatedObjectInfo) UpdatedObject(ctx api.Context, oldObj runtime.Object) (runtime.Object, error) { +func (i *wrappedUpdatedObjectInfo) UpdatedObject(ctx genericapirequest.Context, oldObj runtime.Object) (runtime.Object, error) { newObj, err := i.objInfo.UpdatedObject(ctx, oldObj) if err != nil { return newObj, err diff --git a/pkg/apis/rbac/validation/BUILD b/pkg/apis/rbac/validation/BUILD index aa952c76dc..5ca89d071e 100644 --- a/pkg/apis/rbac/validation/BUILD +++ b/pkg/apis/rbac/validation/BUILD @@ -17,12 +17,12 @@ go_library( ], tags = ["automanaged"], deps = [ - "//pkg/api:go_default_library", "//pkg/api/errors:go_default_library", "//pkg/api/validation:go_default_library", "//pkg/api/validation/path:go_default_library", "//pkg/apis/rbac:go_default_library", "//pkg/auth/user:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/serviceaccount:go_default_library", "//pkg/util/errors:go_default_library", "//pkg/util/validation/field:go_default_library", diff --git a/pkg/apis/rbac/validation/rulevalidation.go b/pkg/apis/rbac/validation/rulevalidation.go index c61e921321..b29a7e846c 100644 --- a/pkg/apis/rbac/validation/rulevalidation.go +++ b/pkg/apis/rbac/validation/rulevalidation.go @@ -21,10 +21,10 @@ import ( "fmt" "github.com/golang/glog" - "k8s.io/kubernetes/pkg/api" apierrors "k8s.io/kubernetes/pkg/api/errors" "k8s.io/kubernetes/pkg/apis/rbac" "k8s.io/kubernetes/pkg/auth/user" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/serviceaccount" utilerrors "k8s.io/kubernetes/pkg/util/errors" ) @@ -41,14 +41,14 @@ type AuthorizationRuleResolver interface { } // ConfirmNoEscalation determines if the roles for a given user in a given namespace encompass the provided role. -func ConfirmNoEscalation(ctx api.Context, ruleResolver AuthorizationRuleResolver, rules []rbac.PolicyRule) error { +func ConfirmNoEscalation(ctx genericapirequest.Context, ruleResolver AuthorizationRuleResolver, rules []rbac.PolicyRule) error { ruleResolutionErrors := []error{} - user, ok := api.UserFrom(ctx) + user, ok := genericapirequest.UserFrom(ctx) if !ok { return fmt.Errorf("no user on context") } - namespace, _ := api.NamespaceFrom(ctx) + namespace, _ := genericapirequest.NamespaceFrom(ctx) ownerRules, err := ruleResolver.RulesFor(user, namespace) if err != nil { @@ -59,7 +59,7 @@ func ConfirmNoEscalation(ctx api.Context, ruleResolver AuthorizationRuleResolver ownerRightsCover, missingRights := Covers(ownerRules, rules) if !ownerRightsCover { - user, _ := api.UserFrom(ctx) + user, _ := genericapirequest.UserFrom(ctx) return apierrors.NewUnauthorized(fmt.Sprintf("attempt to grant extra privileges: %v user=%v ownerrules=%v ruleResolutionErrors=%v", missingRights, user, ownerRules, ruleResolutionErrors)) } return nil diff --git a/pkg/auth/handlers/BUILD b/pkg/auth/handlers/BUILD index 7cd515c68c..192e14c69f 100644 --- a/pkg/auth/handlers/BUILD +++ b/pkg/auth/handlers/BUILD @@ -13,8 +13,8 @@ go_library( srcs = ["handlers.go"], tags = ["automanaged"], deps = [ - "//pkg/api:go_default_library", "//pkg/auth/authenticator:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//vendor:github.com/golang/glog", "//vendor:github.com/prometheus/client_golang/prometheus", ], @@ -26,8 +26,8 @@ go_test( library = ":go_default_library", tags = ["automanaged"], deps = [ - "//pkg/api:go_default_library", "//pkg/auth/authenticator:go_default_library", "//pkg/auth/user:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", ], ) diff --git a/pkg/auth/handlers/handlers.go b/pkg/auth/handlers/handlers.go index 791df29434..a51dc6ff36 100644 --- a/pkg/auth/handlers/handlers.go +++ b/pkg/auth/handlers/handlers.go @@ -23,8 +23,8 @@ import ( "github.com/golang/glog" "github.com/prometheus/client_golang/prometheus" - "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/auth/authenticator" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" ) var ( @@ -45,12 +45,12 @@ func init() { // stores any such user found onto the provided context for the request. If authentication fails or returns an error // the failed handler is used. On success, "Authorization" header is removed from the request and handler // is invoked to serve the request. -func WithAuthentication(handler http.Handler, mapper api.RequestContextMapper, auth authenticator.Request, failed http.Handler) http.Handler { +func WithAuthentication(handler http.Handler, mapper genericapirequest.RequestContextMapper, auth authenticator.Request, failed http.Handler) http.Handler { if auth == nil { glog.Warningf("Authentication is disabled") return handler } - return api.WithRequestContext( + return genericapirequest.WithRequestContext( http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { user, ok, err := auth.AuthenticateRequest(req) if err != nil || !ok { @@ -65,7 +65,7 @@ func WithAuthentication(handler http.Handler, mapper api.RequestContextMapper, a req.Header.Del("Authorization") if ctx, ok := mapper.Get(req); ok { - mapper.Update(req, api.WithUser(ctx, user)) + mapper.Update(req, genericapirequest.WithUser(ctx, user)) } authenticatedUserCounter.WithLabelValues(compressUsername(user.GetName())).Inc() diff --git a/pkg/auth/handlers/handlers_test.go b/pkg/auth/handlers/handlers_test.go index 0c616ce124..d4a1438c19 100644 --- a/pkg/auth/handlers/handlers_test.go +++ b/pkg/auth/handlers/handlers_test.go @@ -22,21 +22,21 @@ import ( "net/http/httptest" "testing" - "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/auth/authenticator" "k8s.io/kubernetes/pkg/auth/user" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" ) func TestAuthenticateRequest(t *testing.T) { success := make(chan struct{}) - contextMapper := api.NewRequestContextMapper() + contextMapper := genericapirequest.NewRequestContextMapper() auth := WithAuthentication( http.HandlerFunc(func(_ http.ResponseWriter, req *http.Request) { ctx, ok := contextMapper.Get(req) if ctx == nil || !ok { t.Errorf("no context stored on contextMapper: %#v", contextMapper) } - user, ok := api.UserFrom(ctx) + user, ok := genericapirequest.UserFrom(ctx) if user == nil || !ok { t.Errorf("no user stored in context: %#v", ctx) } @@ -60,7 +60,7 @@ func TestAuthenticateRequest(t *testing.T) { auth.ServeHTTP(httptest.NewRecorder(), &http.Request{Header: map[string][]string{"Authorization": {"Something"}}}) <-success - empty, err := api.IsEmpty(contextMapper) + empty, err := genericapirequest.IsEmpty(contextMapper) if err != nil { t.Fatalf("unexpected error: %v", err) } @@ -71,7 +71,7 @@ func TestAuthenticateRequest(t *testing.T) { func TestAuthenticateRequestFailed(t *testing.T) { failed := make(chan struct{}) - contextMapper := api.NewRequestContextMapper() + contextMapper := genericapirequest.NewRequestContextMapper() auth := WithAuthentication( http.HandlerFunc(func(_ http.ResponseWriter, req *http.Request) { t.Errorf("unexpected call to handler") @@ -88,7 +88,7 @@ func TestAuthenticateRequestFailed(t *testing.T) { auth.ServeHTTP(httptest.NewRecorder(), &http.Request{}) <-failed - empty, err := api.IsEmpty(contextMapper) + empty, err := genericapirequest.IsEmpty(contextMapper) if err != nil { t.Fatalf("unexpected error: %v", err) } @@ -99,7 +99,7 @@ func TestAuthenticateRequestFailed(t *testing.T) { func TestAuthenticateRequestError(t *testing.T) { failed := make(chan struct{}) - contextMapper := api.NewRequestContextMapper() + contextMapper := genericapirequest.NewRequestContextMapper() auth := WithAuthentication( http.HandlerFunc(func(_ http.ResponseWriter, req *http.Request) { t.Errorf("unexpected call to handler") @@ -116,7 +116,7 @@ func TestAuthenticateRequestError(t *testing.T) { auth.ServeHTTP(httptest.NewRecorder(), &http.Request{}) <-failed - empty, err := api.IsEmpty(contextMapper) + empty, err := genericapirequest.IsEmpty(contextMapper) if err != nil { t.Fatalf("unexpected error: %v", err) } diff --git a/pkg/controller/serviceaccount/BUILD b/pkg/controller/serviceaccount/BUILD index b88cd3acc7..9b69dd639b 100644 --- a/pkg/controller/serviceaccount/BUILD +++ b/pkg/controller/serviceaccount/BUILD @@ -28,6 +28,7 @@ go_library( "//pkg/client/retry:go_default_library", "//pkg/controller/informers:go_default_library", "//pkg/fields:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/registry/core/secret:go_default_library", "//pkg/registry/core/secret/etcd:go_default_library", "//pkg/registry/core/serviceaccount:go_default_library", diff --git a/pkg/controller/serviceaccount/tokengetter.go b/pkg/controller/serviceaccount/tokengetter.go index ce425e0104..656eaf3486 100644 --- a/pkg/controller/serviceaccount/tokengetter.go +++ b/pkg/controller/serviceaccount/tokengetter.go @@ -17,10 +17,10 @@ limitations under the License. package serviceaccount import ( - "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" clientset "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/registry/core/secret" secretetcd "k8s.io/kubernetes/pkg/registry/core/secret/etcd" serviceaccountregistry "k8s.io/kubernetes/pkg/registry/core/serviceaccount" @@ -61,7 +61,7 @@ func NewGetterFromRegistries(serviceAccounts serviceaccountregistry.Registry, se return ®istryGetter{serviceAccounts, secrets} } func (r *registryGetter) GetServiceAccount(namespace, name string) (*v1.ServiceAccount, error) { - ctx := api.WithNamespace(api.NewContext(), namespace) + ctx := genericapirequest.WithNamespace(genericapirequest.NewContext(), namespace) internalServiceAccount, err := r.serviceAccounts.GetServiceAccount(ctx, name, &metav1.GetOptions{}) if err != nil { return nil, err @@ -72,7 +72,7 @@ func (r *registryGetter) GetServiceAccount(namespace, name string) (*v1.ServiceA } func (r *registryGetter) GetSecret(namespace, name string) (*v1.Secret, error) { - ctx := api.WithNamespace(api.NewContext(), namespace) + ctx := genericapirequest.WithNamespace(genericapirequest.NewContext(), namespace) internalSecret, err := r.secrets.GetSecret(ctx, name, &metav1.GetOptions{}) if err != nil { return nil, err diff --git a/pkg/genericapiserver/BUILD b/pkg/genericapiserver/BUILD index 5658244bbf..2d1737bf33 100644 --- a/pkg/genericapiserver/BUILD +++ b/pkg/genericapiserver/BUILD @@ -107,6 +107,7 @@ go_test( "//pkg/auth/authorizer:go_default_library", "//pkg/auth/user:go_default_library", "//pkg/generated/openapi:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/genericapiserver/options:go_default_library", "//pkg/runtime:go_default_library", "//pkg/runtime/schema:go_default_library", diff --git a/pkg/genericapiserver/api/BUILD b/pkg/genericapiserver/api/BUILD index 5f13d3650e..de414a21e7 100644 --- a/pkg/genericapiserver/api/BUILD +++ b/pkg/genericapiserver/api/BUILD @@ -31,6 +31,7 @@ go_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/runtime:go_default_library", "//pkg/runtime/schema:go_default_library", "//pkg/util/errors:go_default_library", diff --git a/pkg/genericapiserver/api/apiserver_test.go b/pkg/genericapiserver/api/apiserver_test.go index b131300eb8..c4684ef0b0 100644 --- a/pkg/genericapiserver/api/apiserver_test.go +++ b/pkg/genericapiserver/api/apiserver_test.go @@ -85,7 +85,7 @@ var accessor = meta.NewAccessor() var selfLinker runtime.SelfLinker = accessor var mapper, namespaceMapper meta.RESTMapper // The mappers with namespace and with legacy namespace scopes. var admissionControl admission.Interface -var requestContextMapper api.RequestContextMapper +var requestContextMapper request.RequestContextMapper func interfacesFor(version schema.GroupVersion) (*meta.VersionInterfaces, error) { switch version { @@ -209,7 +209,7 @@ func init() { mapper = nsMapper namespaceMapper = nsMapper admissionControl = admit.NewAlwaysAdmit() - requestContextMapper = api.NewRequestContextMapper() + requestContextMapper = request.NewRequestContextMapper() api.Scheme.AddFieldLabelConversionFunc(grouplessGroupVersion.String(), "Simple", func(label, value string) (string, string, error) { @@ -380,7 +380,7 @@ type SimpleRESTStorage struct { injectedFunction func(obj runtime.Object) (returnObj runtime.Object, err error) } -func (storage *SimpleRESTStorage) Export(ctx api.Context, name string, opts metav1.ExportOptions) (runtime.Object, error) { +func (storage *SimpleRESTStorage) Export(ctx request.Context, name string, opts metav1.ExportOptions) (runtime.Object, error) { obj, err := storage.Get(ctx, name, &metav1.GetOptions{}) if err != nil { return nil, err @@ -395,7 +395,7 @@ func (storage *SimpleRESTStorage) Export(ctx api.Context, name string, opts meta return obj, storage.errors["export"] } -func (storage *SimpleRESTStorage) List(ctx api.Context, options *api.ListOptions) (runtime.Object, error) { +func (storage *SimpleRESTStorage) List(ctx request.Context, options *api.ListOptions) (runtime.Object, error) { storage.checkContext(ctx) result := &genericapitesting.SimpleList{ Items: storage.list, @@ -442,7 +442,7 @@ func (h *OutputConnect) ServeHTTP(w http.ResponseWriter, req *http.Request) { w.Write([]byte(h.response)) } -func (storage *SimpleRESTStorage) Get(ctx api.Context, id string, options *metav1.GetOptions) (runtime.Object, error) { +func (storage *SimpleRESTStorage) Get(ctx request.Context, id string, options *metav1.GetOptions) (runtime.Object, error) { storage.checkContext(ctx) if id == "binary" { return storage.stream, storage.errors["get"] @@ -454,11 +454,11 @@ func (storage *SimpleRESTStorage) Get(ctx api.Context, id string, options *metav return copied, storage.errors["get"] } -func (storage *SimpleRESTStorage) checkContext(ctx api.Context) { - storage.actualNamespace, storage.namespacePresent = api.NamespaceFrom(ctx) +func (storage *SimpleRESTStorage) checkContext(ctx request.Context) { + storage.actualNamespace, storage.namespacePresent = request.NamespaceFrom(ctx) } -func (storage *SimpleRESTStorage) Delete(ctx api.Context, id string, options *api.DeleteOptions) (runtime.Object, error) { +func (storage *SimpleRESTStorage) Delete(ctx request.Context, id string, options *api.DeleteOptions) (runtime.Object, error) { storage.checkContext(ctx) storage.deleted = id storage.deleteOptions = options @@ -481,7 +481,7 @@ func (storage *SimpleRESTStorage) NewList() runtime.Object { return &genericapitesting.SimpleList{} } -func (storage *SimpleRESTStorage) Create(ctx api.Context, obj runtime.Object) (runtime.Object, error) { +func (storage *SimpleRESTStorage) Create(ctx request.Context, obj runtime.Object) (runtime.Object, error) { storage.checkContext(ctx) storage.created = obj.(*genericapitesting.Simple) if err := storage.errors["create"]; err != nil { @@ -494,7 +494,7 @@ func (storage *SimpleRESTStorage) Create(ctx api.Context, obj runtime.Object) (r return obj, err } -func (storage *SimpleRESTStorage) Update(ctx api.Context, name string, objInfo rest.UpdatedObjectInfo) (runtime.Object, bool, error) { +func (storage *SimpleRESTStorage) Update(ctx request.Context, name string, objInfo rest.UpdatedObjectInfo) (runtime.Object, bool, error) { storage.checkContext(ctx) obj, err := objInfo.UpdatedObject(ctx, &storage.item) if err != nil { @@ -511,7 +511,7 @@ func (storage *SimpleRESTStorage) Update(ctx api.Context, name string, objInfo r } // Implement ResourceWatcher. -func (storage *SimpleRESTStorage) Watch(ctx api.Context, options *api.ListOptions) (watch.Interface, error) { +func (storage *SimpleRESTStorage) Watch(ctx request.Context, options *api.ListOptions) (watch.Interface, error) { storage.lock.Lock() defer storage.lock.Unlock() storage.checkContext(ctx) @@ -527,7 +527,7 @@ func (storage *SimpleRESTStorage) Watch(ctx api.Context, options *api.ListOption if options != nil { storage.requestedResourceVersion = options.ResourceVersion } - storage.requestedResourceNamespace = api.NamespaceValue(ctx) + storage.requestedResourceNamespace = request.NamespaceValue(ctx) if err := storage.errors["watch"]; err != nil { return nil, err } @@ -545,10 +545,10 @@ func (storage *SimpleRESTStorage) Watcher() *watch.FakeWatcher { var _ = rest.Redirector(&SimpleRESTStorage{}) // Implement Redirector. -func (storage *SimpleRESTStorage) ResourceLocation(ctx api.Context, id string) (*url.URL, http.RoundTripper, error) { +func (storage *SimpleRESTStorage) ResourceLocation(ctx request.Context, id string) (*url.URL, http.RoundTripper, error) { storage.checkContext(ctx) // validate that the namespace context on the request matches the expected input - storage.requestedResourceNamespace = api.NamespaceValue(ctx) + storage.requestedResourceNamespace = request.NamespaceValue(ctx) if storage.expectedResourceNamespace != storage.requestedResourceNamespace { return nil, nil, fmt.Errorf("Expected request namespace %s, but got namespace %s", storage.expectedResourceNamespace, storage.requestedResourceNamespace) } @@ -580,7 +580,7 @@ func (s *ConnecterRESTStorage) New() runtime.Object { return &genericapitesting.Simple{} } -func (s *ConnecterRESTStorage) Connect(ctx api.Context, id string, options runtime.Object, responder rest.Responder) (http.Handler, error) { +func (s *ConnecterRESTStorage) Connect(ctx request.Context, id string, options runtime.Object, responder rest.Responder) (http.Handler, error) { s.receivedConnectOptions = options s.receivedID = id s.receivedResponder = responder @@ -605,7 +605,7 @@ type LegacyRESTStorage struct { *SimpleRESTStorage } -func (storage LegacyRESTStorage) Delete(ctx api.Context, id string) (runtime.Object, error) { +func (storage LegacyRESTStorage) Delete(ctx request.Context, id string) (runtime.Object, error) { return storage.SimpleRESTStorage.Delete(ctx, id, nil) } @@ -630,7 +630,7 @@ type GetWithOptionsRESTStorage struct { takesPath string } -func (r *GetWithOptionsRESTStorage) Get(ctx api.Context, name string, options runtime.Object) (runtime.Object, error) { +func (r *GetWithOptionsRESTStorage) Get(ctx request.Context, name string, options runtime.Object) (runtime.Object, error) { if _, ok := options.(*genericapitesting.SimpleGetOptions); !ok { return nil, fmt.Errorf("Unexpected options object: %#v", options) } @@ -652,7 +652,7 @@ type NamedCreaterRESTStorage struct { createdName string } -func (storage *NamedCreaterRESTStorage) Create(ctx api.Context, name string, obj runtime.Object) (runtime.Object, error) { +func (storage *NamedCreaterRESTStorage) Create(ctx request.Context, name string, obj runtime.Object) (runtime.Object, error) { storage.checkContext(ctx) storage.created = obj.(*genericapitesting.Simple) storage.createdName = name @@ -679,7 +679,7 @@ func (storage *SimpleTypedStorage) New() runtime.Object { return storage.baseType } -func (storage *SimpleTypedStorage) Get(ctx api.Context, id string, options *metav1.GetOptions) (runtime.Object, error) { +func (storage *SimpleTypedStorage) Get(ctx request.Context, id string, options *metav1.GetOptions) (runtime.Object, error) { storage.checkContext(ctx) copied, err := api.Scheme.Copy(storage.item) if err != nil { @@ -688,8 +688,8 @@ func (storage *SimpleTypedStorage) Get(ctx api.Context, id string, options *meta return copied, storage.errors["get"] } -func (storage *SimpleTypedStorage) checkContext(ctx api.Context) { - storage.actualNamespace, storage.namespacePresent = api.NamespaceFrom(ctx) +func (storage *SimpleTypedStorage) checkContext(ctx request.Context) { + storage.actualNamespace, storage.namespacePresent = request.NamespaceFrom(ctx) } func extractBody(response *http.Response, object runtime.Object) (string, error) { @@ -3255,7 +3255,7 @@ func (storage *SimpleXGSubresourceRESTStorage) New() runtime.Object { return &SimpleXGSubresource{} } -func (storage *SimpleXGSubresourceRESTStorage) Get(ctx api.Context, id string, options *metav1.GetOptions) (runtime.Object, error) { +func (storage *SimpleXGSubresourceRESTStorage) Get(ctx request.Context, id string, options *metav1.GetOptions) (runtime.Object, error) { copied, err := api.Scheme.Copy(&storage.item) if err != nil { panic(err) @@ -3400,7 +3400,7 @@ func BenchmarkUpdateProtobuf(b *testing.B) { func newTestServer(handler http.Handler) *httptest.Server { handler = genericapifilters.WithRequestInfo(handler, newTestRequestInfoResolver(), requestContextMapper) - handler = api.WithRequestContext(handler, requestContextMapper) + handler = request.WithRequestContext(handler, requestContextMapper) return httptest.NewServer(handler) } diff --git a/pkg/genericapiserver/api/filters/BUILD b/pkg/genericapiserver/api/filters/BUILD index 2376e30ee8..d1e42e05df 100644 --- a/pkg/genericapiserver/api/filters/BUILD +++ b/pkg/genericapiserver/api/filters/BUILD @@ -44,7 +44,6 @@ go_test( library = ":go_default_library", tags = ["automanaged"], deps = [ - "//pkg/api:go_default_library", "//pkg/apis/authentication:go_default_library", "//pkg/apis/batch:go_default_library", "//pkg/auth/authorizer:go_default_library", diff --git a/pkg/genericapiserver/api/filters/audit.go b/pkg/genericapiserver/api/filters/audit.go index eaeccd8a2e..3e65e58d63 100644 --- a/pkg/genericapiserver/api/filters/audit.go +++ b/pkg/genericapiserver/api/filters/audit.go @@ -29,9 +29,9 @@ import ( "github.com/golang/glog" "github.com/pborman/uuid" - "k8s.io/kubernetes/pkg/api" authenticationapi "k8s.io/kubernetes/pkg/apis/authentication" "k8s.io/kubernetes/pkg/genericapiserver/api/handlers/responsewriters" + "k8s.io/kubernetes/pkg/genericapiserver/api/request" utilnet "k8s.io/kubernetes/pkg/util/net" ) @@ -89,7 +89,7 @@ var _ http.Hijacker = &fancyResponseWriterDelegator{} // 2. the response line containing: // - the unique id from 1 // - response code -func WithAudit(handler http.Handler, requestContextMapper api.RequestContextMapper, out io.Writer) http.Handler { +func WithAudit(handler http.Handler, requestContextMapper request.RequestContextMapper, out io.Writer) http.Handler { if out == nil { return handler } diff --git a/pkg/genericapiserver/api/filters/audit_test.go b/pkg/genericapiserver/api/filters/audit_test.go index 785bcb8953..b592432afd 100644 --- a/pkg/genericapiserver/api/filters/audit_test.go +++ b/pkg/genericapiserver/api/filters/audit_test.go @@ -28,7 +28,6 @@ import ( "strings" "testing" - "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/auth/user" "k8s.io/kubernetes/pkg/genericapiserver/api/request" ) @@ -105,10 +104,10 @@ type fakeRequestContextMapper struct { user *user.DefaultInfo } -func (m *fakeRequestContextMapper) Get(req *http.Request) (api.Context, bool) { - ctx := api.NewContext() +func (m *fakeRequestContextMapper) Get(req *http.Request) (request.Context, bool) { + ctx := request.NewContext() if m.user != nil { - ctx = api.WithUser(ctx, m.user) + ctx = request.WithUser(ctx, m.user) } resolver := newTestRequestInfoResolver() @@ -120,7 +119,7 @@ func (m *fakeRequestContextMapper) Get(req *http.Request) (api.Context, bool) { return ctx, true } -func (*fakeRequestContextMapper) Update(req *http.Request, context api.Context) error { +func (*fakeRequestContextMapper) Update(req *http.Request, context request.Context) error { return nil } diff --git a/pkg/genericapiserver/api/filters/authorization.go b/pkg/genericapiserver/api/filters/authorization.go index 96f606d622..750008054a 100644 --- a/pkg/genericapiserver/api/filters/authorization.go +++ b/pkg/genericapiserver/api/filters/authorization.go @@ -22,14 +22,13 @@ import ( "github.com/golang/glog" - "k8s.io/kubernetes/pkg/api" "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. -func WithAuthorization(handler http.Handler, requestContextMapper api.RequestContextMapper, a authorizer.Authorizer) http.Handler { +func WithAuthorization(handler http.Handler, requestContextMapper request.RequestContextMapper, a authorizer.Authorizer) http.Handler { if a == nil { glog.Warningf("Authorization is disabled") return handler @@ -61,10 +60,10 @@ func WithAuthorization(handler http.Handler, requestContextMapper api.RequestCon }) } -func GetAuthorizerAttributes(ctx api.Context) (authorizer.Attributes, error) { +func GetAuthorizerAttributes(ctx request.Context) (authorizer.Attributes, error) { attribs := authorizer.AttributesRecord{} - user, ok := api.UserFrom(ctx) + user, ok := request.UserFrom(ctx) if ok { attribs.User = user } diff --git a/pkg/genericapiserver/api/filters/authorization_test.go b/pkg/genericapiserver/api/filters/authorization_test.go index 114820b34c..8f479b124e 100644 --- a/pkg/genericapiserver/api/filters/authorization_test.go +++ b/pkg/genericapiserver/api/filters/authorization_test.go @@ -23,14 +23,14 @@ import ( "reflect" "testing" - "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" + "k8s.io/kubernetes/pkg/genericapiserver/api/request" ) func TestGetAuthorizerAttributes(t *testing.T) { - mapper := api.NewRequestContextMapper() + mapper := request.NewRequestContextMapper() testcases := map[string]struct { Verb string @@ -117,7 +117,7 @@ func TestGetAuthorizerAttributes(t *testing.T) { attribs, err = GetAuthorizerAttributes(ctx) }) handler = WithRequestInfo(handler, newTestRequestInfoResolver(), mapper) - handler = api.WithRequestContext(handler, mapper) + handler = request.WithRequestContext(handler, mapper) handler.ServeHTTP(httptest.NewRecorder(), req) if err != nil { diff --git a/pkg/genericapiserver/api/filters/impersonation.go b/pkg/genericapiserver/api/filters/impersonation.go index fb2664ed2c..168968d770 100644 --- a/pkg/genericapiserver/api/filters/impersonation.go +++ b/pkg/genericapiserver/api/filters/impersonation.go @@ -29,12 +29,13 @@ import ( "k8s.io/kubernetes/pkg/auth/authorizer" "k8s.io/kubernetes/pkg/auth/user" "k8s.io/kubernetes/pkg/genericapiserver/api/handlers/responsewriters" + "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/httplog" "k8s.io/kubernetes/pkg/serviceaccount" ) // WithImpersonation is a filter that will inspect and check requests that attempt to change the user.Info for their requests -func WithImpersonation(handler http.Handler, requestContextMapper api.RequestContextMapper, a authorizer.Authorizer) http.Handler { +func WithImpersonation(handler http.Handler, requestContextMapper request.RequestContextMapper, a authorizer.Authorizer) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { impersonationRequests, err := buildImpersonationRequests(req.Header) if err != nil { @@ -52,7 +53,7 @@ func WithImpersonation(handler http.Handler, requestContextMapper api.RequestCon responsewriters.InternalError(w, req, errors.New("no context found for request")) return } - requestor, exists := api.UserFrom(ctx) + requestor, exists := request.UserFrom(ctx) if !exists { responsewriters.InternalError(w, req, errors.New("no user found for request")) return @@ -120,9 +121,9 @@ func WithImpersonation(handler http.Handler, requestContextMapper api.RequestCon Groups: groups, Extra: userExtra, } - requestContextMapper.Update(req, api.WithUser(ctx, newUser)) + requestContextMapper.Update(req, request.WithUser(ctx, newUser)) - oldUser, _ := api.UserFrom(ctx) + oldUser, _ := request.UserFrom(ctx) httplog.LogOf(req, w).Addf("%v is acting as %v", oldUser, newUser) // clear all the impersonation headers from the request diff --git a/pkg/genericapiserver/api/filters/impersonation_test.go b/pkg/genericapiserver/api/filters/impersonation_test.go index 7da3560587..b4c9a21781 100644 --- a/pkg/genericapiserver/api/filters/impersonation_test.go +++ b/pkg/genericapiserver/api/filters/impersonation_test.go @@ -24,10 +24,10 @@ import ( "sync" "testing" - "k8s.io/kubernetes/pkg/api" 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/request" ) type impersonateAuthorizer struct{} @@ -264,14 +264,14 @@ func TestImpersonationFilter(t *testing.T) { }, } - requestContextMapper := api.NewRequestContextMapper() - var ctx api.Context + requestContextMapper := request.NewRequestContextMapper() + var ctx request.Context var actualUser user.Info var lock sync.Mutex doNothingHandler := http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { currentCtx, _ := requestContextMapper.Get(req) - user, exists := api.UserFrom(currentCtx) + user, exists := request.UserFrom(currentCtx) if !exists { actualUser = nil return @@ -291,7 +291,7 @@ func TestImpersonationFilter(t *testing.T) { requestContextMapper.Update(req, ctx) currentCtx, _ := requestContextMapper.Get(req) - user, exists := api.UserFrom(currentCtx) + user, exists := request.UserFrom(currentCtx) if !exists { actualUser = nil return @@ -302,7 +302,7 @@ func TestImpersonationFilter(t *testing.T) { delegate.ServeHTTP(w, req) }) }(WithImpersonation(doNothingHandler, requestContextMapper, impersonateAuthorizer{})) - handler = api.WithRequestContext(handler, requestContextMapper) + handler = request.WithRequestContext(handler, requestContextMapper) server := httptest.NewServer(handler) defer server.Close() @@ -311,7 +311,7 @@ func TestImpersonationFilter(t *testing.T) { func() { lock.Lock() defer lock.Unlock() - ctx = api.WithUser(api.NewContext(), tc.user) + ctx = request.WithUser(request.NewContext(), tc.user) }() req, err := http.NewRequest("GET", server.URL, nil) diff --git a/pkg/genericapiserver/api/filters/requestinfo.go b/pkg/genericapiserver/api/filters/requestinfo.go index 1bfbc35a6c..dd381da54b 100644 --- a/pkg/genericapiserver/api/filters/requestinfo.go +++ b/pkg/genericapiserver/api/filters/requestinfo.go @@ -21,13 +21,12 @@ import ( "fmt" "net/http" - "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/genericapiserver/api/handlers/responsewriters" "k8s.io/kubernetes/pkg/genericapiserver/api/request" ) // WithRequestInfo attaches a RequestInfo to the context. -func WithRequestInfo(handler http.Handler, resolver *request.RequestInfoFactory, requestContextMapper api.RequestContextMapper) http.Handler { +func WithRequestInfo(handler http.Handler, resolver *request.RequestInfoFactory, requestContextMapper request.RequestContextMapper) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { ctx, ok := requestContextMapper.Get(req) if !ok { diff --git a/pkg/genericapiserver/api/groupversion.go b/pkg/genericapiserver/api/groupversion.go index ac0e2b1b70..1818119998 100644 --- a/pkg/genericapiserver/api/groupversion.go +++ b/pkg/genericapiserver/api/groupversion.go @@ -24,12 +24,12 @@ import ( "github.com/emicklei/go-restful" "k8s.io/kubernetes/pkg/admission" - "k8s.io/kubernetes/pkg/api" apierrors "k8s.io/kubernetes/pkg/api/errors" "k8s.io/kubernetes/pkg/api/meta" "k8s.io/kubernetes/pkg/api/rest" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" "k8s.io/kubernetes/pkg/genericapiserver/api/handlers" + "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/runtime/schema" utilerrors "k8s.io/kubernetes/pkg/util/errors" @@ -68,7 +68,7 @@ type APIGroupVersion struct { Linker runtime.SelfLinker Admit admission.Interface - Context api.RequestContextMapper + Context request.RequestContextMapper MinRequestTimeout time.Duration diff --git a/pkg/genericapiserver/api/handlers/BUILD b/pkg/genericapiserver/api/handlers/BUILD index 059a7ae1a4..cd00aa51f2 100644 --- a/pkg/genericapiserver/api/handlers/BUILD +++ b/pkg/genericapiserver/api/handlers/BUILD @@ -20,6 +20,7 @@ go_test( "//pkg/api/testapi:go_default_library", "//pkg/api/v1:go_default_library", "//pkg/apis/meta/v1:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/runtime:go_default_library", "//pkg/runtime/schema:go_default_library", "//pkg/types:go_default_library", diff --git a/pkg/genericapiserver/api/handlers/proxy.go b/pkg/genericapiserver/api/handlers/proxy.go index b3cdc92e0f..916122dee5 100644 --- a/pkg/genericapiserver/api/handlers/proxy.go +++ b/pkg/genericapiserver/api/handlers/proxy.go @@ -49,7 +49,7 @@ type ProxyHandler struct { Prefix string Storage map[string]rest.Storage Serializer runtime.NegotiatedSerializer - Mapper api.RequestContextMapper + Mapper request.RequestContextMapper } func (r *ProxyHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { @@ -87,7 +87,7 @@ func (r *ProxyHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { verb = requestInfo.Verb namespace, resource, parts := requestInfo.Namespace, requestInfo.Resource, requestInfo.Parts - ctx = api.WithNamespace(ctx, namespace) + ctx = request.WithNamespace(ctx, namespace) if len(parts) < 2 { responsewriters.NotFound(w, req) httpCode = http.StatusNotFound diff --git a/pkg/genericapiserver/api/handlers/responsewriters/BUILD b/pkg/genericapiserver/api/handlers/responsewriters/BUILD index 236fb672d6..3e51528d77 100644 --- a/pkg/genericapiserver/api/handlers/responsewriters/BUILD +++ b/pkg/genericapiserver/api/handlers/responsewriters/BUILD @@ -8,6 +8,19 @@ load( "go_test", ) +go_test( + name = "go_default_test", + srcs = ["status_test.go"], + library = ":go_default_library", + tags = ["automanaged"], + deps = [ + "//pkg/api:go_default_library", + "//pkg/api/errors:go_default_library", + "//pkg/apis/meta/v1:go_default_library", + "//pkg/runtime/schema:go_default_library", + ], +) + go_library( name = "go_default_library", srcs = [ @@ -30,16 +43,3 @@ go_library( "//pkg/util/wsstream:go_default_library", ], ) - -go_test( - name = "go_default_test", - srcs = ["status_test.go"], - library = ":go_default_library", - tags = ["automanaged"], - deps = [ - "//pkg/api:go_default_library", - "//pkg/api/errors:go_default_library", - "//pkg/apis/meta/v1:go_default_library", - "//pkg/runtime/schema:go_default_library", - ], -) diff --git a/pkg/genericapiserver/api/handlers/rest.go b/pkg/genericapiserver/api/handlers/rest.go index 91ae18514f..ec7563cbbe 100644 --- a/pkg/genericapiserver/api/handlers/rest.go +++ b/pkg/genericapiserver/api/handlers/rest.go @@ -36,6 +36,7 @@ import ( "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/genericapiserver/api/request" "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/runtime/schema" "k8s.io/kubernetes/pkg/util" @@ -48,7 +49,7 @@ import ( ) // ContextFunc returns a Context given a request - a context must be returned -type ContextFunc func(req *restful.Request) api.Context +type ContextFunc func(req *restful.Request) request.Context // ScopeNamer handles accessing names from requests and objects type ScopeNamer interface { @@ -94,7 +95,7 @@ func (scope *RequestScope) err(err error, w http.ResponseWriter, req *http.Reque // getterFunc performs a get request with the given context and object name. The request // may be used to deserialize an options object to pass to the getter. -type getterFunc func(ctx api.Context, name string, req *restful.Request) (runtime.Object, error) +type getterFunc func(ctx request.Context, name string, req *restful.Request) (runtime.Object, error) // maxRetryWhenPatchConflicts is the maximum number of conflicts retry during a patch operation before returning failure const maxRetryWhenPatchConflicts = 5 @@ -110,7 +111,7 @@ func getResourceHandler(scope RequestScope, getter getterFunc) restful.RouteFunc return } ctx := scope.ContextFunc(req) - ctx = api.WithNamespace(ctx, namespace) + ctx = request.WithNamespace(ctx, namespace) result, err := getter(ctx, name, req) if err != nil { @@ -128,7 +129,7 @@ func getResourceHandler(scope RequestScope, getter getterFunc) restful.RouteFunc // GetResource returns a function that handles retrieving a single resource from a rest.Storage object. func GetResource(r rest.Getter, e rest.Exporter, scope RequestScope) restful.RouteFunction { return getResourceHandler(scope, - func(ctx api.Context, name string, req *restful.Request) (runtime.Object, error) { + func(ctx request.Context, name string, req *restful.Request) (runtime.Object, error) { // For performance tracking purposes. trace := util.NewTrace("Get " + req.Request.URL.Path) defer trace.LogIfLong(500 * time.Millisecond) @@ -158,7 +159,7 @@ func GetResource(r rest.Getter, e rest.Exporter, scope RequestScope) restful.Rou // GetResourceWithOptions returns a function that handles retrieving a single resource from a rest.Storage object. func GetResourceWithOptions(r rest.GetterWithOptions, scope RequestScope) restful.RouteFunction { return getResourceHandler(scope, - func(ctx api.Context, name string, req *restful.Request) (runtime.Object, error) { + func(ctx request.Context, name string, req *restful.Request) (runtime.Object, error) { opts, subpath, subpathKey := r.NewGetOptions() if err := getRequestOptions(req, scope, opts, subpath, subpathKey); err != nil { return nil, err @@ -194,7 +195,7 @@ func ConnectResource(connecter rest.Connecter, scope RequestScope, admit admissi return } ctx := scope.ContextFunc(req) - ctx = api.WithNamespace(ctx, namespace) + ctx = request.WithNamespace(ctx, namespace) opts, subpath, subpathKey := connecter.NewConnectOptions() if err := getRequestOptions(req, scope, opts, subpath, subpathKey); err != nil { scope.err(err, res.ResponseWriter, req.Request) @@ -206,7 +207,7 @@ func ConnectResource(connecter rest.Connecter, scope RequestScope, admit admissi Options: opts, ResourcePath: restPath, } - userInfo, _ := api.UserFrom(ctx) + userInfo, _ := request.UserFrom(ctx) err = admit.Admit(admission.NewAttributesRecord(connectRequest, nil, scope.Kind, namespace, name, scope.Resource, scope.Subresource, admission.Connect, userInfo)) if err != nil { @@ -261,7 +262,7 @@ func ListResource(r rest.Lister, rw rest.Watcher, scope RequestScope, forceWatch } ctx := scope.ContextFunc(req) - ctx = api.WithNamespace(ctx, namespace) + ctx = request.WithNamespace(ctx, namespace) opts := api.ListOptions{} if err := scope.ParameterCodec.DecodeParameters(req.Request.URL.Query(), scope.Kind.GroupVersion(), &opts); err != nil { @@ -364,7 +365,7 @@ func createHandler(r rest.NamedCreater, scope RequestScope, typer runtime.Object } ctx := scope.ContextFunc(req) - ctx = api.WithNamespace(ctx, namespace) + ctx = request.WithNamespace(ctx, namespace) gv := scope.Kind.GroupVersion() s, err := negotiation.NegotiateInputSerializer(req.Request, scope.Serializer) @@ -397,7 +398,7 @@ func createHandler(r rest.NamedCreater, scope RequestScope, typer runtime.Object trace.Step("Conversion done") if admit != nil && admit.Handles(admission.Create) { - userInfo, _ := api.UserFrom(ctx) + userInfo, _ := request.UserFrom(ctx) err = admit.Admit(admission.NewAttributesRecord(obj, nil, scope.Kind, namespace, name, scope.Resource, scope.Subresource, admission.Create, userInfo)) if err != nil { @@ -444,7 +445,7 @@ type namedCreaterAdapter struct { rest.Creater } -func (c *namedCreaterAdapter) Create(ctx api.Context, name string, obj runtime.Object) (runtime.Object, error) { +func (c *namedCreaterAdapter) Create(ctx request.Context, name string, obj runtime.Object) (runtime.Object, error) { return c.Creater.Create(ctx, obj) } @@ -466,7 +467,7 @@ func PatchResource(r rest.Patcher, scope RequestScope, typer runtime.ObjectTyper } ctx := scope.ContextFunc(req) - ctx = api.WithNamespace(ctx, namespace) + ctx = request.WithNamespace(ctx, namespace) versionedObj, err := converter.ConvertToVersion(r.New(), scope.Kind.GroupVersion()) if err != nil { @@ -501,7 +502,7 @@ func PatchResource(r rest.Patcher, scope RequestScope, typer runtime.ObjectTyper updateAdmit := func(updatedObject runtime.Object, currentObject runtime.Object) error { if admit != nil && admit.Handles(admission.Update) { - userInfo, _ := api.UserFrom(ctx) + userInfo, _ := request.UserFrom(ctx) return admit.Admit(admission.NewAttributesRecord(updatedObject, currentObject, scope.Kind, namespace, name, scope.Resource, scope.Subresource, admission.Update, userInfo)) } @@ -528,7 +529,7 @@ type updateAdmissionFunc func(updatedObject runtime.Object, currentObject runtim // patchResource divides PatchResource for easier unit testing func patchResource( - ctx api.Context, + ctx request.Context, admit updateAdmissionFunc, timeout time.Duration, versionedObj runtime.Object, @@ -542,7 +543,7 @@ func patchResource( codec runtime.Codec, ) (runtime.Object, error) { - namespace := api.NamespaceValue(ctx) + namespace := request.NamespaceValue(ctx) var ( originalObjJS []byte @@ -552,7 +553,7 @@ func patchResource( // applyPatch is called every time GuaranteedUpdate asks for the updated object, // and is given the currently persisted object as input. - applyPatch := func(_ api.Context, _, currentObject runtime.Object) (runtime.Object, error) { + applyPatch := func(_ request.Context, _, currentObject runtime.Object) (runtime.Object, error) { // Make sure we actually have a persisted currentObject if hasUID, err := hasUID(currentObject); err != nil { return nil, err @@ -643,7 +644,7 @@ func patchResource( // applyAdmission is called every time GuaranteedUpdate asks for the updated object, // and is given the currently persisted object and the patched object as input. - applyAdmission := func(ctx api.Context, patchedObject runtime.Object, currentObject runtime.Object) (runtime.Object, error) { + applyAdmission := func(ctx request.Context, patchedObject runtime.Object, currentObject runtime.Object) (runtime.Object, error) { return patchedObject, admit(patchedObject, currentObject) } @@ -677,7 +678,7 @@ func UpdateResource(r rest.Updater, scope RequestScope, typer runtime.ObjectType return } ctx := scope.ContextFunc(req) - ctx = api.WithNamespace(ctx, namespace) + ctx = request.WithNamespace(ctx, namespace) body, err := readBody(req.Request) if err != nil { @@ -713,8 +714,8 @@ func UpdateResource(r rest.Updater, scope RequestScope, typer runtime.ObjectType var transformers []rest.TransformFunc if admit != nil && admit.Handles(admission.Update) { - transformers = append(transformers, func(ctx api.Context, newObj, oldObj runtime.Object) (runtime.Object, error) { - userInfo, _ := api.UserFrom(ctx) + transformers = append(transformers, func(ctx request.Context, newObj, oldObj runtime.Object) (runtime.Object, error) { + userInfo, _ := request.UserFrom(ctx) return newObj, admit.Admit(admission.NewAttributesRecord(newObj, oldObj, scope.Kind, namespace, name, scope.Resource, scope.Subresource, admission.Update, userInfo)) }) } @@ -764,7 +765,7 @@ func DeleteResource(r rest.GracefulDeleter, allowsOptions bool, scope RequestSco return } ctx := scope.ContextFunc(req) - ctx = api.WithNamespace(ctx, namespace) + ctx = request.WithNamespace(ctx, namespace) options := &api.DeleteOptions{} if allowsOptions { @@ -800,7 +801,7 @@ func DeleteResource(r rest.GracefulDeleter, allowsOptions bool, scope RequestSco } if admit != nil && admit.Handles(admission.Delete) { - userInfo, _ := api.UserFrom(ctx) + userInfo, _ := request.UserFrom(ctx) err = admit.Admit(admission.NewAttributesRecord(nil, nil, scope.Kind, namespace, name, scope.Resource, scope.Subresource, admission.Delete, userInfo)) if err != nil { @@ -858,10 +859,10 @@ func DeleteCollection(r rest.CollectionDeleter, checkBody bool, scope RequestSco } ctx := scope.ContextFunc(req) - ctx = api.WithNamespace(ctx, namespace) + ctx = request.WithNamespace(ctx, namespace) if admit != nil && admit.Handles(admission.Delete) { - userInfo, _ := api.UserFrom(ctx) + userInfo, _ := request.UserFrom(ctx) err = admit.Admit(admission.NewAttributesRecord(nil, nil, scope.Kind, namespace, "", scope.Resource, scope.Subresource, admission.Delete, userInfo)) if err != nil { diff --git a/pkg/genericapiserver/api/handlers/rest_test.go b/pkg/genericapiserver/api/handlers/rest_test.go index c2be4fc2c3..337382ebd5 100644 --- a/pkg/genericapiserver/api/handlers/rest_test.go +++ b/pkg/genericapiserver/api/handlers/rest_test.go @@ -32,6 +32,7 @@ import ( "k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/api/v1" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" + "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/runtime/schema" "k8s.io/kubernetes/pkg/types" @@ -83,7 +84,7 @@ func (p *testPatcher) New() runtime.Object { return &api.Pod{} } -func (p *testPatcher) Update(ctx api.Context, name string, objInfo rest.UpdatedObjectInfo) (runtime.Object, bool, error) { +func (p *testPatcher) Update(ctx request.Context, name string, objInfo rest.UpdatedObjectInfo) (runtime.Object, bool, error) { currentPod := p.startingPod if p.numUpdates > 0 { currentPod = p.updatePod @@ -102,7 +103,7 @@ func (p *testPatcher) Update(ctx api.Context, name string, objInfo rest.UpdatedO return inPod, false, nil } -func (p *testPatcher) Get(ctx api.Context, name string, options *metav1.GetOptions) (runtime.Object, error) { +func (p *testPatcher) Get(ctx request.Context, name string, options *metav1.GetOptions) (runtime.Object, error) { p.t.Fatal("Unexpected call to testPatcher.Get") return nil, errors.New("Unexpected call to testPatcher.Get") } @@ -182,8 +183,8 @@ func (tc *patchTestCase) Run(t *testing.T) { testPatcher.startingPod = tc.startingPod testPatcher.updatePod = tc.updatePod - ctx := api.NewDefaultContext() - ctx = api.WithNamespace(ctx, namespace) + ctx := request.NewDefaultContext() + ctx = request.WithNamespace(ctx, namespace) namer := &testNamer{namespace, name} copier := runtime.ObjectCopier(api.Scheme) diff --git a/pkg/genericapiserver/api/installer.go b/pkg/genericapiserver/api/installer.go index 9a70fe1898..5486bd7761 100644 --- a/pkg/genericapiserver/api/installer.go +++ b/pkg/genericapiserver/api/installer.go @@ -37,6 +37,7 @@ import ( "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/genericapiserver/api/request" "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/runtime/schema" utilstrings "k8s.io/kubernetes/pkg/util/strings" @@ -341,14 +342,14 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag } var ctxFn handlers.ContextFunc - ctxFn = func(req *restful.Request) api.Context { + ctxFn = func(req *restful.Request) request.Context { if context == nil { - return api.WithUserAgent(api.NewContext(), req.HeaderParameter("User-Agent")) + return request.WithUserAgent(request.NewContext(), req.HeaderParameter("User-Agent")) } if ctx, ok := context.Get(req.Request); ok { - return api.WithUserAgent(ctx, req.HeaderParameter("User-Agent")) + return request.WithUserAgent(ctx, req.HeaderParameter("User-Agent")) } - return api.WithUserAgent(api.NewContext(), req.HeaderParameter("User-Agent")) + return request.WithUserAgent(request.NewContext(), req.HeaderParameter("User-Agent")) } allowWatchList := isWatcher && isLister // watching on lists is allowed only for kinds that support both watch and list. diff --git a/pkg/genericapiserver/api/request/BUILD b/pkg/genericapiserver/api/request/BUILD index 46b96eae8e..e06b787341 100644 --- a/pkg/genericapiserver/api/request/BUILD +++ b/pkg/genericapiserver/api/request/BUILD @@ -11,13 +11,18 @@ load( go_library( name = "go_default_library", srcs = [ + "context.go", "doc.go", + "requestcontext.go", "requestinfo.go", ], tags = ["automanaged"], deps = [ - "//pkg/api:go_default_library", + "//pkg/auth/user:go_default_library", + "//pkg/types:go_default_library", "//pkg/util/sets:go_default_library", + "//vendor:github.com/golang/glog", + "//vendor:golang.org/x/net/context", ], ) @@ -26,9 +31,17 @@ go_test( srcs = ["requestinfo_test.go"], library = ":go_default_library", tags = ["automanaged"], + deps = ["//pkg/util/sets:go_default_library"], +) + +go_test( + name = "go_default_xtest", + srcs = ["context_test.go"], + tags = ["automanaged"], deps = [ "//pkg/api:go_default_library", - "//pkg/api/testapi:go_default_library", - "//pkg/util/sets:go_default_library", + "//pkg/auth/user:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", + "//pkg/types:go_default_library", ], ) diff --git a/pkg/api/context.go b/pkg/genericapiserver/api/request/context.go similarity index 90% rename from pkg/api/context.go rename to pkg/genericapiserver/api/request/context.go index 0f735f4686..e3eae5fc5d 100644 --- a/pkg/api/context.go +++ b/pkg/genericapiserver/api/request/context.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package api +package request import ( stderrs "errors" @@ -62,6 +62,8 @@ const ( // userAgentKey is the context key for the request user agent. userAgentKey + + namespaceDefault = "default" // TODO(sttts): solve import cycle when using api.NamespaceDefault ) // NewContext instantiates a base context object for request flows. @@ -71,7 +73,7 @@ func NewContext() Context { // NewDefaultContext instantiates a base context object for request flows in the default namespace func NewDefaultContext() Context { - return WithNamespace(NewContext(), NamespaceDefault) + return WithNamespace(NewContext(), namespaceDefault) } // WithValue returns a copy of parent in which the value associated with key is val. @@ -100,20 +102,11 @@ func NamespaceValue(ctx Context) string { return namespace } -// ValidNamespace returns false if the namespace on the context differs from the resource. If the resource has no namespace, it is set to the value in the context. -func ValidNamespace(ctx Context, resource *ObjectMeta) bool { - ns, ok := NamespaceFrom(ctx) - if len(resource.Namespace) == 0 { - resource.Namespace = ns - } - return ns == resource.Namespace && ok -} - // WithNamespaceDefaultIfNone returns a context whose namespace is the default if and only if the parent context has no namespace value func WithNamespaceDefaultIfNone(parent Context) Context { namespace, ok := NamespaceFrom(parent) if !ok || len(namespace) == 0 { - return WithNamespace(parent, NamespaceDefault) + return WithNamespace(parent, namespaceDefault) } return parent } diff --git a/pkg/api/context_test.go b/pkg/genericapiserver/api/request/context_test.go similarity index 80% rename from pkg/api/context_test.go rename to pkg/genericapiserver/api/request/context_test.go index 9a40ccebee..4b1f398fc0 100644 --- a/pkg/api/context_test.go +++ b/pkg/genericapiserver/api/request/context_test.go @@ -14,20 +14,21 @@ See the License for the specific language governing permissions and limitations under the License. */ -package api_test +package request_test import ( "testing" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/auth/user" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/types" ) // TestNamespaceContext validates that a namespace can be get/set on a context object func TestNamespaceContext(t *testing.T) { - ctx := api.NewDefaultContext() - result, ok := api.NamespaceFrom(ctx) + ctx := genericapirequest.NewDefaultContext() + result, ok := genericapirequest.NamespaceFrom(ctx) if !ok { t.Fatalf("Error getting namespace") } @@ -35,8 +36,8 @@ func TestNamespaceContext(t *testing.T) { t.Fatalf("Expected: %s, Actual: %s", api.NamespaceDefault, result) } - ctx = api.NewContext() - result, ok = api.NamespaceFrom(ctx) + ctx = genericapirequest.NewContext() + result, ok = genericapirequest.NamespaceFrom(ctx) if ok { t.Fatalf("Should not be ok because there is no namespace on the context") } @@ -44,8 +45,8 @@ func TestNamespaceContext(t *testing.T) { // TestValidNamespace validates that namespace rules are enforced on a resource prior to create or update func TestValidNamespace(t *testing.T) { - ctx := api.NewDefaultContext() - namespace, _ := api.NamespaceFrom(ctx) + ctx := genericapirequest.NewDefaultContext() + namespace, _ := genericapirequest.NamespaceFrom(ctx) resource := api.ReplicationController{} if !api.ValidNamespace(ctx, &resource.ObjectMeta) { t.Fatalf("expected success") @@ -57,13 +58,13 @@ func TestValidNamespace(t *testing.T) { if api.ValidNamespace(ctx, &resource.ObjectMeta) { t.Fatalf("Expected error that resource and context errors do not match because resource has different namespace") } - ctx = api.NewContext() + ctx = genericapirequest.NewContext() if api.ValidNamespace(ctx, &resource.ObjectMeta) { t.Fatalf("Expected error that resource and context errors do not match since context has no namespace") } - ctx = api.NewContext() - ns := api.NamespaceValue(ctx) + ctx = genericapirequest.NewContext() + ns := genericapirequest.NamespaceValue(ctx) if ns != "" { t.Fatalf("Expected the empty string") } @@ -71,12 +72,12 @@ func TestValidNamespace(t *testing.T) { //TestUserContext validates that a userinfo can be get/set on a context object func TestUserContext(t *testing.T) { - ctx := api.NewContext() - _, ok := api.UserFrom(ctx) + ctx := genericapirequest.NewContext() + _, ok := genericapirequest.UserFrom(ctx) if ok { t.Fatalf("Should not be ok because there is no user.Info on the context") } - ctx = api.WithUser( + ctx = genericapirequest.WithUser( ctx, &user.DefaultInfo{ Name: "bob", @@ -86,7 +87,7 @@ func TestUserContext(t *testing.T) { }, ) - result, ok := api.UserFrom(ctx) + result, ok := genericapirequest.UserFrom(ctx) if !ok { t.Fatalf("Error getting user info") } @@ -122,16 +123,16 @@ func TestUserContext(t *testing.T) { //TestUIDContext validates that a UID can be get/set on a context object func TestUIDContext(t *testing.T) { - ctx := api.NewContext() - _, ok := api.UIDFrom(ctx) + ctx := genericapirequest.NewContext() + _, ok := genericapirequest.UIDFrom(ctx) if ok { t.Fatalf("Should not be ok because there is no UID on the context") } - ctx = api.WithUID( + ctx = genericapirequest.WithUID( ctx, types.UID("testUID"), ) - _, ok = api.UIDFrom(ctx) + _, ok = genericapirequest.UIDFrom(ctx) if !ok { t.Fatalf("Error getting UID") } @@ -139,17 +140,17 @@ func TestUIDContext(t *testing.T) { //TestUserAgentContext validates that a useragent can be get/set on a context object func TestUserAgentContext(t *testing.T) { - ctx := api.NewContext() - _, ok := api.UserAgentFrom(ctx) + ctx := genericapirequest.NewContext() + _, ok := genericapirequest.UserAgentFrom(ctx) if ok { t.Fatalf("Should not be ok because there is no UserAgent on the context") } - ctx = api.WithUserAgent( + ctx = genericapirequest.WithUserAgent( ctx, "TestUserAgent", ) - result, ok := api.UserAgentFrom(ctx) + result, ok := genericapirequest.UserAgentFrom(ctx) if !ok { t.Fatalf("Error getting UserAgent") } diff --git a/pkg/api/requestcontext.go b/pkg/genericapiserver/api/request/requestcontext.go similarity index 99% rename from pkg/api/requestcontext.go rename to pkg/genericapiserver/api/request/requestcontext.go index 724fea811d..32fa9215fe 100644 --- a/pkg/api/requestcontext.go +++ b/pkg/genericapiserver/api/request/requestcontext.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package api +package request import ( "errors" diff --git a/pkg/genericapiserver/api/request/requestinfo.go b/pkg/genericapiserver/api/request/requestinfo.go index b36dec38ff..be75c14f43 100644 --- a/pkg/genericapiserver/api/request/requestinfo.go +++ b/pkg/genericapiserver/api/request/requestinfo.go @@ -21,7 +21,6 @@ import ( "net/http" "strings" - "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/util/sets" ) @@ -177,7 +176,7 @@ func (r *RequestInfoFactory) NewRequestInfo(req *http.Request) (*RequestInfo, er } } } else { - requestInfo.Namespace = api.NamespaceNone + requestInfo.Namespace = "" // TODO(sttts): solve import cycle when using api.NamespaceNone } // parsing successful, so we now know the proper value for .Parts @@ -222,12 +221,12 @@ type requestInfoKeyType int const requestInfoKey requestInfoKeyType = iota // WithRequestInfo returns a copy of parent in which the request info value is set -func WithRequestInfo(parent api.Context, info *RequestInfo) api.Context { - return api.WithValue(parent, requestInfoKey, info) +func WithRequestInfo(parent Context, info *RequestInfo) Context { + return WithValue(parent, requestInfoKey, info) } // RequestInfoFrom returns the value of the RequestInfo key on the ctx -func RequestInfoFrom(ctx api.Context) (*RequestInfo, bool) { +func RequestInfoFrom(ctx Context) (*RequestInfo, bool) { info, ok := ctx.Value(requestInfoKey).(*RequestInfo) return info, ok } diff --git a/pkg/genericapiserver/api/request/requestinfo_test.go b/pkg/genericapiserver/api/request/requestinfo_test.go index 79415b14a1..80a254adea 100644 --- a/pkg/genericapiserver/api/request/requestinfo_test.go +++ b/pkg/genericapiserver/api/request/requestinfo_test.go @@ -21,8 +21,6 @@ import ( "reflect" "testing" - "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/util/sets" ) @@ -32,15 +30,8 @@ func (fakeRL) Stop() {} func (f fakeRL) TryAccept() bool { return bool(f) } func (f fakeRL) Accept() {} -func getPath(resource, namespace, name string) string { - return testapi.Default.ResourcePath(resource, namespace, name) -} - -func pathWithPrefix(prefix, resource, namespace, name string) string { - return testapi.Default.ResourcePathWithPrefix(prefix, resource, namespace, name) -} - func TestGetAPIRequestInfo(t *testing.T) { + namespaceAll := "" // TODO(sttts): solve import cycle when using api.NamespaceAll successCases := []struct { method string url string @@ -62,8 +53,8 @@ func TestGetAPIRequestInfo(t *testing.T) { {"GET", "/api/v1/namespaces/other/pods", "list", "api", "", "v1", "other", "pods", "", "", []string{"pods"}}, {"GET", "/api/v1/namespaces/other/pods/foo", "get", "api", "", "v1", "other", "pods", "", "foo", []string{"pods", "foo"}}, {"HEAD", "/api/v1/namespaces/other/pods/foo", "get", "api", "", "v1", "other", "pods", "", "foo", []string{"pods", "foo"}}, - {"GET", "/api/v1/pods", "list", "api", "", "v1", api.NamespaceAll, "pods", "", "", []string{"pods"}}, - {"HEAD", "/api/v1/pods", "list", "api", "", "v1", api.NamespaceAll, "pods", "", "", []string{"pods"}}, + {"GET", "/api/v1/pods", "list", "api", "", "v1", namespaceAll, "pods", "", "", []string{"pods"}}, + {"HEAD", "/api/v1/pods", "list", "api", "", "v1", namespaceAll, "pods", "", "", []string{"pods"}}, {"GET", "/api/v1/namespaces/other/pods/foo", "get", "api", "", "v1", "other", "pods", "", "foo", []string{"pods", "foo"}}, {"GET", "/api/v1/namespaces/other/pods", "list", "api", "", "v1", "other", "pods", "", "", []string{"pods"}}, @@ -72,9 +63,9 @@ func TestGetAPIRequestInfo(t *testing.T) { {"GET", "/api/v1/proxy/namespaces/other/pods/foo/subpath/not/a/subresource", "proxy", "api", "", "v1", "other", "pods", "", "foo", []string{"pods", "foo", "subpath", "not", "a", "subresource"}}, {"GET", "/api/v1/redirect/namespaces/other/pods/foo", "redirect", "api", "", "v1", "other", "pods", "", "foo", []string{"pods", "foo"}}, {"GET", "/api/v1/redirect/namespaces/other/pods/foo/subpath/not/a/subresource", "redirect", "api", "", "v1", "other", "pods", "", "foo", []string{"pods", "foo", "subpath", "not", "a", "subresource"}}, - {"GET", "/api/v1/watch/pods", "watch", "api", "", "v1", api.NamespaceAll, "pods", "", "", []string{"pods"}}, - {"GET", "/api/v1/pods?watch=true", "watch", "api", "", "v1", api.NamespaceAll, "pods", "", "", []string{"pods"}}, - {"GET", "/api/v1/pods?watch=false", "list", "api", "", "v1", api.NamespaceAll, "pods", "", "", []string{"pods"}}, + {"GET", "/api/v1/watch/pods", "watch", "api", "", "v1", namespaceAll, "pods", "", "", []string{"pods"}}, + {"GET", "/api/v1/pods?watch=true", "watch", "api", "", "v1", namespaceAll, "pods", "", "", []string{"pods"}}, + {"GET", "/api/v1/pods?watch=false", "list", "api", "", "v1", namespaceAll, "pods", "", "", []string{"pods"}}, {"GET", "/api/v1/watch/namespaces/other/pods", "watch", "api", "", "v1", "other", "pods", "", "", []string{"pods"}}, {"GET", "/api/v1/namespaces/other/pods?watch=1", "watch", "api", "", "v1", "other", "pods", "", "", []string{"pods"}}, {"GET", "/api/v1/namespaces/other/pods?watch=0", "list", "api", "", "v1", "other", "pods", "", "", []string{"pods"}}, diff --git a/pkg/genericapiserver/config.go b/pkg/genericapiserver/config.go index c435bbe675..e658817398 100644 --- a/pkg/genericapiserver/config.go +++ b/pkg/genericapiserver/config.go @@ -126,7 +126,7 @@ type Config struct { LegacyAPIGroupPrefixes sets.String // RequestContextMapper maps requests to contexts. Exported so downstream consumers can provider their own mappers // TODO confirm that anyone downstream actually uses this and doesn't just need an accessor - RequestContextMapper api.RequestContextMapper + RequestContextMapper apirequest.RequestContextMapper // Serializer is required and provides the interface for serializing and converting objects to and from the wire // The default (api.Codecs) usually works fine. Serializer runtime.NegotiatedSerializer @@ -195,7 +195,7 @@ func NewConfig() *Config { config := &Config{ Serializer: api.Codecs, ReadWritePort: 6443, - RequestContextMapper: api.NewRequestContextMapper(), + RequestContextMapper: apirequest.NewRequestContextMapper(), BuildHandlerChainsFunc: DefaultBuildHandlerChain, LegacyAPIGroupPrefixes: sets.NewString(DefaultLegacyAPIPrefix), HealthzChecks: []healthz.HealthzChecker{healthz.PingHealthz}, @@ -563,7 +563,7 @@ func DefaultBuildHandlerChain(apiHandler http.Handler, c *Config) (secure, insec handler = genericfilters.WithTimeoutForNonLongRunningRequests(handler, c.RequestContextMapper, c.LongRunningFunc) handler = genericfilters.WithMaxInFlightLimit(handler, c.MaxRequestsInFlight, c.MaxMutatingRequestsInFlight, c.RequestContextMapper, c.LongRunningFunc) handler = genericapifilters.WithRequestInfo(handler, NewRequestInfoResolver(c), c.RequestContextMapper) - handler = api.WithRequestContext(handler, c.RequestContextMapper) + handler = apirequest.WithRequestContext(handler, c.RequestContextMapper) return handler } audit := func(handler http.Handler) http.Handler { diff --git a/pkg/genericapiserver/filters/BUILD b/pkg/genericapiserver/filters/BUILD index eaa776e1d2..df10c460aa 100644 --- a/pkg/genericapiserver/filters/BUILD +++ b/pkg/genericapiserver/filters/BUILD @@ -41,7 +41,6 @@ go_test( library = ":go_default_library", tags = ["automanaged"], deps = [ - "//pkg/api:go_default_library", "//pkg/api/errors:go_default_library", "//pkg/genericapiserver/api/filters:go_default_library", "//pkg/genericapiserver/api/request:go_default_library", diff --git a/pkg/genericapiserver/filters/maxinflight.go b/pkg/genericapiserver/filters/maxinflight.go index 1d4336c40a..323b174fb0 100644 --- a/pkg/genericapiserver/filters/maxinflight.go +++ b/pkg/genericapiserver/filters/maxinflight.go @@ -20,9 +20,9 @@ import ( "fmt" "net/http" - "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/errors" apirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/httplog" "k8s.io/kubernetes/pkg/util/sets" @@ -46,7 +46,7 @@ func WithMaxInFlightLimit( handler http.Handler, nonMutatingLimit int, mutatingLimit int, - requestContextMapper api.RequestContextMapper, + requestContextMapper genericapirequest.RequestContextMapper, longRunningRequestCheck LongRunningRequestCheck, ) http.Handler { if nonMutatingLimit == 0 && mutatingLimit == 0 { diff --git a/pkg/genericapiserver/filters/maxinflight_test.go b/pkg/genericapiserver/filters/maxinflight_test.go index f35b19fb24..7bee0591f7 100644 --- a/pkg/genericapiserver/filters/maxinflight_test.go +++ b/pkg/genericapiserver/filters/maxinflight_test.go @@ -24,7 +24,6 @@ import ( "sync" "testing" - "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/errors" apifilters "k8s.io/kubernetes/pkg/genericapiserver/api/filters" apirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" @@ -35,7 +34,7 @@ func createMaxInflightServer(callsWg, blockWg *sync.WaitGroup, disableCallsWg *b longRunningRequestCheck := BasicLongRunningRequestCheck(sets.NewString("watch"), sets.NewString("proxy")) - requestContextMapper := api.NewRequestContextMapper() + requestContextMapper := apirequest.NewRequestContextMapper() requestInfoFactory := &apirequest.RequestInfoFactory{APIPrefixes: sets.NewString("apis", "api"), GrouplessAPIPrefixes: sets.NewString("api")} handler := WithMaxInFlightLimit( http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { @@ -57,7 +56,7 @@ func createMaxInflightServer(callsWg, blockWg *sync.WaitGroup, disableCallsWg *b longRunningRequestCheck, ) handler = apifilters.WithRequestInfo(handler, requestInfoFactory, requestContextMapper) - handler = api.WithRequestContext(handler, requestContextMapper) + handler = apirequest.WithRequestContext(handler, requestContextMapper) return httptest.NewServer(handler) } diff --git a/pkg/genericapiserver/filters/panics.go b/pkg/genericapiserver/filters/panics.go index f6ff4f5600..1a19492625 100644 --- a/pkg/genericapiserver/filters/panics.go +++ b/pkg/genericapiserver/filters/panics.go @@ -22,7 +22,6 @@ import ( "github.com/golang/glog" - "k8s.io/kubernetes/pkg/api" apierrors "k8s.io/kubernetes/pkg/api/errors" apirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/httplog" @@ -30,7 +29,7 @@ import ( ) // WithPanicRecovery wraps an http Handler to recover and log panics. -func WithPanicRecovery(handler http.Handler, requestContextMapper api.RequestContextMapper) http.Handler { +func WithPanicRecovery(handler http.Handler, requestContextMapper apirequest.RequestContextMapper) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { defer runtime.HandleCrash(func(err interface{}) { http.Error(w, "This request caused apisever to panic. Look in log for details.", http.StatusInternalServerError) diff --git a/pkg/genericapiserver/filters/timeout.go b/pkg/genericapiserver/filters/timeout.go index 7b8a204af0..bf79974ff7 100644 --- a/pkg/genericapiserver/filters/timeout.go +++ b/pkg/genericapiserver/filters/timeout.go @@ -35,7 +35,7 @@ const globalTimeout = time.Minute var errConnKilled = fmt.Errorf("kill connection/stream") // WithTimeoutForNonLongRunningRequests times out non-long-running requests after the time given by globalTimeout. -func WithTimeoutForNonLongRunningRequests(handler http.Handler, requestContextMapper api.RequestContextMapper, longRunning LongRunningRequestCheck) http.Handler { +func WithTimeoutForNonLongRunningRequests(handler http.Handler, requestContextMapper apirequest.RequestContextMapper, longRunning LongRunningRequestCheck) http.Handler { if longRunning == nil { return handler } diff --git a/pkg/genericapiserver/genericapiserver.go b/pkg/genericapiserver/genericapiserver.go index 9d011891fa..51e7e880bb 100644 --- a/pkg/genericapiserver/genericapiserver.go +++ b/pkg/genericapiserver/genericapiserver.go @@ -38,6 +38,7 @@ import ( metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" "k8s.io/kubernetes/pkg/client/restclient" genericapi "k8s.io/kubernetes/pkg/genericapiserver/api" + apirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" genericmux "k8s.io/kubernetes/pkg/genericapiserver/mux" openapicommon "k8s.io/kubernetes/pkg/genericapiserver/openapi/common" "k8s.io/kubernetes/pkg/genericapiserver/routes" @@ -95,7 +96,7 @@ type GenericAPIServer struct { admissionControl admission.Interface // requestContextMapper provides a way to get the context for a request. It may be nil. - requestContextMapper api.RequestContextMapper + requestContextMapper apirequest.RequestContextMapper // The registered APIs HandlerContainer *genericmux.APIContainer @@ -152,7 +153,7 @@ func init() { // RequestContextMapper is exposed so that third party resource storage can be build in a different location. // TODO refactor third party resource storage -func (s *GenericAPIServer) RequestContextMapper() api.RequestContextMapper { +func (s *GenericAPIServer) RequestContextMapper() apirequest.RequestContextMapper { return s.requestContextMapper } diff --git a/pkg/genericapiserver/genericapiserver_test.go b/pkg/genericapiserver/genericapiserver_test.go index cf67fbc17f..90c7a4c2c2 100644 --- a/pkg/genericapiserver/genericapiserver_test.go +++ b/pkg/genericapiserver/genericapiserver_test.go @@ -38,6 +38,7 @@ import ( "k8s.io/kubernetes/pkg/auth/authorizer" "k8s.io/kubernetes/pkg/auth/user" openapigen "k8s.io/kubernetes/pkg/generated/openapi" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/runtime/schema" etcdtesting "k8s.io/kubernetes/pkg/storage/etcd/testing" @@ -55,7 +56,7 @@ func setUp(t *testing.T) (*etcdtesting.EtcdTestServer, Config, *assert.Assertion config := NewConfig() config.PublicAddress = net.ParseIP("192.168.10.4") - config.RequestContextMapper = api.NewRequestContextMapper() + config.RequestContextMapper = genericapirequest.NewRequestContextMapper() config.LegacyAPIGroupPrefixes = sets.NewString("/api") config.OpenAPIConfig = DefaultOpenAPIConfig(openapigen.OpenAPIDefinitions) @@ -601,7 +602,7 @@ func (p *testGetterStorage) New() runtime.Object { } } -func (p *testGetterStorage) Get(ctx api.Context, name string, options *metav1.GetOptions) (runtime.Object, error) { +func (p *testGetterStorage) Get(ctx genericapirequest.Context, name string, options *metav1.GetOptions) (runtime.Object, error) { return nil, nil } diff --git a/pkg/kubelet/client/BUILD b/pkg/kubelet/client/BUILD index 6d7dcfb96b..5ad511fd35 100644 --- a/pkg/kubelet/client/BUILD +++ b/pkg/kubelet/client/BUILD @@ -13,7 +13,6 @@ go_library( srcs = ["kubelet_client.go"], tags = ["automanaged"], deps = [ - "//pkg/api:go_default_library", "//pkg/api/v1:go_default_library", "//pkg/apis/meta/v1:go_default_library", "//pkg/client/restclient:go_default_library", diff --git a/pkg/kubelet/client/kubelet_client.go b/pkg/kubelet/client/kubelet_client.go index a1265caf3b..d67d0069d5 100644 --- a/pkg/kubelet/client/kubelet_client.go +++ b/pkg/kubelet/client/kubelet_client.go @@ -21,7 +21,6 @@ import ( "strconv" "time" - "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" "k8s.io/kubernetes/pkg/client/restclient" @@ -62,7 +61,7 @@ type ConnectionInfo struct { // ConnectionInfoGetter provides ConnectionInfo for the kubelet running on a named node type ConnectionInfoGetter interface { - GetConnectionInfo(ctx api.Context, nodeName types.NodeName) (*ConnectionInfo, error) + GetConnectionInfo(nodeName types.NodeName) (*ConnectionInfo, error) } func MakeTransport(config *KubeletClientConfig) (http.RoundTripper, error) { @@ -153,7 +152,7 @@ func NewNodeConnectionInfoGetter(nodes NodeGetter, config KubeletClientConfig) ( }, nil } -func (k *NodeConnectionInfoGetter) GetConnectionInfo(ctx api.Context, nodeName types.NodeName) (*ConnectionInfo, error) { +func (k *NodeConnectionInfoGetter) GetConnectionInfo(nodeName types.NodeName) (*ConnectionInfo, error) { node, err := k.nodes.Get(string(nodeName), metav1.GetOptions{}) if err != nil { return nil, err diff --git a/pkg/master/BUILD b/pkg/master/BUILD index 31345b4b4a..eecbffe337 100644 --- a/pkg/master/BUILD +++ b/pkg/master/BUILD @@ -117,6 +117,7 @@ go_test( "//pkg/client/testing/core:go_default_library", "//pkg/generated/openapi:go_default_library", "//pkg/genericapiserver:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/kubelet/client:go_default_library", "//pkg/runtime:go_default_library", "//pkg/runtime/schema:go_default_library", diff --git a/pkg/master/master_test.go b/pkg/master/master_test.go index f4610b7dd1..64680f54fd 100644 --- a/pkg/master/master_test.go +++ b/pkg/master/master_test.go @@ -46,6 +46,7 @@ import ( "k8s.io/kubernetes/pkg/client/restclient" openapigen "k8s.io/kubernetes/pkg/generated/openapi" "k8s.io/kubernetes/pkg/genericapiserver" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" kubeletclient "k8s.io/kubernetes/pkg/kubelet/client" "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/runtime/schema" @@ -88,7 +89,7 @@ func setUp(t *testing.T) (*Master, *etcdtesting.EtcdTestServer, Config, *assert. config.GenericConfig.LoopbackClientConfig = &restclient.Config{APIPath: "/api", ContentConfig: restclient.ContentConfig{NegotiatedSerializer: api.Codecs}} config.GenericConfig.PublicAddress = net.ParseIP("192.168.10.4") config.GenericConfig.LegacyAPIGroupPrefixes = sets.NewString("/api") - config.GenericConfig.RequestContextMapper = api.NewRequestContextMapper() + config.GenericConfig.RequestContextMapper = genericapirequest.NewRequestContextMapper() config.GenericConfig.LoopbackClientConfig = &restclient.Config{APIPath: "/api", ContentConfig: restclient.ContentConfig{NegotiatedSerializer: api.Codecs}} config.GenericConfig.EnableMetrics = true config.EnableCoreControllers = false diff --git a/pkg/master/thirdparty/BUILD b/pkg/master/thirdparty/BUILD index 9d9d55d50f..86df29cd9f 100644 --- a/pkg/master/thirdparty/BUILD +++ b/pkg/master/thirdparty/BUILD @@ -21,6 +21,7 @@ go_library( "//pkg/genericapiserver:go_default_library", "//pkg/genericapiserver/api:go_default_library", "//pkg/genericapiserver/api/handlers:go_default_library", + "//pkg/genericapiserver/api/request: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 c6c983a91e..eea7aeec55 100644 --- a/pkg/master/thirdparty/thirdparty.go +++ b/pkg/master/thirdparty/thirdparty.go @@ -32,6 +32,7 @@ import ( "k8s.io/kubernetes/pkg/genericapiserver" genericapi "k8s.io/kubernetes/pkg/genericapiserver/api" genericapihandlers "k8s.io/kubernetes/pkg/genericapiserver/api/handlers" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" extensionsrest "k8s.io/kubernetes/pkg/registry/extensions/rest" "k8s.io/kubernetes/pkg/registry/extensions/thirdpartyresourcedata" thirdpartyresourcedataetcd "k8s.io/kubernetes/pkg/registry/extensions/thirdpartyresourcedata/etcd" @@ -163,7 +164,7 @@ func (m *ThirdPartyResourceServer) RemoveThirdPartyResource(path string) error { } func (m *ThirdPartyResourceServer) removeAllThirdPartyResources(registry *thirdpartyresourcedataetcd.REST) error { - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() existingData, err := registry.List(ctx, nil) if err != nil { return err diff --git a/pkg/registry/apps/petset/BUILD b/pkg/registry/apps/petset/BUILD index 9feb6fafc8..23935ece59 100644 --- a/pkg/registry/apps/petset/BUILD +++ b/pkg/registry/apps/petset/BUILD @@ -20,6 +20,7 @@ go_library( "//pkg/apis/apps:go_default_library", "//pkg/apis/apps/validation:go_default_library", "//pkg/fields:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/labels:go_default_library", "//pkg/registry/generic:go_default_library", "//pkg/runtime:go_default_library", @@ -37,5 +38,6 @@ go_test( "//pkg/api:go_default_library", "//pkg/apis/apps:go_default_library", "//pkg/apis/meta/v1:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", ], ) diff --git a/pkg/registry/apps/petset/etcd/BUILD b/pkg/registry/apps/petset/etcd/BUILD index 9737bc0ad1..7e10bb01d4 100644 --- a/pkg/registry/apps/petset/etcd/BUILD +++ b/pkg/registry/apps/petset/etcd/BUILD @@ -13,10 +13,10 @@ go_library( srcs = ["etcd.go"], tags = ["automanaged"], deps = [ - "//pkg/api:go_default_library", "//pkg/api/rest:go_default_library", "//pkg/apis/apps:go_default_library", "//pkg/apis/meta/v1:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/registry/apps/petset:go_default_library", "//pkg/registry/generic:go_default_library", "//pkg/registry/generic/registry:go_default_library", @@ -35,6 +35,7 @@ go_test( "//pkg/apis/apps:go_default_library", "//pkg/apis/meta/v1:go_default_library", "//pkg/fields:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/labels:go_default_library", "//pkg/registry/generic:go_default_library", "//pkg/registry/registrytest:go_default_library", diff --git a/pkg/registry/apps/petset/etcd/etcd.go b/pkg/registry/apps/petset/etcd/etcd.go index dcaab06b35..281f9e534e 100644 --- a/pkg/registry/apps/petset/etcd/etcd.go +++ b/pkg/registry/apps/petset/etcd/etcd.go @@ -17,10 +17,10 @@ limitations under the License. package etcd import ( - "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/rest" appsapi "k8s.io/kubernetes/pkg/apis/apps" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/registry/apps/petset" "k8s.io/kubernetes/pkg/registry/generic" genericregistry "k8s.io/kubernetes/pkg/registry/generic/registry" @@ -67,11 +67,11 @@ func (r *StatusREST) New() runtime.Object { } // Get retrieves the object from the storage. It is required to support Patch. -func (r *StatusREST) Get(ctx api.Context, name string, options *metav1.GetOptions) (runtime.Object, error) { +func (r *StatusREST) Get(ctx genericapirequest.Context, name string, options *metav1.GetOptions) (runtime.Object, error) { return r.store.Get(ctx, name, options) } // Update alters the status subset of an object. -func (r *StatusREST) Update(ctx api.Context, name string, objInfo rest.UpdatedObjectInfo) (runtime.Object, bool, error) { +func (r *StatusREST) Update(ctx genericapirequest.Context, name string, objInfo rest.UpdatedObjectInfo) (runtime.Object, bool, error) { return r.store.Update(ctx, name, objInfo) } diff --git a/pkg/registry/apps/petset/etcd/etcd_test.go b/pkg/registry/apps/petset/etcd/etcd_test.go index 5857663181..6fa958febf 100644 --- a/pkg/registry/apps/petset/etcd/etcd_test.go +++ b/pkg/registry/apps/petset/etcd/etcd_test.go @@ -24,6 +24,7 @@ import ( "k8s.io/kubernetes/pkg/apis/apps" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" "k8s.io/kubernetes/pkg/fields" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/registry/generic" "k8s.io/kubernetes/pkg/registry/registrytest" @@ -39,7 +40,7 @@ func newStorage(t *testing.T) (*REST, *StatusREST, *etcdtesting.EtcdTestServer) // createStatefulSet is a helper function that returns a StatefulSet with the updated resource version. func createStatefulSet(storage *REST, ps apps.StatefulSet, t *testing.T) (apps.StatefulSet, error) { - ctx := api.WithNamespace(api.NewContext(), ps.Namespace) + ctx := genericapirequest.WithNamespace(genericapirequest.NewContext(), ps.Namespace) obj, err := storage.Create(ctx, &ps) if err != nil { t.Errorf("Failed to create StatefulSet, %v", err) @@ -99,7 +100,7 @@ func TestStatusUpdate(t *testing.T) { storage, statusStorage, server := newStorage(t) defer server.Terminate(t) defer storage.Store.DestroyFunc() - ctx := api.WithNamespace(api.NewContext(), api.NamespaceDefault) + ctx := genericapirequest.WithNamespace(genericapirequest.NewContext(), api.NamespaceDefault) key := "/statefulsets/" + api.NamespaceDefault + "/foo" validStatefulSet := validNewStatefulSet() if err := storage.Storage.Create(ctx, key, validStatefulSet, nil, 0); err != nil { diff --git a/pkg/registry/apps/petset/strategy.go b/pkg/registry/apps/petset/strategy.go index 2d395d8415..7ca931e4e9 100644 --- a/pkg/registry/apps/petset/strategy.go +++ b/pkg/registry/apps/petset/strategy.go @@ -24,6 +24,7 @@ import ( "k8s.io/kubernetes/pkg/apis/apps" "k8s.io/kubernetes/pkg/apis/apps/validation" "k8s.io/kubernetes/pkg/fields" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/registry/generic" "k8s.io/kubernetes/pkg/runtime" @@ -46,7 +47,7 @@ func (statefulSetStrategy) NamespaceScoped() bool { } // PrepareForCreate clears the status of an StatefulSet before creation. -func (statefulSetStrategy) PrepareForCreate(ctx api.Context, obj runtime.Object) { +func (statefulSetStrategy) PrepareForCreate(ctx genericapirequest.Context, obj runtime.Object) { statefulSet := obj.(*apps.StatefulSet) // create cannot set status statefulSet.Status = apps.StatefulSetStatus{} @@ -55,7 +56,7 @@ func (statefulSetStrategy) PrepareForCreate(ctx api.Context, obj runtime.Object) } // PrepareForUpdate clears fields that are not allowed to be set by end users on update. -func (statefulSetStrategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { +func (statefulSetStrategy) PrepareForUpdate(ctx genericapirequest.Context, obj, old runtime.Object) { newStatefulSet := obj.(*apps.StatefulSet) oldStatefulSet := old.(*apps.StatefulSet) // Update is not allowed to set status @@ -71,7 +72,7 @@ func (statefulSetStrategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Ob } // Validate validates a new StatefulSet. -func (statefulSetStrategy) Validate(ctx api.Context, obj runtime.Object) field.ErrorList { +func (statefulSetStrategy) Validate(ctx genericapirequest.Context, obj runtime.Object) field.ErrorList { statefulSet := obj.(*apps.StatefulSet) return validation.ValidateStatefulSet(statefulSet) } @@ -86,7 +87,7 @@ func (statefulSetStrategy) AllowCreateOnUpdate() bool { } // ValidateUpdate is the default update validation for an end user. -func (statefulSetStrategy) ValidateUpdate(ctx api.Context, obj, old runtime.Object) field.ErrorList { +func (statefulSetStrategy) ValidateUpdate(ctx genericapirequest.Context, obj, old runtime.Object) field.ErrorList { validationErrorList := validation.ValidateStatefulSet(obj.(*apps.StatefulSet)) updateErrorList := validation.ValidateStatefulSetUpdate(obj.(*apps.StatefulSet), old.(*apps.StatefulSet)) return append(validationErrorList, updateErrorList...) @@ -128,7 +129,7 @@ type statefulSetStatusStrategy struct { var StatusStrategy = statefulSetStatusStrategy{Strategy} // PrepareForUpdate clears fields that are not allowed to be set by end users on update of status -func (statefulSetStatusStrategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { +func (statefulSetStatusStrategy) PrepareForUpdate(ctx genericapirequest.Context, obj, old runtime.Object) { newStatefulSet := obj.(*apps.StatefulSet) oldStatefulSet := old.(*apps.StatefulSet) // status changes are not allowed to update spec @@ -136,7 +137,7 @@ func (statefulSetStatusStrategy) PrepareForUpdate(ctx api.Context, obj, old runt } // ValidateUpdate is the default update validation for an end user updating status -func (statefulSetStatusStrategy) ValidateUpdate(ctx api.Context, obj, old runtime.Object) field.ErrorList { +func (statefulSetStatusStrategy) ValidateUpdate(ctx genericapirequest.Context, obj, old runtime.Object) field.ErrorList { // TODO: Validate status updates. return validation.ValidateStatefulSetStatusUpdate(obj.(*apps.StatefulSet), old.(*apps.StatefulSet)) } diff --git a/pkg/registry/apps/petset/strategy_test.go b/pkg/registry/apps/petset/strategy_test.go index 6ad401b189..ceaad02463 100644 --- a/pkg/registry/apps/petset/strategy_test.go +++ b/pkg/registry/apps/petset/strategy_test.go @@ -22,10 +22,11 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/apis/apps" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" ) func TestStatefulSetStrategy(t *testing.T) { - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() if !Strategy.NamespaceScoped() { t.Errorf("StatefulSet must be namespace scoped") } @@ -88,7 +89,7 @@ func TestStatefulSetStrategy(t *testing.T) { } func TestStatefulSetStatusStrategy(t *testing.T) { - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() if !StatusStrategy.NamespaceScoped() { t.Errorf("StatefulSet must be namespace scoped") } diff --git a/pkg/registry/authentication/tokenreview/BUILD b/pkg/registry/authentication/tokenreview/BUILD index 9437244400..67f7f5e8e9 100644 --- a/pkg/registry/authentication/tokenreview/BUILD +++ b/pkg/registry/authentication/tokenreview/BUILD @@ -12,10 +12,10 @@ go_library( srcs = ["storage.go"], tags = ["automanaged"], deps = [ - "//pkg/api:go_default_library", "//pkg/api/errors:go_default_library", "//pkg/apis/authentication:go_default_library", "//pkg/auth/authenticator:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/runtime:go_default_library", ], ) diff --git a/pkg/registry/authentication/tokenreview/storage.go b/pkg/registry/authentication/tokenreview/storage.go index 825b5f1e85..da4c3775fa 100644 --- a/pkg/registry/authentication/tokenreview/storage.go +++ b/pkg/registry/authentication/tokenreview/storage.go @@ -20,10 +20,10 @@ import ( "fmt" "net/http" - "k8s.io/kubernetes/pkg/api" apierrors "k8s.io/kubernetes/pkg/api/errors" "k8s.io/kubernetes/pkg/apis/authentication" "k8s.io/kubernetes/pkg/auth/authenticator" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/runtime" ) @@ -39,12 +39,12 @@ func (r *REST) New() runtime.Object { return &authentication.TokenReview{} } -func (r *REST) Create(ctx api.Context, obj runtime.Object) (runtime.Object, error) { +func (r *REST) Create(ctx genericapirequest.Context, obj runtime.Object) (runtime.Object, error) { tokenReview, ok := obj.(*authentication.TokenReview) if !ok { return nil, apierrors.NewBadRequest(fmt.Sprintf("not a TokenReview: %#v", obj)) } - namespace := api.NamespaceValue(ctx) + namespace := genericapirequest.NamespaceValue(ctx) if len(namespace) != 0 { return nil, apierrors.NewBadRequest(fmt.Sprintf("namespace is not allowed on this type: %v", namespace)) } diff --git a/pkg/registry/authorization/localsubjectaccessreview/BUILD b/pkg/registry/authorization/localsubjectaccessreview/BUILD index 16f191be85..de67326e6b 100644 --- a/pkg/registry/authorization/localsubjectaccessreview/BUILD +++ b/pkg/registry/authorization/localsubjectaccessreview/BUILD @@ -12,11 +12,11 @@ go_library( srcs = ["rest.go"], tags = ["automanaged"], deps = [ - "//pkg/api:go_default_library", "//pkg/api/errors:go_default_library", "//pkg/apis/authorization:go_default_library", "//pkg/apis/authorization/validation:go_default_library", "//pkg/auth/authorizer:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/registry/authorization/util:go_default_library", "//pkg/runtime:go_default_library", ], diff --git a/pkg/registry/authorization/localsubjectaccessreview/rest.go b/pkg/registry/authorization/localsubjectaccessreview/rest.go index 0695594299..75aa6e9bee 100644 --- a/pkg/registry/authorization/localsubjectaccessreview/rest.go +++ b/pkg/registry/authorization/localsubjectaccessreview/rest.go @@ -19,11 +19,11 @@ package localsubjectaccessreview import ( "fmt" - kapi "k8s.io/kubernetes/pkg/api" kapierrors "k8s.io/kubernetes/pkg/api/errors" authorizationapi "k8s.io/kubernetes/pkg/apis/authorization" authorizationvalidation "k8s.io/kubernetes/pkg/apis/authorization/validation" "k8s.io/kubernetes/pkg/auth/authorizer" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" authorizationutil "k8s.io/kubernetes/pkg/registry/authorization/util" "k8s.io/kubernetes/pkg/runtime" ) @@ -40,7 +40,7 @@ func (r *REST) New() runtime.Object { return &authorizationapi.LocalSubjectAccessReview{} } -func (r *REST) Create(ctx kapi.Context, obj runtime.Object) (runtime.Object, error) { +func (r *REST) Create(ctx genericapirequest.Context, obj runtime.Object) (runtime.Object, error) { localSubjectAccessReview, ok := obj.(*authorizationapi.LocalSubjectAccessReview) if !ok { return nil, kapierrors.NewBadRequest(fmt.Sprintf("not a LocaLocalSubjectAccessReview: %#v", obj)) @@ -48,7 +48,7 @@ func (r *REST) Create(ctx kapi.Context, obj runtime.Object) (runtime.Object, err if errs := authorizationvalidation.ValidateLocalSubjectAccessReview(localSubjectAccessReview); len(errs) > 0 { return nil, kapierrors.NewInvalid(authorizationapi.Kind(localSubjectAccessReview.Kind), "", errs) } - namespace := kapi.NamespaceValue(ctx) + namespace := genericapirequest.NamespaceValue(ctx) if len(namespace) == 0 { return nil, kapierrors.NewBadRequest(fmt.Sprintf("namespace is required on this type: %v", namespace)) } diff --git a/pkg/registry/authorization/selfsubjectaccessreview/BUILD b/pkg/registry/authorization/selfsubjectaccessreview/BUILD index 16f191be85..de67326e6b 100644 --- a/pkg/registry/authorization/selfsubjectaccessreview/BUILD +++ b/pkg/registry/authorization/selfsubjectaccessreview/BUILD @@ -12,11 +12,11 @@ go_library( srcs = ["rest.go"], tags = ["automanaged"], deps = [ - "//pkg/api:go_default_library", "//pkg/api/errors:go_default_library", "//pkg/apis/authorization:go_default_library", "//pkg/apis/authorization/validation:go_default_library", "//pkg/auth/authorizer:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/registry/authorization/util:go_default_library", "//pkg/runtime:go_default_library", ], diff --git a/pkg/registry/authorization/selfsubjectaccessreview/rest.go b/pkg/registry/authorization/selfsubjectaccessreview/rest.go index bdb9bbbf07..2059938f02 100644 --- a/pkg/registry/authorization/selfsubjectaccessreview/rest.go +++ b/pkg/registry/authorization/selfsubjectaccessreview/rest.go @@ -19,11 +19,11 @@ package selfsubjectaccessreview import ( "fmt" - "k8s.io/kubernetes/pkg/api" apierrors "k8s.io/kubernetes/pkg/api/errors" authorizationapi "k8s.io/kubernetes/pkg/apis/authorization" authorizationvalidation "k8s.io/kubernetes/pkg/apis/authorization/validation" "k8s.io/kubernetes/pkg/auth/authorizer" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" authorizationutil "k8s.io/kubernetes/pkg/registry/authorization/util" "k8s.io/kubernetes/pkg/runtime" ) @@ -40,7 +40,7 @@ func (r *REST) New() runtime.Object { return &authorizationapi.SelfSubjectAccessReview{} } -func (r *REST) Create(ctx api.Context, obj runtime.Object) (runtime.Object, error) { +func (r *REST) Create(ctx genericapirequest.Context, obj runtime.Object) (runtime.Object, error) { selfSAR, ok := obj.(*authorizationapi.SelfSubjectAccessReview) if !ok { return nil, apierrors.NewBadRequest(fmt.Sprintf("not a SelfSubjectAccessReview: %#v", obj)) @@ -48,7 +48,7 @@ func (r *REST) Create(ctx api.Context, obj runtime.Object) (runtime.Object, erro if errs := authorizationvalidation.ValidateSelfSubjectAccessReview(selfSAR); len(errs) > 0 { return nil, apierrors.NewInvalid(authorizationapi.Kind(selfSAR.Kind), "", errs) } - userToCheck, exists := api.UserFrom(ctx) + userToCheck, exists := genericapirequest.UserFrom(ctx) if !exists { return nil, apierrors.NewBadRequest("no user present on request") } diff --git a/pkg/registry/authorization/subjectaccessreview/BUILD b/pkg/registry/authorization/subjectaccessreview/BUILD index 16f191be85..de67326e6b 100644 --- a/pkg/registry/authorization/subjectaccessreview/BUILD +++ b/pkg/registry/authorization/subjectaccessreview/BUILD @@ -12,11 +12,11 @@ go_library( srcs = ["rest.go"], tags = ["automanaged"], deps = [ - "//pkg/api:go_default_library", "//pkg/api/errors:go_default_library", "//pkg/apis/authorization:go_default_library", "//pkg/apis/authorization/validation:go_default_library", "//pkg/auth/authorizer:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/registry/authorization/util:go_default_library", "//pkg/runtime:go_default_library", ], diff --git a/pkg/registry/authorization/subjectaccessreview/rest.go b/pkg/registry/authorization/subjectaccessreview/rest.go index f617853810..11650fc6c5 100644 --- a/pkg/registry/authorization/subjectaccessreview/rest.go +++ b/pkg/registry/authorization/subjectaccessreview/rest.go @@ -19,11 +19,11 @@ package subjectaccessreview import ( "fmt" - kapi "k8s.io/kubernetes/pkg/api" kapierrors "k8s.io/kubernetes/pkg/api/errors" authorizationapi "k8s.io/kubernetes/pkg/apis/authorization" authorizationvalidation "k8s.io/kubernetes/pkg/apis/authorization/validation" "k8s.io/kubernetes/pkg/auth/authorizer" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" authorizationutil "k8s.io/kubernetes/pkg/registry/authorization/util" "k8s.io/kubernetes/pkg/runtime" ) @@ -40,7 +40,7 @@ func (r *REST) New() runtime.Object { return &authorizationapi.SubjectAccessReview{} } -func (r *REST) Create(ctx kapi.Context, obj runtime.Object) (runtime.Object, error) { +func (r *REST) Create(ctx genericapirequest.Context, obj runtime.Object) (runtime.Object, error) { subjectAccessReview, ok := obj.(*authorizationapi.SubjectAccessReview) if !ok { return nil, kapierrors.NewBadRequest(fmt.Sprintf("not a SubjectAccessReview: %#v", obj)) diff --git a/pkg/registry/autoscaling/horizontalpodautoscaler/BUILD b/pkg/registry/autoscaling/horizontalpodautoscaler/BUILD index 7b5dc49146..eeec32e633 100644 --- a/pkg/registry/autoscaling/horizontalpodautoscaler/BUILD +++ b/pkg/registry/autoscaling/horizontalpodautoscaler/BUILD @@ -20,6 +20,7 @@ go_library( "//pkg/apis/autoscaling:go_default_library", "//pkg/apis/autoscaling/validation:go_default_library", "//pkg/fields:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/labels:go_default_library", "//pkg/runtime:go_default_library", "//pkg/storage:go_default_library", diff --git a/pkg/registry/autoscaling/horizontalpodautoscaler/etcd/BUILD b/pkg/registry/autoscaling/horizontalpodautoscaler/etcd/BUILD index ade4e46f1c..0e542fc83d 100644 --- a/pkg/registry/autoscaling/horizontalpodautoscaler/etcd/BUILD +++ b/pkg/registry/autoscaling/horizontalpodautoscaler/etcd/BUILD @@ -13,10 +13,10 @@ go_library( srcs = ["etcd.go"], tags = ["automanaged"], deps = [ - "//pkg/api:go_default_library", "//pkg/api/rest:go_default_library", "//pkg/apis/autoscaling:go_default_library", "//pkg/apis/meta/v1:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/registry/autoscaling/horizontalpodautoscaler:go_default_library", "//pkg/registry/generic:go_default_library", "//pkg/registry/generic/registry:go_default_library", diff --git a/pkg/registry/autoscaling/horizontalpodautoscaler/etcd/etcd.go b/pkg/registry/autoscaling/horizontalpodautoscaler/etcd/etcd.go index de8c0fc3d6..145a902015 100644 --- a/pkg/registry/autoscaling/horizontalpodautoscaler/etcd/etcd.go +++ b/pkg/registry/autoscaling/horizontalpodautoscaler/etcd/etcd.go @@ -17,10 +17,10 @@ limitations under the License. package etcd import ( - "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/rest" "k8s.io/kubernetes/pkg/apis/autoscaling" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/registry/autoscaling/horizontalpodautoscaler" "k8s.io/kubernetes/pkg/registry/generic" genericregistry "k8s.io/kubernetes/pkg/registry/generic/registry" @@ -66,11 +66,11 @@ func (r *StatusREST) New() runtime.Object { } // Get retrieves the object from the storage. It is required to support Patch. -func (r *StatusREST) Get(ctx api.Context, name string, options *metav1.GetOptions) (runtime.Object, error) { +func (r *StatusREST) Get(ctx genericapirequest.Context, name string, options *metav1.GetOptions) (runtime.Object, error) { return r.store.Get(ctx, name, options) } // Update alters the status subset of an object. -func (r *StatusREST) Update(ctx api.Context, name string, objInfo rest.UpdatedObjectInfo) (runtime.Object, bool, error) { +func (r *StatusREST) Update(ctx genericapirequest.Context, name string, objInfo rest.UpdatedObjectInfo) (runtime.Object, bool, error) { return r.store.Update(ctx, name, objInfo) } diff --git a/pkg/registry/autoscaling/horizontalpodautoscaler/strategy.go b/pkg/registry/autoscaling/horizontalpodautoscaler/strategy.go index 10f9d1aa13..c248dc7f78 100644 --- a/pkg/registry/autoscaling/horizontalpodautoscaler/strategy.go +++ b/pkg/registry/autoscaling/horizontalpodautoscaler/strategy.go @@ -23,6 +23,7 @@ import ( "k8s.io/kubernetes/pkg/apis/autoscaling" "k8s.io/kubernetes/pkg/apis/autoscaling/validation" "k8s.io/kubernetes/pkg/fields" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/storage" @@ -45,7 +46,7 @@ func (autoscalerStrategy) NamespaceScoped() bool { } // PrepareForCreate clears fields that are not allowed to be set by end users on creation. -func (autoscalerStrategy) PrepareForCreate(ctx api.Context, obj runtime.Object) { +func (autoscalerStrategy) PrepareForCreate(ctx genericapirequest.Context, obj runtime.Object) { newHPA := obj.(*autoscaling.HorizontalPodAutoscaler) // create cannot set status @@ -53,7 +54,7 @@ func (autoscalerStrategy) PrepareForCreate(ctx api.Context, obj runtime.Object) } // Validate validates a new autoscaler. -func (autoscalerStrategy) Validate(ctx api.Context, obj runtime.Object) field.ErrorList { +func (autoscalerStrategy) Validate(ctx genericapirequest.Context, obj runtime.Object) field.ErrorList { autoscaler := obj.(*autoscaling.HorizontalPodAutoscaler) return validation.ValidateHorizontalPodAutoscaler(autoscaler) } @@ -68,7 +69,7 @@ func (autoscalerStrategy) AllowCreateOnUpdate() bool { } // PrepareForUpdate clears fields that are not allowed to be set by end users on update. -func (autoscalerStrategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { +func (autoscalerStrategy) PrepareForUpdate(ctx genericapirequest.Context, obj, old runtime.Object) { newHPA := obj.(*autoscaling.HorizontalPodAutoscaler) oldHPA := old.(*autoscaling.HorizontalPodAutoscaler) // Update is not allowed to set status @@ -76,7 +77,7 @@ func (autoscalerStrategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Obj } // ValidateUpdate is the default update validation for an end user. -func (autoscalerStrategy) ValidateUpdate(ctx api.Context, obj, old runtime.Object) field.ErrorList { +func (autoscalerStrategy) ValidateUpdate(ctx genericapirequest.Context, obj, old runtime.Object) field.ErrorList { return validation.ValidateHorizontalPodAutoscalerUpdate(obj.(*autoscaling.HorizontalPodAutoscaler), old.(*autoscaling.HorizontalPodAutoscaler)) } @@ -111,13 +112,13 @@ type autoscalerStatusStrategy struct { var StatusStrategy = autoscalerStatusStrategy{Strategy} -func (autoscalerStatusStrategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { +func (autoscalerStatusStrategy) PrepareForUpdate(ctx genericapirequest.Context, obj, old runtime.Object) { newAutoscaler := obj.(*autoscaling.HorizontalPodAutoscaler) oldAutoscaler := old.(*autoscaling.HorizontalPodAutoscaler) // status changes are not allowed to update spec newAutoscaler.Spec = oldAutoscaler.Spec } -func (autoscalerStatusStrategy) ValidateUpdate(ctx api.Context, obj, old runtime.Object) field.ErrorList { +func (autoscalerStatusStrategy) ValidateUpdate(ctx genericapirequest.Context, obj, old runtime.Object) field.ErrorList { return validation.ValidateHorizontalPodAutoscalerStatusUpdate(obj.(*autoscaling.HorizontalPodAutoscaler), old.(*autoscaling.HorizontalPodAutoscaler)) } diff --git a/pkg/registry/batch/cronjob/BUILD b/pkg/registry/batch/cronjob/BUILD index e5e9c54bcf..5d79554c4c 100644 --- a/pkg/registry/batch/cronjob/BUILD +++ b/pkg/registry/batch/cronjob/BUILD @@ -20,6 +20,7 @@ go_library( "//pkg/apis/batch:go_default_library", "//pkg/apis/batch/validation:go_default_library", "//pkg/fields:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/labels:go_default_library", "//pkg/registry/generic:go_default_library", "//pkg/runtime:go_default_library", @@ -38,5 +39,6 @@ go_test( "//pkg/api/testing:go_default_library", "//pkg/apis/batch:go_default_library", "//pkg/apis/meta/v1:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", ], ) diff --git a/pkg/registry/batch/cronjob/etcd/BUILD b/pkg/registry/batch/cronjob/etcd/BUILD index 08ca9b412e..4128f11be9 100644 --- a/pkg/registry/batch/cronjob/etcd/BUILD +++ b/pkg/registry/batch/cronjob/etcd/BUILD @@ -13,10 +13,10 @@ go_library( srcs = ["etcd.go"], tags = ["automanaged"], deps = [ - "//pkg/api:go_default_library", "//pkg/api/rest:go_default_library", "//pkg/apis/batch:go_default_library", "//pkg/apis/meta/v1:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/registry/batch/cronjob:go_default_library", "//pkg/registry/generic:go_default_library", "//pkg/registry/generic/registry:go_default_library", diff --git a/pkg/registry/batch/cronjob/etcd/etcd.go b/pkg/registry/batch/cronjob/etcd/etcd.go index 63820e6546..6d700ffbf7 100644 --- a/pkg/registry/batch/cronjob/etcd/etcd.go +++ b/pkg/registry/batch/cronjob/etcd/etcd.go @@ -17,10 +17,10 @@ limitations under the License. package etcd import ( - "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/rest" "k8s.io/kubernetes/pkg/apis/batch" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/registry/batch/cronjob" "k8s.io/kubernetes/pkg/registry/generic" genericregistry "k8s.io/kubernetes/pkg/registry/generic/registry" @@ -68,11 +68,11 @@ func (r *StatusREST) New() runtime.Object { } // Get retrieves the object from the storage. It is required to support Patch. -func (r *StatusREST) Get(ctx api.Context, name string, options *metav1.GetOptions) (runtime.Object, error) { +func (r *StatusREST) Get(ctx genericapirequest.Context, name string, options *metav1.GetOptions) (runtime.Object, error) { return r.store.Get(ctx, name, options) } // Update alters the status subset of an object. -func (r *StatusREST) Update(ctx api.Context, name string, objInfo rest.UpdatedObjectInfo) (runtime.Object, bool, error) { +func (r *StatusREST) Update(ctx genericapirequest.Context, name string, objInfo rest.UpdatedObjectInfo) (runtime.Object, bool, error) { return r.store.Update(ctx, name, objInfo) } diff --git a/pkg/registry/batch/cronjob/strategy.go b/pkg/registry/batch/cronjob/strategy.go index 75741b8a0f..82ee0805db 100644 --- a/pkg/registry/batch/cronjob/strategy.go +++ b/pkg/registry/batch/cronjob/strategy.go @@ -23,6 +23,7 @@ import ( "k8s.io/kubernetes/pkg/apis/batch" "k8s.io/kubernetes/pkg/apis/batch/validation" "k8s.io/kubernetes/pkg/fields" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/registry/generic" "k8s.io/kubernetes/pkg/runtime" @@ -45,20 +46,20 @@ func (scheduledJobStrategy) NamespaceScoped() bool { } // PrepareForCreate clears the status of a scheduled job before creation. -func (scheduledJobStrategy) PrepareForCreate(ctx api.Context, obj runtime.Object) { +func (scheduledJobStrategy) PrepareForCreate(ctx genericapirequest.Context, obj runtime.Object) { scheduledJob := obj.(*batch.CronJob) scheduledJob.Status = batch.CronJobStatus{} } // PrepareForUpdate clears fields that are not allowed to be set by end users on update. -func (scheduledJobStrategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { +func (scheduledJobStrategy) PrepareForUpdate(ctx genericapirequest.Context, obj, old runtime.Object) { newCronJob := obj.(*batch.CronJob) oldCronJob := old.(*batch.CronJob) newCronJob.Status = oldCronJob.Status } // Validate validates a new scheduled job. -func (scheduledJobStrategy) Validate(ctx api.Context, obj runtime.Object) field.ErrorList { +func (scheduledJobStrategy) Validate(ctx genericapirequest.Context, obj runtime.Object) field.ErrorList { scheduledJob := obj.(*batch.CronJob) return validation.ValidateCronJob(scheduledJob) } @@ -77,7 +78,7 @@ func (scheduledJobStrategy) AllowCreateOnUpdate() bool { } // ValidateUpdate is the default update validation for an end user. -func (scheduledJobStrategy) ValidateUpdate(ctx api.Context, obj, old runtime.Object) field.ErrorList { +func (scheduledJobStrategy) ValidateUpdate(ctx genericapirequest.Context, obj, old runtime.Object) field.ErrorList { return validation.ValidateCronJob(obj.(*batch.CronJob)) } @@ -87,13 +88,13 @@ type scheduledJobStatusStrategy struct { var StatusStrategy = scheduledJobStatusStrategy{Strategy} -func (scheduledJobStatusStrategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { +func (scheduledJobStatusStrategy) PrepareForUpdate(ctx genericapirequest.Context, obj, old runtime.Object) { newJob := obj.(*batch.CronJob) oldJob := old.(*batch.CronJob) newJob.Spec = oldJob.Spec } -func (scheduledJobStatusStrategy) ValidateUpdate(ctx api.Context, obj, old runtime.Object) field.ErrorList { +func (scheduledJobStatusStrategy) ValidateUpdate(ctx genericapirequest.Context, obj, old runtime.Object) field.ErrorList { return field.ErrorList{} } diff --git a/pkg/registry/batch/cronjob/strategy_test.go b/pkg/registry/batch/cronjob/strategy_test.go index 9f72a630d3..a8bd5d96c4 100644 --- a/pkg/registry/batch/cronjob/strategy_test.go +++ b/pkg/registry/batch/cronjob/strategy_test.go @@ -23,6 +23,7 @@ import ( apitesting "k8s.io/kubernetes/pkg/api/testing" "k8s.io/kubernetes/pkg/apis/batch" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" ) func newBool(a bool) *bool { @@ -32,7 +33,7 @@ func newBool(a bool) *bool { } func TestCronJobStrategy(t *testing.T) { - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() if !Strategy.NamespaceScoped() { t.Errorf("CronJob must be namespace scoped") } @@ -94,7 +95,7 @@ func TestCronJobStrategy(t *testing.T) { } func TestCronJobStatusStrategy(t *testing.T) { - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() if !StatusStrategy.NamespaceScoped() { t.Errorf("CronJob must be namespace scoped") } diff --git a/pkg/registry/batch/job/BUILD b/pkg/registry/batch/job/BUILD index 56029a4a6b..6ffa7f9393 100644 --- a/pkg/registry/batch/job/BUILD +++ b/pkg/registry/batch/job/BUILD @@ -21,6 +21,7 @@ go_library( "//pkg/apis/batch/validation:go_default_library", "//pkg/apis/meta/v1:go_default_library", "//pkg/fields:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/labels:go_default_library", "//pkg/registry/generic:go_default_library", "//pkg/runtime:go_default_library", @@ -40,6 +41,7 @@ go_test( "//pkg/api/testing:go_default_library", "//pkg/apis/batch:go_default_library", "//pkg/apis/meta/v1:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/types:go_default_library", ], ) diff --git a/pkg/registry/batch/job/etcd/BUILD b/pkg/registry/batch/job/etcd/BUILD index e560b06b31..e0b9599cfe 100644 --- a/pkg/registry/batch/job/etcd/BUILD +++ b/pkg/registry/batch/job/etcd/BUILD @@ -13,10 +13,10 @@ go_library( srcs = ["etcd.go"], tags = ["automanaged"], deps = [ - "//pkg/api:go_default_library", "//pkg/api/rest:go_default_library", "//pkg/apis/batch:go_default_library", "//pkg/apis/meta/v1:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/registry/batch/job:go_default_library", "//pkg/registry/generic:go_default_library", "//pkg/registry/generic/registry:go_default_library", diff --git a/pkg/registry/batch/job/etcd/etcd.go b/pkg/registry/batch/job/etcd/etcd.go index 1bf156a8e2..f44fe24ee7 100644 --- a/pkg/registry/batch/job/etcd/etcd.go +++ b/pkg/registry/batch/job/etcd/etcd.go @@ -17,10 +17,10 @@ limitations under the License. package etcd import ( - "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/rest" "k8s.io/kubernetes/pkg/apis/batch" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/registry/batch/job" "k8s.io/kubernetes/pkg/registry/generic" genericregistry "k8s.io/kubernetes/pkg/registry/generic/registry" @@ -83,11 +83,11 @@ func (r *StatusREST) New() runtime.Object { } // Get retrieves the object from the storage. It is required to support Patch. -func (r *StatusREST) Get(ctx api.Context, name string, options *metav1.GetOptions) (runtime.Object, error) { +func (r *StatusREST) Get(ctx genericapirequest.Context, name string, options *metav1.GetOptions) (runtime.Object, error) { return r.store.Get(ctx, name, options) } // Update alters the status subset of an object. -func (r *StatusREST) Update(ctx api.Context, name string, objInfo rest.UpdatedObjectInfo) (runtime.Object, bool, error) { +func (r *StatusREST) Update(ctx genericapirequest.Context, name string, objInfo rest.UpdatedObjectInfo) (runtime.Object, bool, error) { return r.store.Update(ctx, name, objInfo) } diff --git a/pkg/registry/batch/job/strategy.go b/pkg/registry/batch/job/strategy.go index e3231de6bf..1a3a5fbff3 100644 --- a/pkg/registry/batch/job/strategy.go +++ b/pkg/registry/batch/job/strategy.go @@ -25,6 +25,7 @@ import ( "k8s.io/kubernetes/pkg/apis/batch/validation" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" "k8s.io/kubernetes/pkg/fields" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/registry/generic" "k8s.io/kubernetes/pkg/runtime" @@ -47,20 +48,20 @@ func (jobStrategy) NamespaceScoped() bool { } // PrepareForCreate clears the status of a job before creation. -func (jobStrategy) PrepareForCreate(ctx api.Context, obj runtime.Object) { +func (jobStrategy) PrepareForCreate(ctx genericapirequest.Context, obj runtime.Object) { job := obj.(*batch.Job) job.Status = batch.JobStatus{} } // PrepareForUpdate clears fields that are not allowed to be set by end users on update. -func (jobStrategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { +func (jobStrategy) PrepareForUpdate(ctx genericapirequest.Context, obj, old runtime.Object) { newJob := obj.(*batch.Job) oldJob := old.(*batch.Job) newJob.Status = oldJob.Status } // Validate validates a new job. -func (jobStrategy) Validate(ctx api.Context, obj runtime.Object) field.ErrorList { +func (jobStrategy) Validate(ctx genericapirequest.Context, obj runtime.Object) field.ErrorList { job := obj.(*batch.Job) // TODO: move UID generation earlier and do this in defaulting logic? if job.Spec.ManualSelector == nil || *job.Spec.ManualSelector == false { @@ -133,7 +134,7 @@ func (jobStrategy) AllowCreateOnUpdate() bool { } // ValidateUpdate is the default update validation for an end user. -func (jobStrategy) ValidateUpdate(ctx api.Context, obj, old runtime.Object) field.ErrorList { +func (jobStrategy) ValidateUpdate(ctx genericapirequest.Context, obj, old runtime.Object) field.ErrorList { validationErrorList := validation.ValidateJob(obj.(*batch.Job)) updateErrorList := validation.ValidateJobUpdate(obj.(*batch.Job), old.(*batch.Job)) return append(validationErrorList, updateErrorList...) @@ -145,13 +146,13 @@ type jobStatusStrategy struct { var StatusStrategy = jobStatusStrategy{Strategy} -func (jobStatusStrategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { +func (jobStatusStrategy) PrepareForUpdate(ctx genericapirequest.Context, obj, old runtime.Object) { newJob := obj.(*batch.Job) oldJob := old.(*batch.Job) newJob.Spec = oldJob.Spec } -func (jobStatusStrategy) ValidateUpdate(ctx api.Context, obj, old runtime.Object) field.ErrorList { +func (jobStatusStrategy) ValidateUpdate(ctx genericapirequest.Context, obj, old runtime.Object) field.ErrorList { return validation.ValidateJobUpdateStatus(obj.(*batch.Job), old.(*batch.Job)) } diff --git a/pkg/registry/batch/job/strategy_test.go b/pkg/registry/batch/job/strategy_test.go index 28eceeb84b..52e0424aa2 100644 --- a/pkg/registry/batch/job/strategy_test.go +++ b/pkg/registry/batch/job/strategy_test.go @@ -25,6 +25,7 @@ import ( apitesting "k8s.io/kubernetes/pkg/api/testing" "k8s.io/kubernetes/pkg/apis/batch" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/types" ) @@ -35,7 +36,7 @@ func newBool(a bool) *bool { } func TestJobStrategy(t *testing.T) { - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() if !Strategy.NamespaceScoped() { t.Errorf("Job must be namespace scoped") } @@ -102,7 +103,7 @@ func TestJobStrategy(t *testing.T) { } func TestJobStrategyWithGeneration(t *testing.T) { - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() theUID := types.UID("1a2b3c4d5e6f7g8h9i0k") @@ -152,7 +153,7 @@ func TestJobStrategyWithGeneration(t *testing.T) { } func TestJobStatusStrategy(t *testing.T) { - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() if !StatusStrategy.NamespaceScoped() { t.Errorf("Job must be namespace scoped") } diff --git a/pkg/registry/certificates/certificates/BUILD b/pkg/registry/certificates/certificates/BUILD index bf8e700795..6adfb64bc2 100644 --- a/pkg/registry/certificates/certificates/BUILD +++ b/pkg/registry/certificates/certificates/BUILD @@ -23,6 +23,7 @@ go_library( "//pkg/apis/certificates/validation:go_default_library", "//pkg/apis/meta/v1:go_default_library", "//pkg/fields:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/labels:go_default_library", "//pkg/registry/generic:go_default_library", "//pkg/runtime:go_default_library", @@ -38,9 +39,9 @@ go_test( library = ":go_default_library", tags = ["automanaged"], deps = [ - "//pkg/api:go_default_library", "//pkg/apis/certificates:go_default_library", "//pkg/auth/user:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/runtime:go_default_library", "//pkg/util/diff:go_default_library", ], diff --git a/pkg/registry/certificates/certificates/etcd/BUILD b/pkg/registry/certificates/certificates/etcd/BUILD index a40c68a057..59f5944a0c 100644 --- a/pkg/registry/certificates/certificates/etcd/BUILD +++ b/pkg/registry/certificates/certificates/etcd/BUILD @@ -12,9 +12,9 @@ go_library( srcs = ["etcd.go"], tags = ["automanaged"], deps = [ - "//pkg/api:go_default_library", "//pkg/api/rest:go_default_library", "//pkg/apis/certificates:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/registry/certificates/certificates:go_default_library", "//pkg/registry/generic:go_default_library", "//pkg/registry/generic/registry:go_default_library", diff --git a/pkg/registry/certificates/certificates/etcd/etcd.go b/pkg/registry/certificates/certificates/etcd/etcd.go index 947909bf15..b039308fec 100644 --- a/pkg/registry/certificates/certificates/etcd/etcd.go +++ b/pkg/registry/certificates/certificates/etcd/etcd.go @@ -17,9 +17,9 @@ limitations under the License. package etcd import ( - "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/rest" "k8s.io/kubernetes/pkg/apis/certificates" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" csrregistry "k8s.io/kubernetes/pkg/registry/certificates/certificates" "k8s.io/kubernetes/pkg/registry/generic" genericregistry "k8s.io/kubernetes/pkg/registry/generic/registry" @@ -73,7 +73,7 @@ func (r *StatusREST) New() runtime.Object { } // Update alters the status subset of an object. -func (r *StatusREST) Update(ctx api.Context, name string, objInfo rest.UpdatedObjectInfo) (runtime.Object, bool, error) { +func (r *StatusREST) Update(ctx genericapirequest.Context, name string, objInfo rest.UpdatedObjectInfo) (runtime.Object, bool, error) { return r.store.Update(ctx, name, objInfo) } @@ -87,6 +87,6 @@ func (r *ApprovalREST) New() runtime.Object { } // Update alters the approval subset of an object. -func (r *ApprovalREST) Update(ctx api.Context, name string, objInfo rest.UpdatedObjectInfo) (runtime.Object, bool, error) { +func (r *ApprovalREST) Update(ctx genericapirequest.Context, name string, objInfo rest.UpdatedObjectInfo) (runtime.Object, bool, error) { return r.store.Update(ctx, name, objInfo) } diff --git a/pkg/registry/certificates/certificates/registry.go b/pkg/registry/certificates/certificates/registry.go index 66cf316355..fd25435813 100644 --- a/pkg/registry/certificates/certificates/registry.go +++ b/pkg/registry/certificates/certificates/registry.go @@ -21,17 +21,18 @@ import ( "k8s.io/kubernetes/pkg/api/rest" "k8s.io/kubernetes/pkg/apis/certificates" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/watch" ) // Registry is an interface for things that know how to store CSRs. type Registry interface { - ListCSRs(ctx api.Context, options *api.ListOptions) (*certificates.CertificateSigningRequestList, error) - CreateCSR(ctx api.Context, csr *certificates.CertificateSigningRequest) error - UpdateCSR(ctx api.Context, csr *certificates.CertificateSigningRequest) error - GetCSR(ctx api.Context, csrID string, options *metav1.GetOptions) (*certificates.CertificateSigningRequest, error) - DeleteCSR(ctx api.Context, csrID string) error - WatchCSRs(ctx api.Context, options *api.ListOptions) (watch.Interface, error) + ListCSRs(ctx genericapirequest.Context, options *api.ListOptions) (*certificates.CertificateSigningRequestList, error) + CreateCSR(ctx genericapirequest.Context, csr *certificates.CertificateSigningRequest) error + UpdateCSR(ctx genericapirequest.Context, csr *certificates.CertificateSigningRequest) error + GetCSR(ctx genericapirequest.Context, csrID string, options *metav1.GetOptions) (*certificates.CertificateSigningRequest, error) + DeleteCSR(ctx genericapirequest.Context, csrID string) error + WatchCSRs(ctx genericapirequest.Context, options *api.ListOptions) (watch.Interface, error) } // storage puts strong typing around storage calls @@ -45,7 +46,7 @@ func NewRegistry(s rest.StandardStorage) Registry { return &storage{s} } -func (s *storage) ListCSRs(ctx api.Context, options *api.ListOptions) (*certificates.CertificateSigningRequestList, error) { +func (s *storage) ListCSRs(ctx genericapirequest.Context, options *api.ListOptions) (*certificates.CertificateSigningRequestList, error) { obj, err := s.List(ctx, options) if err != nil { return nil, err @@ -54,21 +55,21 @@ func (s *storage) ListCSRs(ctx api.Context, options *api.ListOptions) (*certific return obj.(*certificates.CertificateSigningRequestList), nil } -func (s *storage) CreateCSR(ctx api.Context, csr *certificates.CertificateSigningRequest) error { +func (s *storage) CreateCSR(ctx genericapirequest.Context, csr *certificates.CertificateSigningRequest) error { _, err := s.Create(ctx, csr) return err } -func (s *storage) UpdateCSR(ctx api.Context, csr *certificates.CertificateSigningRequest) error { +func (s *storage) UpdateCSR(ctx genericapirequest.Context, csr *certificates.CertificateSigningRequest) error { _, _, err := s.Update(ctx, csr.Name, rest.DefaultUpdatedObjectInfo(csr, api.Scheme)) return err } -func (s *storage) WatchCSRs(ctx api.Context, options *api.ListOptions) (watch.Interface, error) { +func (s *storage) WatchCSRs(ctx genericapirequest.Context, options *api.ListOptions) (watch.Interface, error) { return s.Watch(ctx, options) } -func (s *storage) GetCSR(ctx api.Context, name string, options *metav1.GetOptions) (*certificates.CertificateSigningRequest, error) { +func (s *storage) GetCSR(ctx genericapirequest.Context, name string, options *metav1.GetOptions) (*certificates.CertificateSigningRequest, error) { obj, err := s.Get(ctx, name, options) if err != nil { return nil, err @@ -76,7 +77,7 @@ func (s *storage) GetCSR(ctx api.Context, name string, options *metav1.GetOption return obj.(*certificates.CertificateSigningRequest), nil } -func (s *storage) DeleteCSR(ctx api.Context, name string) error { +func (s *storage) DeleteCSR(ctx genericapirequest.Context, name string) error { _, err := s.Delete(ctx, name, nil) return err } diff --git a/pkg/registry/certificates/certificates/strategy.go b/pkg/registry/certificates/certificates/strategy.go index 1a6a6f6bbb..32fc70bc1b 100644 --- a/pkg/registry/certificates/certificates/strategy.go +++ b/pkg/registry/certificates/certificates/strategy.go @@ -23,6 +23,7 @@ import ( "k8s.io/kubernetes/pkg/apis/certificates" "k8s.io/kubernetes/pkg/apis/certificates/validation" "k8s.io/kubernetes/pkg/fields" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/registry/generic" "k8s.io/kubernetes/pkg/runtime" @@ -52,7 +53,7 @@ func (csrStrategy) AllowCreateOnUpdate() bool { // PrepareForCreate clears fields that are not allowed to be set by end users // on creation. -func (csrStrategy) PrepareForCreate(ctx api.Context, obj runtime.Object) { +func (csrStrategy) PrepareForCreate(ctx genericapirequest.Context, obj runtime.Object) { csr := obj.(*certificates.CertificateSigningRequest) // Clear any user-specified info @@ -60,7 +61,7 @@ func (csrStrategy) PrepareForCreate(ctx api.Context, obj runtime.Object) { csr.Spec.UID = "" csr.Spec.Groups = nil // Inject user.Info from request context - if user, ok := api.UserFrom(ctx); ok { + if user, ok := genericapirequest.UserFrom(ctx); ok { csr.Spec.Username = user.GetName() csr.Spec.UID = user.GetUID() csr.Spec.Groups = user.GetGroups() @@ -73,7 +74,7 @@ func (csrStrategy) PrepareForCreate(ctx api.Context, obj runtime.Object) { // PrepareForUpdate clears fields that are not allowed to be set by end users // on update. Certificate requests are immutable after creation except via subresources. -func (csrStrategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { +func (csrStrategy) PrepareForUpdate(ctx genericapirequest.Context, obj, old runtime.Object) { newCSR := obj.(*certificates.CertificateSigningRequest) oldCSR := old.(*certificates.CertificateSigningRequest) @@ -82,7 +83,7 @@ func (csrStrategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { } // Validate validates a new CSR. Validation must check for a correct signature. -func (csrStrategy) Validate(ctx api.Context, obj runtime.Object) field.ErrorList { +func (csrStrategy) Validate(ctx genericapirequest.Context, obj runtime.Object) field.ErrorList { csr := obj.(*certificates.CertificateSigningRequest) return validation.ValidateCertificateSigningRequest(csr) } @@ -91,7 +92,7 @@ func (csrStrategy) Validate(ctx api.Context, obj runtime.Object) field.ErrorList func (csrStrategy) Canonicalize(obj runtime.Object) {} // ValidateUpdate is the default update validation for an end user. -func (csrStrategy) ValidateUpdate(ctx api.Context, obj, old runtime.Object) field.ErrorList { +func (csrStrategy) ValidateUpdate(ctx genericapirequest.Context, obj, old runtime.Object) field.ErrorList { oldCSR := old.(*certificates.CertificateSigningRequest) newCSR := obj.(*certificates.CertificateSigningRequest) return validation.ValidateCertificateSigningRequestUpdate(newCSR, oldCSR) @@ -106,7 +107,7 @@ func (csrStrategy) AllowUnconditionalUpdate() bool { return true } -func (s csrStrategy) Export(ctx api.Context, obj runtime.Object, exact bool) error { +func (s csrStrategy) Export(ctx genericapirequest.Context, obj runtime.Object, exact bool) error { csr, ok := obj.(*certificates.CertificateSigningRequest) if !ok { // unexpected programmer error @@ -128,7 +129,7 @@ type csrStatusStrategy struct { var StatusStrategy = csrStatusStrategy{Strategy} -func (csrStatusStrategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { +func (csrStatusStrategy) PrepareForUpdate(ctx genericapirequest.Context, obj, old runtime.Object) { newCSR := obj.(*certificates.CertificateSigningRequest) oldCSR := old.(*certificates.CertificateSigningRequest) @@ -139,7 +140,7 @@ func (csrStatusStrategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Obje newCSR.Status.Conditions = oldCSR.Status.Conditions } -func (csrStatusStrategy) ValidateUpdate(ctx api.Context, obj, old runtime.Object) field.ErrorList { +func (csrStatusStrategy) ValidateUpdate(ctx genericapirequest.Context, obj, old runtime.Object) field.ErrorList { return validation.ValidateCertificateSigningRequestUpdate(obj.(*certificates.CertificateSigningRequest), old.(*certificates.CertificateSigningRequest)) } @@ -154,7 +155,7 @@ type csrApprovalStrategy struct { var ApprovalStrategy = csrApprovalStrategy{Strategy} -func (csrApprovalStrategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { +func (csrApprovalStrategy) PrepareForUpdate(ctx genericapirequest.Context, obj, old runtime.Object) { newCSR := obj.(*certificates.CertificateSigningRequest) oldCSR := old.(*certificates.CertificateSigningRequest) @@ -164,7 +165,7 @@ func (csrApprovalStrategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Ob newCSR.Status = oldCSR.Status } -func (csrApprovalStrategy) ValidateUpdate(ctx api.Context, obj, old runtime.Object) field.ErrorList { +func (csrApprovalStrategy) ValidateUpdate(ctx genericapirequest.Context, obj, old runtime.Object) field.ErrorList { return validation.ValidateCertificateSigningRequestUpdate(obj.(*certificates.CertificateSigningRequest), old.(*certificates.CertificateSigningRequest)) } diff --git a/pkg/registry/certificates/certificates/strategy_test.go b/pkg/registry/certificates/certificates/strategy_test.go index 182fa015ec..db571da4e1 100644 --- a/pkg/registry/certificates/certificates/strategy_test.go +++ b/pkg/registry/certificates/certificates/strategy_test.go @@ -20,29 +20,29 @@ import ( "reflect" "testing" - "k8s.io/kubernetes/pkg/api" certapi "k8s.io/kubernetes/pkg/apis/certificates" "k8s.io/kubernetes/pkg/auth/user" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/util/diff" ) func TestStrategyCreate(t *testing.T) { tests := map[string]struct { - ctx api.Context + ctx genericapirequest.Context obj runtime.Object expectedObj runtime.Object }{ "no user in context, no user in obj": { - ctx: api.NewContext(), + ctx: genericapirequest.NewContext(), obj: &certapi.CertificateSigningRequest{}, expectedObj: &certapi.CertificateSigningRequest{ Status: certapi.CertificateSigningRequestStatus{Conditions: []certapi.CertificateSigningRequestCondition{}}, }, }, "user in context, no user in obj": { - ctx: api.WithUser( - api.NewContext(), + ctx: genericapirequest.WithUser( + genericapirequest.NewContext(), &user.DefaultInfo{ Name: "bob", UID: "123", @@ -61,7 +61,7 @@ func TestStrategyCreate(t *testing.T) { }, }, "no user in context, user in obj": { - ctx: api.NewContext(), + ctx: genericapirequest.NewContext(), obj: &certapi.CertificateSigningRequest{ Spec: certapi.CertificateSigningRequestSpec{ Username: "bob", @@ -74,8 +74,8 @@ func TestStrategyCreate(t *testing.T) { }, }, "user in context, user in obj": { - ctx: api.WithUser( - api.NewContext(), + ctx: genericapirequest.WithUser( + genericapirequest.NewContext(), &user.DefaultInfo{ Name: "alice", UID: "234", @@ -98,7 +98,7 @@ func TestStrategyCreate(t *testing.T) { }, }, "pre-approved status": { - ctx: api.NewContext(), + ctx: genericapirequest.NewContext(), obj: &certapi.CertificateSigningRequest{ Status: certapi.CertificateSigningRequestStatus{ Conditions: []certapi.CertificateSigningRequestCondition{ diff --git a/pkg/registry/core/componentstatus/BUILD b/pkg/registry/core/componentstatus/BUILD index 8f6f323ad5..16b86b81f8 100644 --- a/pkg/registry/core/componentstatus/BUILD +++ b/pkg/registry/core/componentstatus/BUILD @@ -19,6 +19,7 @@ go_library( deps = [ "//pkg/api:go_default_library", "//pkg/apis/meta/v1:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/probe:go_default_library", "//pkg/probe/http:go_default_library", "//pkg/runtime:go_default_library", @@ -37,6 +38,7 @@ go_test( deps = [ "//pkg/api:go_default_library", "//pkg/apis/meta/v1:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/probe:go_default_library", "//pkg/util/diff:go_default_library", ], diff --git a/pkg/registry/core/componentstatus/rest.go b/pkg/registry/core/componentstatus/rest.go index a40a2a4a2e..bc9bf674b6 100644 --- a/pkg/registry/core/componentstatus/rest.go +++ b/pkg/registry/core/componentstatus/rest.go @@ -18,11 +18,11 @@ package componentstatus import ( "fmt" - "sync" "k8s.io/kubernetes/pkg/api" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/probe" httpprober "k8s.io/kubernetes/pkg/probe/http" "k8s.io/kubernetes/pkg/runtime" @@ -51,7 +51,7 @@ func (rs *REST) NewList() runtime.Object { // Returns the list of component status. Note that the label and field are both ignored. // Note that this call doesn't support labels or selectors. -func (rs *REST) List(ctx api.Context, options *api.ListOptions) (runtime.Object, error) { +func (rs *REST) List(ctx genericapirequest.Context, options *api.ListOptions) (runtime.Object, error) { servers := rs.GetServersToValidate() wait := sync.WaitGroup{} @@ -74,7 +74,7 @@ func (rs *REST) List(ctx api.Context, options *api.ListOptions) (runtime.Object, return &api.ComponentStatusList{Items: reply}, nil } -func (rs *REST) Get(ctx api.Context, name string, options *metav1.GetOptions) (runtime.Object, error) { +func (rs *REST) Get(ctx genericapirequest.Context, name string, options *metav1.GetOptions) (runtime.Object, error) { servers := rs.GetServersToValidate() if server, ok := servers[name]; !ok { diff --git a/pkg/registry/core/componentstatus/rest_test.go b/pkg/registry/core/componentstatus/rest_test.go index 1206db27b0..110e7c035c 100644 --- a/pkg/registry/core/componentstatus/rest_test.go +++ b/pkg/registry/core/componentstatus/rest_test.go @@ -28,6 +28,7 @@ import ( "k8s.io/kubernetes/pkg/api" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/probe" "k8s.io/kubernetes/pkg/util/diff" ) @@ -75,7 +76,7 @@ func createTestStatus(name string, status api.ConditionStatus, msg string, err s func TestList_NoError(t *testing.T) { r := NewTestREST(testResponse{result: probe.Success, data: "ok"}) - got, err := r.List(api.NewContext(), nil) + got, err := r.List(genericapirequest.NewContext(), nil) if err != nil { t.Fatalf("Unexpected error: %v", err) } @@ -89,7 +90,7 @@ func TestList_NoError(t *testing.T) { func TestList_FailedCheck(t *testing.T) { r := NewTestREST(testResponse{result: probe.Failure, data: ""}) - got, err := r.List(api.NewContext(), nil) + got, err := r.List(genericapirequest.NewContext(), nil) if err != nil { t.Fatalf("Unexpected error: %v", err) } @@ -104,7 +105,7 @@ func TestList_FailedCheck(t *testing.T) { func TestList_UnknownError(t *testing.T) { r := NewTestREST(testResponse{result: probe.Unknown, data: "", err: fmt.Errorf("fizzbuzz error")}) - got, err := r.List(api.NewContext(), nil) + got, err := r.List(genericapirequest.NewContext(), nil) if err != nil { t.Fatalf("Unexpected error: %v", err) } @@ -119,7 +120,7 @@ func TestList_UnknownError(t *testing.T) { func TestGet_NoError(t *testing.T) { r := NewTestREST(testResponse{result: probe.Success, data: "ok"}) - got, err := r.Get(api.NewContext(), "test1", &metav1.GetOptions{}) + got, err := r.Get(genericapirequest.NewContext(), "test1", &metav1.GetOptions{}) if err != nil { t.Fatalf("Unexpected error: %v", err) } @@ -131,7 +132,7 @@ func TestGet_NoError(t *testing.T) { func TestGet_BadName(t *testing.T) { r := NewTestREST(testResponse{result: probe.Success, data: "ok"}) - _, err := r.Get(api.NewContext(), "invalidname", &metav1.GetOptions{}) + _, err := r.Get(genericapirequest.NewContext(), "invalidname", &metav1.GetOptions{}) if err == nil { t.Fatalf("Expected error, but did not get one") } diff --git a/pkg/registry/core/configmap/BUILD b/pkg/registry/core/configmap/BUILD index 472a374589..6f7869b9b1 100644 --- a/pkg/registry/core/configmap/BUILD +++ b/pkg/registry/core/configmap/BUILD @@ -22,6 +22,7 @@ go_library( "//pkg/api/validation:go_default_library", "//pkg/apis/meta/v1:go_default_library", "//pkg/fields:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/labels:go_default_library", "//pkg/registry/generic:go_default_library", "//pkg/runtime:go_default_library", @@ -40,5 +41,6 @@ go_test( "//pkg/api:go_default_library", "//pkg/api/testing:go_default_library", "//pkg/apimachinery/registered:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", ], ) diff --git a/pkg/registry/core/configmap/registry.go b/pkg/registry/core/configmap/registry.go index d5bb493670..9796211cc5 100644 --- a/pkg/registry/core/configmap/registry.go +++ b/pkg/registry/core/configmap/registry.go @@ -20,17 +20,18 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/rest" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/watch" ) // Registry is an interface for things that know how to store ConfigMaps. type Registry interface { - ListConfigMaps(ctx api.Context, options *api.ListOptions) (*api.ConfigMapList, error) - WatchConfigMaps(ctx api.Context, options *api.ListOptions) (watch.Interface, error) - GetConfigMap(ctx api.Context, name string, options *metav1.GetOptions) (*api.ConfigMap, error) - CreateConfigMap(ctx api.Context, cfg *api.ConfigMap) (*api.ConfigMap, error) - UpdateConfigMap(ctx api.Context, cfg *api.ConfigMap) (*api.ConfigMap, error) - DeleteConfigMap(ctx api.Context, name string) error + ListConfigMaps(ctx genericapirequest.Context, options *api.ListOptions) (*api.ConfigMapList, error) + WatchConfigMaps(ctx genericapirequest.Context, options *api.ListOptions) (watch.Interface, error) + GetConfigMap(ctx genericapirequest.Context, name string, options *metav1.GetOptions) (*api.ConfigMap, error) + CreateConfigMap(ctx genericapirequest.Context, cfg *api.ConfigMap) (*api.ConfigMap, error) + UpdateConfigMap(ctx genericapirequest.Context, cfg *api.ConfigMap) (*api.ConfigMap, error) + DeleteConfigMap(ctx genericapirequest.Context, name string) error } // storage puts strong typing around storage calls @@ -44,7 +45,7 @@ func NewRegistry(s rest.StandardStorage) Registry { return &storage{s} } -func (s *storage) ListConfigMaps(ctx api.Context, options *api.ListOptions) (*api.ConfigMapList, error) { +func (s *storage) ListConfigMaps(ctx genericapirequest.Context, options *api.ListOptions) (*api.ConfigMapList, error) { obj, err := s.List(ctx, options) if err != nil { return nil, err @@ -53,11 +54,11 @@ func (s *storage) ListConfigMaps(ctx api.Context, options *api.ListOptions) (*ap return obj.(*api.ConfigMapList), err } -func (s *storage) WatchConfigMaps(ctx api.Context, options *api.ListOptions) (watch.Interface, error) { +func (s *storage) WatchConfigMaps(ctx genericapirequest.Context, options *api.ListOptions) (watch.Interface, error) { return s.Watch(ctx, options) } -func (s *storage) GetConfigMap(ctx api.Context, name string, options *metav1.GetOptions) (*api.ConfigMap, error) { +func (s *storage) GetConfigMap(ctx genericapirequest.Context, name string, options *metav1.GetOptions) (*api.ConfigMap, error) { obj, err := s.Get(ctx, name, options) if err != nil { return nil, err @@ -66,7 +67,7 @@ func (s *storage) GetConfigMap(ctx api.Context, name string, options *metav1.Get return obj.(*api.ConfigMap), nil } -func (s *storage) CreateConfigMap(ctx api.Context, cfg *api.ConfigMap) (*api.ConfigMap, error) { +func (s *storage) CreateConfigMap(ctx genericapirequest.Context, cfg *api.ConfigMap) (*api.ConfigMap, error) { obj, err := s.Create(ctx, cfg) if err != nil { return nil, err @@ -75,7 +76,7 @@ func (s *storage) CreateConfigMap(ctx api.Context, cfg *api.ConfigMap) (*api.Con return obj.(*api.ConfigMap), nil } -func (s *storage) UpdateConfigMap(ctx api.Context, cfg *api.ConfigMap) (*api.ConfigMap, error) { +func (s *storage) UpdateConfigMap(ctx genericapirequest.Context, cfg *api.ConfigMap) (*api.ConfigMap, error) { obj, _, err := s.Update(ctx, cfg.Name, rest.DefaultUpdatedObjectInfo(cfg, api.Scheme)) if err != nil { return nil, err @@ -84,7 +85,7 @@ func (s *storage) UpdateConfigMap(ctx api.Context, cfg *api.ConfigMap) (*api.Con return obj.(*api.ConfigMap), nil } -func (s *storage) DeleteConfigMap(ctx api.Context, name string) error { +func (s *storage) DeleteConfigMap(ctx genericapirequest.Context, name string) error { _, err := s.Delete(ctx, name, nil) return err diff --git a/pkg/registry/core/configmap/strategy.go b/pkg/registry/core/configmap/strategy.go index 326d1995d0..768a03f141 100644 --- a/pkg/registry/core/configmap/strategy.go +++ b/pkg/registry/core/configmap/strategy.go @@ -23,6 +23,7 @@ import ( "k8s.io/kubernetes/pkg/api/rest" "k8s.io/kubernetes/pkg/api/validation" "k8s.io/kubernetes/pkg/fields" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/registry/generic" "k8s.io/kubernetes/pkg/runtime" @@ -50,11 +51,11 @@ func (strategy) NamespaceScoped() bool { return true } -func (strategy) PrepareForCreate(ctx api.Context, obj runtime.Object) { +func (strategy) PrepareForCreate(ctx genericapirequest.Context, obj runtime.Object) { _ = obj.(*api.ConfigMap) } -func (strategy) Validate(ctx api.Context, obj runtime.Object) field.ErrorList { +func (strategy) Validate(ctx genericapirequest.Context, obj runtime.Object) field.ErrorList { cfg := obj.(*api.ConfigMap) return validation.ValidateConfigMap(cfg) @@ -68,7 +69,7 @@ func (strategy) AllowCreateOnUpdate() bool { return false } -func (strategy) PrepareForUpdate(ctx api.Context, newObj, oldObj runtime.Object) { +func (strategy) PrepareForUpdate(ctx genericapirequest.Context, newObj, oldObj runtime.Object) { _ = oldObj.(*api.ConfigMap) _ = newObj.(*api.ConfigMap) } @@ -77,7 +78,7 @@ func (strategy) AllowUnconditionalUpdate() bool { return true } -func (strategy) ValidateUpdate(ctx api.Context, newObj, oldObj runtime.Object) field.ErrorList { +func (strategy) ValidateUpdate(ctx genericapirequest.Context, newObj, oldObj runtime.Object) field.ErrorList { oldCfg, newCfg := oldObj.(*api.ConfigMap), newObj.(*api.ConfigMap) return validation.ValidateConfigMapUpdate(newCfg, oldCfg) diff --git a/pkg/registry/core/configmap/strategy_test.go b/pkg/registry/core/configmap/strategy_test.go index 737fc917bf..2e64884256 100644 --- a/pkg/registry/core/configmap/strategy_test.go +++ b/pkg/registry/core/configmap/strategy_test.go @@ -22,10 +22,11 @@ import ( "k8s.io/kubernetes/pkg/api" apitesting "k8s.io/kubernetes/pkg/api/testing" "k8s.io/kubernetes/pkg/apimachinery/registered" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" ) func TestConfigMapStrategy(t *testing.T) { - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() if !Strategy.NamespaceScoped() { t.Errorf("ConfigMap must be namespace scoped") } diff --git a/pkg/registry/core/controller/BUILD b/pkg/registry/core/controller/BUILD index 472a374589..6f7869b9b1 100644 --- a/pkg/registry/core/controller/BUILD +++ b/pkg/registry/core/controller/BUILD @@ -22,6 +22,7 @@ go_library( "//pkg/api/validation:go_default_library", "//pkg/apis/meta/v1:go_default_library", "//pkg/fields:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/labels:go_default_library", "//pkg/registry/generic:go_default_library", "//pkg/runtime:go_default_library", @@ -40,5 +41,6 @@ go_test( "//pkg/api:go_default_library", "//pkg/api/testing:go_default_library", "//pkg/apimachinery/registered:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", ], ) diff --git a/pkg/registry/core/controller/etcd/BUILD b/pkg/registry/core/controller/etcd/BUILD index 803c0015f9..fabe06517c 100644 --- a/pkg/registry/core/controller/etcd/BUILD +++ b/pkg/registry/core/controller/etcd/BUILD @@ -19,6 +19,7 @@ go_library( "//pkg/apis/autoscaling:go_default_library", "//pkg/apis/autoscaling/validation:go_default_library", "//pkg/apis/meta/v1:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/labels:go_default_library", "//pkg/registry/core/controller:go_default_library", "//pkg/registry/generic:go_default_library", @@ -39,6 +40,7 @@ go_test( "//pkg/apis/autoscaling:go_default_library", "//pkg/apis/meta/v1:go_default_library", "//pkg/fields:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/labels:go_default_library", "//pkg/registry/generic:go_default_library", "//pkg/registry/registrytest:go_default_library", diff --git a/pkg/registry/core/controller/etcd/etcd.go b/pkg/registry/core/controller/etcd/etcd.go index 22579cad68..65500506e6 100644 --- a/pkg/registry/core/controller/etcd/etcd.go +++ b/pkg/registry/core/controller/etcd/etcd.go @@ -27,6 +27,7 @@ import ( "k8s.io/kubernetes/pkg/apis/autoscaling" "k8s.io/kubernetes/pkg/apis/autoscaling/validation" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/registry/core/controller" "k8s.io/kubernetes/pkg/registry/generic" @@ -92,12 +93,12 @@ func (r *StatusREST) New() runtime.Object { } // Get retrieves the object from the storage. It is required to support Patch. -func (r *StatusREST) Get(ctx api.Context, name string, options *metav1.GetOptions) (runtime.Object, error) { +func (r *StatusREST) Get(ctx genericapirequest.Context, name string, options *metav1.GetOptions) (runtime.Object, error) { return r.store.Get(ctx, name, options) } // Update alters the status subset of an object. -func (r *StatusREST) Update(ctx api.Context, name string, objInfo rest.UpdatedObjectInfo) (runtime.Object, bool, error) { +func (r *StatusREST) Update(ctx genericapirequest.Context, name string, objInfo rest.UpdatedObjectInfo) (runtime.Object, bool, error) { return r.store.Update(ctx, name, objInfo) } @@ -113,7 +114,7 @@ func (r *ScaleREST) New() runtime.Object { return &autoscaling.Scale{} } -func (r *ScaleREST) Get(ctx api.Context, name string, options *metav1.GetOptions) (runtime.Object, error) { +func (r *ScaleREST) Get(ctx genericapirequest.Context, name string, options *metav1.GetOptions) (runtime.Object, error) { rc, err := r.registry.GetController(ctx, name, options) if err != nil { return nil, errors.NewNotFound(autoscaling.Resource("replicationcontrollers/scale"), name) @@ -121,7 +122,7 @@ func (r *ScaleREST) Get(ctx api.Context, name string, options *metav1.GetOptions return scaleFromRC(rc), nil } -func (r *ScaleREST) Update(ctx api.Context, name string, objInfo rest.UpdatedObjectInfo) (runtime.Object, bool, error) { +func (r *ScaleREST) Update(ctx genericapirequest.Context, name string, objInfo rest.UpdatedObjectInfo) (runtime.Object, bool, error) { rc, err := r.registry.GetController(ctx, name, &metav1.GetOptions{}) if err != nil { return nil, false, errors.NewNotFound(autoscaling.Resource("replicationcontrollers/scale"), name) diff --git a/pkg/registry/core/controller/etcd/etcd_test.go b/pkg/registry/core/controller/etcd/etcd_test.go index 10c14b9819..2b77d864f0 100644 --- a/pkg/registry/core/controller/etcd/etcd_test.go +++ b/pkg/registry/core/controller/etcd/etcd_test.go @@ -25,6 +25,7 @@ import ( "k8s.io/kubernetes/pkg/apis/autoscaling" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" "k8s.io/kubernetes/pkg/fields" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/registry/generic" "k8s.io/kubernetes/pkg/registry/registrytest" @@ -52,7 +53,7 @@ func newStorage(t *testing.T) (ControllerStorage, *etcdtesting.EtcdTestServer) { // createController is a helper function that returns a controller with the updated resource version. func createController(storage *REST, rc api.ReplicationController, t *testing.T) (api.ReplicationController, error) { - ctx := api.WithNamespace(api.NewContext(), rc.Namespace) + ctx := genericapirequest.WithNamespace(genericapirequest.NewContext(), rc.Namespace) obj, err := storage.Create(ctx, &rc) if err != nil { t.Errorf("Failed to create controller, %v", err) @@ -155,7 +156,7 @@ func TestGenerationNumber(t *testing.T) { modifiedSno := *validNewController() modifiedSno.Generation = 100 modifiedSno.Status.ObservedGeneration = 10 - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() rc, err := createController(storage.Controller, modifiedSno, t) ctrl, err := storage.Controller.Get(ctx, rc.Name, &metav1.GetOptions{}) if err != nil { @@ -255,7 +256,7 @@ func TestScaleGet(t *testing.T) { defer server.Terminate(t) defer storage.Controller.Store.DestroyFunc() - ctx := api.WithNamespace(api.NewContext(), namespace) + ctx := genericapirequest.WithNamespace(genericapirequest.NewContext(), namespace) rc, err := createController(storage.Controller, *validController, t) if err != nil { t.Fatalf("error setting new replication controller %v: %v", *validController, err) @@ -292,7 +293,7 @@ func TestScaleUpdate(t *testing.T) { defer server.Terminate(t) defer storage.Controller.Store.DestroyFunc() - ctx := api.WithNamespace(api.NewContext(), namespace) + ctx := genericapirequest.WithNamespace(genericapirequest.NewContext(), namespace) rc, err := createController(storage.Controller, *validController, t) if err != nil { t.Fatalf("error setting new replication controller %v: %v", *validController, err) diff --git a/pkg/registry/core/controller/registry.go b/pkg/registry/core/controller/registry.go index 859cbae48e..3001bf2bd9 100644 --- a/pkg/registry/core/controller/registry.go +++ b/pkg/registry/core/controller/registry.go @@ -24,17 +24,18 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/rest" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/watch" ) // Registry is an interface for things that know how to store ReplicationControllers. type Registry interface { - ListControllers(ctx api.Context, options *api.ListOptions) (*api.ReplicationControllerList, error) - WatchControllers(ctx api.Context, options *api.ListOptions) (watch.Interface, error) - GetController(ctx api.Context, controllerID string, options *metav1.GetOptions) (*api.ReplicationController, error) - CreateController(ctx api.Context, controller *api.ReplicationController) (*api.ReplicationController, error) - UpdateController(ctx api.Context, controller *api.ReplicationController) (*api.ReplicationController, error) - DeleteController(ctx api.Context, controllerID string) error + ListControllers(ctx genericapirequest.Context, options *api.ListOptions) (*api.ReplicationControllerList, error) + WatchControllers(ctx genericapirequest.Context, options *api.ListOptions) (watch.Interface, error) + GetController(ctx genericapirequest.Context, controllerID string, options *metav1.GetOptions) (*api.ReplicationController, error) + CreateController(ctx genericapirequest.Context, controller *api.ReplicationController) (*api.ReplicationController, error) + UpdateController(ctx genericapirequest.Context, controller *api.ReplicationController) (*api.ReplicationController, error) + DeleteController(ctx genericapirequest.Context, controllerID string) error } // storage puts strong typing around storage calls @@ -48,7 +49,7 @@ func NewRegistry(s rest.StandardStorage) Registry { return &storage{s} } -func (s *storage) ListControllers(ctx api.Context, options *api.ListOptions) (*api.ReplicationControllerList, error) { +func (s *storage) ListControllers(ctx genericapirequest.Context, options *api.ListOptions) (*api.ReplicationControllerList, error) { if options != nil && options.FieldSelector != nil && !options.FieldSelector.Empty() { return nil, fmt.Errorf("field selector not supported yet") } @@ -59,11 +60,11 @@ func (s *storage) ListControllers(ctx api.Context, options *api.ListOptions) (*a return obj.(*api.ReplicationControllerList), err } -func (s *storage) WatchControllers(ctx api.Context, options *api.ListOptions) (watch.Interface, error) { +func (s *storage) WatchControllers(ctx genericapirequest.Context, options *api.ListOptions) (watch.Interface, error) { return s.Watch(ctx, options) } -func (s *storage) GetController(ctx api.Context, controllerID string, options *metav1.GetOptions) (*api.ReplicationController, error) { +func (s *storage) GetController(ctx genericapirequest.Context, controllerID string, options *metav1.GetOptions) (*api.ReplicationController, error) { obj, err := s.Get(ctx, controllerID, options) if err != nil { return nil, err @@ -71,7 +72,7 @@ func (s *storage) GetController(ctx api.Context, controllerID string, options *m return obj.(*api.ReplicationController), nil } -func (s *storage) CreateController(ctx api.Context, controller *api.ReplicationController) (*api.ReplicationController, error) { +func (s *storage) CreateController(ctx genericapirequest.Context, controller *api.ReplicationController) (*api.ReplicationController, error) { obj, err := s.Create(ctx, controller) if err != nil { return nil, err @@ -79,7 +80,7 @@ func (s *storage) CreateController(ctx api.Context, controller *api.ReplicationC return obj.(*api.ReplicationController), nil } -func (s *storage) UpdateController(ctx api.Context, controller *api.ReplicationController) (*api.ReplicationController, error) { +func (s *storage) UpdateController(ctx genericapirequest.Context, controller *api.ReplicationController) (*api.ReplicationController, error) { obj, _, err := s.Update(ctx, controller.Name, rest.DefaultUpdatedObjectInfo(controller, api.Scheme)) if err != nil { return nil, err @@ -87,7 +88,7 @@ func (s *storage) UpdateController(ctx api.Context, controller *api.ReplicationC return obj.(*api.ReplicationController), nil } -func (s *storage) DeleteController(ctx api.Context, controllerID string) error { +func (s *storage) DeleteController(ctx genericapirequest.Context, controllerID string) error { _, err := s.Delete(ctx, controllerID, nil) return err } diff --git a/pkg/registry/core/controller/strategy.go b/pkg/registry/core/controller/strategy.go index 4f75bb0660..6f0c12ae65 100644 --- a/pkg/registry/core/controller/strategy.go +++ b/pkg/registry/core/controller/strategy.go @@ -27,6 +27,7 @@ import ( "k8s.io/kubernetes/pkg/api/rest" "k8s.io/kubernetes/pkg/api/validation" "k8s.io/kubernetes/pkg/fields" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/registry/generic" "k8s.io/kubernetes/pkg/runtime" @@ -55,7 +56,7 @@ func (rcStrategy) NamespaceScoped() bool { } // PrepareForCreate clears the status of a replication controller before creation. -func (rcStrategy) PrepareForCreate(ctx api.Context, obj runtime.Object) { +func (rcStrategy) PrepareForCreate(ctx genericapirequest.Context, obj runtime.Object) { controller := obj.(*api.ReplicationController) controller.Status = api.ReplicationControllerStatus{} @@ -63,7 +64,7 @@ func (rcStrategy) PrepareForCreate(ctx api.Context, obj runtime.Object) { } // PrepareForUpdate clears fields that are not allowed to be set by end users on update. -func (rcStrategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { +func (rcStrategy) PrepareForUpdate(ctx genericapirequest.Context, obj, old runtime.Object) { newController := obj.(*api.ReplicationController) oldController := old.(*api.ReplicationController) // update is not allowed to set status @@ -83,7 +84,7 @@ func (rcStrategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { } // Validate validates a new replication controller. -func (rcStrategy) Validate(ctx api.Context, obj runtime.Object) field.ErrorList { +func (rcStrategy) Validate(ctx genericapirequest.Context, obj runtime.Object) field.ErrorList { controller := obj.(*api.ReplicationController) return validation.ValidateReplicationController(controller) } @@ -99,7 +100,7 @@ func (rcStrategy) AllowCreateOnUpdate() bool { } // ValidateUpdate is the default update validation for an end user. -func (rcStrategy) ValidateUpdate(ctx api.Context, obj, old runtime.Object) field.ErrorList { +func (rcStrategy) ValidateUpdate(ctx genericapirequest.Context, obj, old runtime.Object) field.ErrorList { validationErrorList := validation.ValidateReplicationController(obj.(*api.ReplicationController)) updateErrorList := validation.ValidateReplicationControllerUpdate(obj.(*api.ReplicationController), old.(*api.ReplicationController)) return append(validationErrorList, updateErrorList...) @@ -144,13 +145,13 @@ type rcStatusStrategy struct { var StatusStrategy = rcStatusStrategy{Strategy} -func (rcStatusStrategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { +func (rcStatusStrategy) PrepareForUpdate(ctx genericapirequest.Context, obj, old runtime.Object) { newRc := obj.(*api.ReplicationController) oldRc := old.(*api.ReplicationController) // update is not allowed to set spec newRc.Spec = oldRc.Spec } -func (rcStatusStrategy) ValidateUpdate(ctx api.Context, obj, old runtime.Object) field.ErrorList { +func (rcStatusStrategy) ValidateUpdate(ctx genericapirequest.Context, obj, old runtime.Object) field.ErrorList { return validation.ValidateReplicationControllerStatusUpdate(obj.(*api.ReplicationController), old.(*api.ReplicationController)) } diff --git a/pkg/registry/core/controller/strategy_test.go b/pkg/registry/core/controller/strategy_test.go index e86d695305..d3f9d23468 100644 --- a/pkg/registry/core/controller/strategy_test.go +++ b/pkg/registry/core/controller/strategy_test.go @@ -22,10 +22,11 @@ import ( "k8s.io/kubernetes/pkg/api" apitesting "k8s.io/kubernetes/pkg/api/testing" "k8s.io/kubernetes/pkg/apimachinery/registered" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" ) func TestControllerStrategy(t *testing.T) { - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() if !Strategy.NamespaceScoped() { t.Errorf("ReplicationController must be namespace scoped") } @@ -84,7 +85,7 @@ func TestControllerStrategy(t *testing.T) { } func TestControllerStatusStrategy(t *testing.T) { - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() if !StatusStrategy.NamespaceScoped() { t.Errorf("ReplicationController must be namespace scoped") } diff --git a/pkg/registry/core/endpoint/BUILD b/pkg/registry/core/endpoint/BUILD index e5855dc4b1..3b6467d023 100644 --- a/pkg/registry/core/endpoint/BUILD +++ b/pkg/registry/core/endpoint/BUILD @@ -23,6 +23,7 @@ go_library( "//pkg/api/validation:go_default_library", "//pkg/apis/meta/v1:go_default_library", "//pkg/fields:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/labels:go_default_library", "//pkg/registry/generic:go_default_library", "//pkg/runtime:go_default_library", diff --git a/pkg/registry/core/endpoint/registry.go b/pkg/registry/core/endpoint/registry.go index 2fa5aa4e7e..56a0462334 100644 --- a/pkg/registry/core/endpoint/registry.go +++ b/pkg/registry/core/endpoint/registry.go @@ -20,16 +20,17 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/rest" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/watch" ) // Registry is an interface for things that know how to store endpoints. type Registry interface { - ListEndpoints(ctx api.Context, options *api.ListOptions) (*api.EndpointsList, error) - GetEndpoints(ctx api.Context, name string, options *metav1.GetOptions) (*api.Endpoints, error) - WatchEndpoints(ctx api.Context, options *api.ListOptions) (watch.Interface, error) - UpdateEndpoints(ctx api.Context, e *api.Endpoints) error - DeleteEndpoints(ctx api.Context, name string) error + ListEndpoints(ctx genericapirequest.Context, options *api.ListOptions) (*api.EndpointsList, error) + GetEndpoints(ctx genericapirequest.Context, name string, options *metav1.GetOptions) (*api.Endpoints, error) + WatchEndpoints(ctx genericapirequest.Context, options *api.ListOptions) (watch.Interface, error) + UpdateEndpoints(ctx genericapirequest.Context, e *api.Endpoints) error + DeleteEndpoints(ctx genericapirequest.Context, name string) error } // storage puts strong typing around storage calls @@ -43,7 +44,7 @@ func NewRegistry(s rest.StandardStorage) Registry { return &storage{s} } -func (s *storage) ListEndpoints(ctx api.Context, options *api.ListOptions) (*api.EndpointsList, error) { +func (s *storage) ListEndpoints(ctx genericapirequest.Context, options *api.ListOptions) (*api.EndpointsList, error) { obj, err := s.List(ctx, options) if err != nil { return nil, err @@ -51,11 +52,11 @@ func (s *storage) ListEndpoints(ctx api.Context, options *api.ListOptions) (*api return obj.(*api.EndpointsList), nil } -func (s *storage) WatchEndpoints(ctx api.Context, options *api.ListOptions) (watch.Interface, error) { +func (s *storage) WatchEndpoints(ctx genericapirequest.Context, options *api.ListOptions) (watch.Interface, error) { return s.Watch(ctx, options) } -func (s *storage) GetEndpoints(ctx api.Context, name string, options *metav1.GetOptions) (*api.Endpoints, error) { +func (s *storage) GetEndpoints(ctx genericapirequest.Context, name string, options *metav1.GetOptions) (*api.Endpoints, error) { obj, err := s.Get(ctx, name, options) if err != nil { return nil, err @@ -63,12 +64,12 @@ func (s *storage) GetEndpoints(ctx api.Context, name string, options *metav1.Get return obj.(*api.Endpoints), nil } -func (s *storage) UpdateEndpoints(ctx api.Context, endpoints *api.Endpoints) error { +func (s *storage) UpdateEndpoints(ctx genericapirequest.Context, endpoints *api.Endpoints) error { _, _, err := s.Update(ctx, endpoints.Name, rest.DefaultUpdatedObjectInfo(endpoints, api.Scheme)) return err } -func (s *storage) DeleteEndpoints(ctx api.Context, name string) error { +func (s *storage) DeleteEndpoints(ctx genericapirequest.Context, name string) error { _, err := s.Delete(ctx, name, nil) return err } diff --git a/pkg/registry/core/endpoint/strategy.go b/pkg/registry/core/endpoint/strategy.go index a77e868c26..78f744ec5f 100644 --- a/pkg/registry/core/endpoint/strategy.go +++ b/pkg/registry/core/endpoint/strategy.go @@ -23,6 +23,7 @@ import ( endptspkg "k8s.io/kubernetes/pkg/api/endpoints" "k8s.io/kubernetes/pkg/api/validation" "k8s.io/kubernetes/pkg/fields" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/registry/generic" "k8s.io/kubernetes/pkg/runtime" @@ -46,15 +47,15 @@ func (endpointsStrategy) NamespaceScoped() bool { } // PrepareForCreate clears fields that are not allowed to be set by end users on creation. -func (endpointsStrategy) PrepareForCreate(ctx api.Context, obj runtime.Object) { +func (endpointsStrategy) PrepareForCreate(ctx genericapirequest.Context, obj runtime.Object) { } // PrepareForUpdate clears fields that are not allowed to be set by end users on update. -func (endpointsStrategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { +func (endpointsStrategy) PrepareForUpdate(ctx genericapirequest.Context, obj, old runtime.Object) { } // Validate validates a new endpoints. -func (endpointsStrategy) Validate(ctx api.Context, obj runtime.Object) field.ErrorList { +func (endpointsStrategy) Validate(ctx genericapirequest.Context, obj runtime.Object) field.ErrorList { return validation.ValidateEndpoints(obj.(*api.Endpoints)) } @@ -70,7 +71,7 @@ func (endpointsStrategy) AllowCreateOnUpdate() bool { } // ValidateUpdate is the default update validation for an end user. -func (endpointsStrategy) ValidateUpdate(ctx api.Context, obj, old runtime.Object) field.ErrorList { +func (endpointsStrategy) ValidateUpdate(ctx genericapirequest.Context, obj, old runtime.Object) field.ErrorList { errorList := validation.ValidateEndpoints(obj.(*api.Endpoints)) return append(errorList, validation.ValidateEndpointsUpdate(obj.(*api.Endpoints), old.(*api.Endpoints))...) } diff --git a/pkg/registry/core/event/BUILD b/pkg/registry/core/event/BUILD index 2b414d9e82..8b84b1dbaa 100644 --- a/pkg/registry/core/event/BUILD +++ b/pkg/registry/core/event/BUILD @@ -19,6 +19,7 @@ go_library( "//pkg/api:go_default_library", "//pkg/api/validation:go_default_library", "//pkg/fields:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/labels:go_default_library", "//pkg/registry/generic:go_default_library", "//pkg/runtime:go_default_library", diff --git a/pkg/registry/core/event/strategy.go b/pkg/registry/core/event/strategy.go index f97ee888ab..ab2e21bed5 100644 --- a/pkg/registry/core/event/strategy.go +++ b/pkg/registry/core/event/strategy.go @@ -22,6 +22,7 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/validation" "k8s.io/kubernetes/pkg/fields" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/registry/generic" "k8s.io/kubernetes/pkg/runtime" @@ -42,13 +43,13 @@ func (eventStrategy) NamespaceScoped() bool { return true } -func (eventStrategy) PrepareForCreate(ctx api.Context, obj runtime.Object) { +func (eventStrategy) PrepareForCreate(ctx genericapirequest.Context, obj runtime.Object) { } -func (eventStrategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { +func (eventStrategy) PrepareForUpdate(ctx genericapirequest.Context, obj, old runtime.Object) { } -func (eventStrategy) Validate(ctx api.Context, obj runtime.Object) field.ErrorList { +func (eventStrategy) Validate(ctx genericapirequest.Context, obj runtime.Object) field.ErrorList { event := obj.(*api.Event) return validation.ValidateEvent(event) } @@ -61,7 +62,7 @@ func (eventStrategy) AllowCreateOnUpdate() bool { return true } -func (eventStrategy) ValidateUpdate(ctx api.Context, obj, old runtime.Object) field.ErrorList { +func (eventStrategy) ValidateUpdate(ctx genericapirequest.Context, obj, old runtime.Object) field.ErrorList { event := obj.(*api.Event) return validation.ValidateEvent(event) } diff --git a/pkg/registry/core/limitrange/BUILD b/pkg/registry/core/limitrange/BUILD index fae4f402e5..9ba0ac5bc8 100644 --- a/pkg/registry/core/limitrange/BUILD +++ b/pkg/registry/core/limitrange/BUILD @@ -19,6 +19,7 @@ go_library( "//pkg/api:go_default_library", "//pkg/api/validation:go_default_library", "//pkg/fields:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/labels:go_default_library", "//pkg/runtime:go_default_library", "//pkg/storage:go_default_library", diff --git a/pkg/registry/core/limitrange/strategy.go b/pkg/registry/core/limitrange/strategy.go index a34a5b6f62..30d8509bc8 100644 --- a/pkg/registry/core/limitrange/strategy.go +++ b/pkg/registry/core/limitrange/strategy.go @@ -22,6 +22,7 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/validation" "k8s.io/kubernetes/pkg/fields" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/storage" @@ -42,17 +43,17 @@ func (limitrangeStrategy) NamespaceScoped() bool { return true } -func (limitrangeStrategy) PrepareForCreate(ctx api.Context, obj runtime.Object) { +func (limitrangeStrategy) PrepareForCreate(ctx genericapirequest.Context, obj runtime.Object) { limitRange := obj.(*api.LimitRange) if len(limitRange.Name) == 0 { limitRange.Name = string(uuid.NewUUID()) } } -func (limitrangeStrategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { +func (limitrangeStrategy) PrepareForUpdate(ctx genericapirequest.Context, obj, old runtime.Object) { } -func (limitrangeStrategy) Validate(ctx api.Context, obj runtime.Object) field.ErrorList { +func (limitrangeStrategy) Validate(ctx genericapirequest.Context, obj runtime.Object) field.ErrorList { limitRange := obj.(*api.LimitRange) return validation.ValidateLimitRange(limitRange) } @@ -65,7 +66,7 @@ func (limitrangeStrategy) AllowCreateOnUpdate() bool { return true } -func (limitrangeStrategy) ValidateUpdate(ctx api.Context, obj, old runtime.Object) field.ErrorList { +func (limitrangeStrategy) ValidateUpdate(ctx genericapirequest.Context, obj, old runtime.Object) field.ErrorList { limitRange := obj.(*api.LimitRange) return validation.ValidateLimitRange(limitRange) } @@ -78,7 +79,7 @@ func LimitRangeToSelectableFields(limitRange *api.LimitRange) fields.Set { return nil } -func (limitrangeStrategy) Export(api.Context, runtime.Object, bool) error { +func (limitrangeStrategy) Export(genericapirequest.Context, runtime.Object, bool) error { // Copied from OpenShift exporter // TODO: this needs to be fixed // limitrange.Strategy.PrepareForCreate(ctx, obj) diff --git a/pkg/registry/core/namespace/BUILD b/pkg/registry/core/namespace/BUILD index 0dde1f0905..af2e546560 100644 --- a/pkg/registry/core/namespace/BUILD +++ b/pkg/registry/core/namespace/BUILD @@ -22,6 +22,7 @@ go_library( "//pkg/api/validation:go_default_library", "//pkg/apis/meta/v1:go_default_library", "//pkg/fields:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/labels:go_default_library", "//pkg/registry/generic:go_default_library", "//pkg/runtime:go_default_library", @@ -41,5 +42,6 @@ go_test( "//pkg/api/testing:go_default_library", "//pkg/apimachinery/registered:go_default_library", "//pkg/apis/meta/v1:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", ], ) diff --git a/pkg/registry/core/namespace/etcd/BUILD b/pkg/registry/core/namespace/etcd/BUILD index f60a2e6142..bcec0ccb3f 100644 --- a/pkg/registry/core/namespace/etcd/BUILD +++ b/pkg/registry/core/namespace/etcd/BUILD @@ -18,6 +18,7 @@ go_library( "//pkg/api/errors/storage:go_default_library", "//pkg/api/rest:go_default_library", "//pkg/apis/meta/v1:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/registry/core/namespace:go_default_library", "//pkg/registry/generic:go_default_library", "//pkg/registry/generic/registry:go_default_library", @@ -35,6 +36,7 @@ go_test( "//pkg/api:go_default_library", "//pkg/apis/meta/v1:go_default_library", "//pkg/fields:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/labels:go_default_library", "//pkg/registry/generic:go_default_library", "//pkg/registry/registrytest:go_default_library", diff --git a/pkg/registry/core/namespace/etcd/etcd.go b/pkg/registry/core/namespace/etcd/etcd.go index 051e5ea06e..d643b5d7f0 100644 --- a/pkg/registry/core/namespace/etcd/etcd.go +++ b/pkg/registry/core/namespace/etcd/etcd.go @@ -24,6 +24,7 @@ import ( storageerr "k8s.io/kubernetes/pkg/api/errors/storage" "k8s.io/kubernetes/pkg/api/rest" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/registry/core/namespace" "k8s.io/kubernetes/pkg/registry/generic" genericregistry "k8s.io/kubernetes/pkg/registry/generic/registry" @@ -78,7 +79,7 @@ func NewREST(optsGetter generic.RESTOptionsGetter) (*REST, *StatusREST, *Finaliz } // Delete enforces life-cycle rules for namespace termination -func (r *REST) Delete(ctx api.Context, name string, options *api.DeleteOptions) (runtime.Object, error) { +func (r *REST) Delete(ctx genericapirequest.Context, name string, options *api.DeleteOptions) (runtime.Object, error) { nsObj, err := r.Get(ctx, name, &metav1.GetOptions{}) if err != nil { return nil, err @@ -174,12 +175,12 @@ func (r *StatusREST) New() runtime.Object { } // Get retrieves the object from the storage. It is required to support Patch. -func (r *StatusREST) Get(ctx api.Context, name string, options *metav1.GetOptions) (runtime.Object, error) { +func (r *StatusREST) Get(ctx genericapirequest.Context, name string, options *metav1.GetOptions) (runtime.Object, error) { return r.store.Get(ctx, name, options) } // Update alters the status subset of an object. -func (r *StatusREST) Update(ctx api.Context, name string, objInfo rest.UpdatedObjectInfo) (runtime.Object, bool, error) { +func (r *StatusREST) Update(ctx genericapirequest.Context, name string, objInfo rest.UpdatedObjectInfo) (runtime.Object, bool, error) { return r.store.Update(ctx, name, objInfo) } @@ -188,6 +189,6 @@ func (r *FinalizeREST) New() runtime.Object { } // Update alters the status finalizers subset of an object. -func (r *FinalizeREST) Update(ctx api.Context, name string, objInfo rest.UpdatedObjectInfo) (runtime.Object, bool, error) { +func (r *FinalizeREST) Update(ctx genericapirequest.Context, name string, objInfo rest.UpdatedObjectInfo) (runtime.Object, bool, error) { return r.store.Update(ctx, name, objInfo) } diff --git a/pkg/registry/core/namespace/etcd/etcd_test.go b/pkg/registry/core/namespace/etcd/etcd_test.go index 43772c6cec..06ed1c3c64 100644 --- a/pkg/registry/core/namespace/etcd/etcd_test.go +++ b/pkg/registry/core/namespace/etcd/etcd_test.go @@ -22,6 +22,7 @@ import ( "k8s.io/kubernetes/pkg/api" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" "k8s.io/kubernetes/pkg/fields" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/registry/generic" "k8s.io/kubernetes/pkg/registry/registrytest" @@ -65,7 +66,7 @@ func TestCreateSetsFields(t *testing.T) { defer server.Terminate(t) defer storage.Store.DestroyFunc() namespace := validNewNamespace() - ctx := api.NewContext() + ctx := genericapirequest.NewContext() _, err := storage.Create(ctx, namespace) if err != nil { t.Fatalf("unexpected error: %v", err) @@ -141,7 +142,7 @@ func TestDeleteNamespaceWithIncompleteFinalizers(t *testing.T) { defer server.Terminate(t) defer storage.Store.DestroyFunc() key := "namespaces/foo" - ctx := api.NewContext() + ctx := genericapirequest.NewContext() now := metav1.Now() namespace := &api.Namespace{ ObjectMeta: api.ObjectMeta{ @@ -166,7 +167,7 @@ func TestDeleteNamespaceWithCompleteFinalizers(t *testing.T) { defer server.Terminate(t) defer storage.Store.DestroyFunc() key := "namespaces/foo" - ctx := api.NewContext() + ctx := genericapirequest.NewContext() now := metav1.Now() namespace := &api.Namespace{ ObjectMeta: api.ObjectMeta{ diff --git a/pkg/registry/core/namespace/registry.go b/pkg/registry/core/namespace/registry.go index 1b12bf42ca..ef7092c5d0 100644 --- a/pkg/registry/core/namespace/registry.go +++ b/pkg/registry/core/namespace/registry.go @@ -20,17 +20,18 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/rest" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/watch" ) // Registry is an interface implemented by things that know how to store Namespace objects. type Registry interface { - ListNamespaces(ctx api.Context, options *api.ListOptions) (*api.NamespaceList, error) - WatchNamespaces(ctx api.Context, options *api.ListOptions) (watch.Interface, error) - GetNamespace(ctx api.Context, namespaceID string, options *metav1.GetOptions) (*api.Namespace, error) - CreateNamespace(ctx api.Context, namespace *api.Namespace) error - UpdateNamespace(ctx api.Context, namespace *api.Namespace) error - DeleteNamespace(ctx api.Context, namespaceID string) error + ListNamespaces(ctx genericapirequest.Context, options *api.ListOptions) (*api.NamespaceList, error) + WatchNamespaces(ctx genericapirequest.Context, options *api.ListOptions) (watch.Interface, error) + GetNamespace(ctx genericapirequest.Context, namespaceID string, options *metav1.GetOptions) (*api.Namespace, error) + CreateNamespace(ctx genericapirequest.Context, namespace *api.Namespace) error + UpdateNamespace(ctx genericapirequest.Context, namespace *api.Namespace) error + DeleteNamespace(ctx genericapirequest.Context, namespaceID string) error } // storage puts strong typing around storage calls @@ -44,7 +45,7 @@ func NewRegistry(s rest.StandardStorage) Registry { return &storage{s} } -func (s *storage) ListNamespaces(ctx api.Context, options *api.ListOptions) (*api.NamespaceList, error) { +func (s *storage) ListNamespaces(ctx genericapirequest.Context, options *api.ListOptions) (*api.NamespaceList, error) { obj, err := s.List(ctx, options) if err != nil { return nil, err @@ -52,11 +53,11 @@ func (s *storage) ListNamespaces(ctx api.Context, options *api.ListOptions) (*ap return obj.(*api.NamespaceList), nil } -func (s *storage) WatchNamespaces(ctx api.Context, options *api.ListOptions) (watch.Interface, error) { +func (s *storage) WatchNamespaces(ctx genericapirequest.Context, options *api.ListOptions) (watch.Interface, error) { return s.Watch(ctx, options) } -func (s *storage) GetNamespace(ctx api.Context, namespaceName string, options *metav1.GetOptions) (*api.Namespace, error) { +func (s *storage) GetNamespace(ctx genericapirequest.Context, namespaceName string, options *metav1.GetOptions) (*api.Namespace, error) { obj, err := s.Get(ctx, namespaceName, options) if err != nil { return nil, err @@ -64,17 +65,17 @@ func (s *storage) GetNamespace(ctx api.Context, namespaceName string, options *m return obj.(*api.Namespace), nil } -func (s *storage) CreateNamespace(ctx api.Context, namespace *api.Namespace) error { +func (s *storage) CreateNamespace(ctx genericapirequest.Context, namespace *api.Namespace) error { _, err := s.Create(ctx, namespace) return err } -func (s *storage) UpdateNamespace(ctx api.Context, namespace *api.Namespace) error { +func (s *storage) UpdateNamespace(ctx genericapirequest.Context, namespace *api.Namespace) error { _, _, err := s.Update(ctx, namespace.Name, rest.DefaultUpdatedObjectInfo(namespace, api.Scheme)) return err } -func (s *storage) DeleteNamespace(ctx api.Context, namespaceID string) error { +func (s *storage) DeleteNamespace(ctx genericapirequest.Context, namespaceID string) error { _, err := s.Delete(ctx, namespaceID, nil) return err } diff --git a/pkg/registry/core/namespace/strategy.go b/pkg/registry/core/namespace/strategy.go index 3481ea448b..20606aa073 100644 --- a/pkg/registry/core/namespace/strategy.go +++ b/pkg/registry/core/namespace/strategy.go @@ -22,6 +22,7 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/validation" "k8s.io/kubernetes/pkg/fields" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/registry/generic" "k8s.io/kubernetes/pkg/runtime" @@ -45,7 +46,7 @@ func (namespaceStrategy) NamespaceScoped() bool { } // PrepareForCreate clears fields that are not allowed to be set by end users on creation. -func (namespaceStrategy) PrepareForCreate(ctx api.Context, obj runtime.Object) { +func (namespaceStrategy) PrepareForCreate(ctx genericapirequest.Context, obj runtime.Object) { // on create, status is active namespace := obj.(*api.Namespace) namespace.Status = api.NamespaceStatus{ @@ -70,7 +71,7 @@ func (namespaceStrategy) PrepareForCreate(ctx api.Context, obj runtime.Object) { } // PrepareForUpdate clears fields that are not allowed to be set by end users on update. -func (namespaceStrategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { +func (namespaceStrategy) PrepareForUpdate(ctx genericapirequest.Context, obj, old runtime.Object) { newNamespace := obj.(*api.Namespace) oldNamespace := old.(*api.Namespace) newNamespace.Spec.Finalizers = oldNamespace.Spec.Finalizers @@ -78,7 +79,7 @@ func (namespaceStrategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Obje } // Validate validates a new namespace. -func (namespaceStrategy) Validate(ctx api.Context, obj runtime.Object) field.ErrorList { +func (namespaceStrategy) Validate(ctx genericapirequest.Context, obj runtime.Object) field.ErrorList { namespace := obj.(*api.Namespace) return validation.ValidateNamespace(namespace) } @@ -93,7 +94,7 @@ func (namespaceStrategy) AllowCreateOnUpdate() bool { } // ValidateUpdate is the default update validation for an end user. -func (namespaceStrategy) ValidateUpdate(ctx api.Context, obj, old runtime.Object) field.ErrorList { +func (namespaceStrategy) ValidateUpdate(ctx genericapirequest.Context, obj, old runtime.Object) field.ErrorList { errorList := validation.ValidateNamespace(obj.(*api.Namespace)) return append(errorList, validation.ValidateNamespaceUpdate(obj.(*api.Namespace), old.(*api.Namespace))...) } @@ -108,13 +109,13 @@ type namespaceStatusStrategy struct { var StatusStrategy = namespaceStatusStrategy{Strategy} -func (namespaceStatusStrategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { +func (namespaceStatusStrategy) PrepareForUpdate(ctx genericapirequest.Context, obj, old runtime.Object) { newNamespace := obj.(*api.Namespace) oldNamespace := old.(*api.Namespace) newNamespace.Spec = oldNamespace.Spec } -func (namespaceStatusStrategy) ValidateUpdate(ctx api.Context, obj, old runtime.Object) field.ErrorList { +func (namespaceStatusStrategy) ValidateUpdate(ctx genericapirequest.Context, obj, old runtime.Object) field.ErrorList { return validation.ValidateNamespaceStatusUpdate(obj.(*api.Namespace), old.(*api.Namespace)) } @@ -124,12 +125,12 @@ type namespaceFinalizeStrategy struct { var FinalizeStrategy = namespaceFinalizeStrategy{Strategy} -func (namespaceFinalizeStrategy) ValidateUpdate(ctx api.Context, obj, old runtime.Object) field.ErrorList { +func (namespaceFinalizeStrategy) ValidateUpdate(ctx genericapirequest.Context, obj, old runtime.Object) field.ErrorList { return validation.ValidateNamespaceFinalizeUpdate(obj.(*api.Namespace), old.(*api.Namespace)) } // PrepareForUpdate clears fields that are not allowed to be set by end users on update. -func (namespaceFinalizeStrategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { +func (namespaceFinalizeStrategy) PrepareForUpdate(ctx genericapirequest.Context, obj, old runtime.Object) { newNamespace := obj.(*api.Namespace) oldNamespace := old.(*api.Namespace) newNamespace.Status = oldNamespace.Status diff --git a/pkg/registry/core/namespace/strategy_test.go b/pkg/registry/core/namespace/strategy_test.go index a3389aac03..01abfc239e 100644 --- a/pkg/registry/core/namespace/strategy_test.go +++ b/pkg/registry/core/namespace/strategy_test.go @@ -23,10 +23,11 @@ import ( apitesting "k8s.io/kubernetes/pkg/api/testing" "k8s.io/kubernetes/pkg/apimachinery/registered" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" ) func TestNamespaceStrategy(t *testing.T) { - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() if Strategy.NamespaceScoped() { t.Errorf("Namespaces should not be namespace scoped") } @@ -66,7 +67,7 @@ func TestNamespaceStrategy(t *testing.T) { } func TestNamespaceStatusStrategy(t *testing.T) { - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() if StatusStrategy.NamespaceScoped() { t.Errorf("Namespaces should not be namespace scoped") } @@ -100,7 +101,7 @@ func TestNamespaceStatusStrategy(t *testing.T) { } func TestNamespaceFinalizeStrategy(t *testing.T) { - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() if FinalizeStrategy.NamespaceScoped() { t.Errorf("Namespaces should not be namespace scoped") } diff --git a/pkg/registry/core/node/BUILD b/pkg/registry/core/node/BUILD index c73977e8bf..a211f124ef 100644 --- a/pkg/registry/core/node/BUILD +++ b/pkg/registry/core/node/BUILD @@ -23,6 +23,7 @@ go_library( "//pkg/api/validation:go_default_library", "//pkg/apis/meta/v1:go_default_library", "//pkg/fields:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/kubelet/client:go_default_library", "//pkg/labels:go_default_library", "//pkg/registry/generic:go_default_library", diff --git a/pkg/registry/core/node/etcd/BUILD b/pkg/registry/core/node/etcd/BUILD index c54b771a3d..3ce4f9cddf 100644 --- a/pkg/registry/core/node/etcd/BUILD +++ b/pkg/registry/core/node/etcd/BUILD @@ -17,6 +17,7 @@ go_library( "//pkg/api/rest:go_default_library", "//pkg/api/v1:go_default_library", "//pkg/apis/meta/v1:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/kubelet/client:go_default_library", "//pkg/registry/core/node:go_default_library", "//pkg/registry/core/node/rest:go_default_library", diff --git a/pkg/registry/core/node/etcd/etcd.go b/pkg/registry/core/node/etcd/etcd.go index d4b5c902f4..d97fdcb31e 100644 --- a/pkg/registry/core/node/etcd/etcd.go +++ b/pkg/registry/core/node/etcd/etcd.go @@ -25,6 +25,7 @@ import ( "k8s.io/kubernetes/pkg/api/rest" "k8s.io/kubernetes/pkg/api/v1" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/kubelet/client" "k8s.io/kubernetes/pkg/registry/core/node" noderest "k8s.io/kubernetes/pkg/registry/core/node/rest" @@ -58,12 +59,12 @@ func (r *StatusREST) New() runtime.Object { } // Get retrieves the object from the storage. It is required to support Patch. -func (r *StatusREST) Get(ctx api.Context, name string, options *metav1.GetOptions) (runtime.Object, error) { +func (r *StatusREST) Get(ctx genericapirequest.Context, name string, options *metav1.GetOptions) (runtime.Object, error) { return r.store.Get(ctx, name, options) } // Update alters the status subset of an object. -func (r *StatusREST) Update(ctx api.Context, name string, objInfo rest.UpdatedObjectInfo) (runtime.Object, bool, error) { +func (r *StatusREST) Update(ctx genericapirequest.Context, name string, objInfo rest.UpdatedObjectInfo) (runtime.Object, bool, error) { return r.store.Update(ctx, name, objInfo) } @@ -98,7 +99,7 @@ func NewStorage(optsGetter generic.RESTOptionsGetter, kubeletClientConfig client // Build a NodeGetter that looks up nodes using the REST handler nodeGetter := client.NodeGetterFunc(func(nodeName string, options metav1.GetOptions) (*v1.Node, error) { - obj, err := nodeREST.Get(api.NewContext(), nodeName, &options) + obj, err := nodeREST.Get(genericapirequest.NewContext(), nodeName, &options) if err != nil { return nil, err } @@ -133,6 +134,6 @@ func NewStorage(optsGetter generic.RESTOptionsGetter, kubeletClientConfig client var _ = rest.Redirector(&REST{}) // ResourceLocation returns a URL to which one can send traffic for the specified node. -func (r *REST) ResourceLocation(ctx api.Context, id string) (*url.URL, http.RoundTripper, error) { +func (r *REST) ResourceLocation(ctx genericapirequest.Context, id string) (*url.URL, http.RoundTripper, error) { return node.ResourceLocation(r, r.connection, r.proxyTransport, ctx, id) } diff --git a/pkg/registry/core/node/registry.go b/pkg/registry/core/node/registry.go index 3a0ea4b712..0a7d7ca2cb 100644 --- a/pkg/registry/core/node/registry.go +++ b/pkg/registry/core/node/registry.go @@ -20,17 +20,18 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/rest" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/watch" ) // Registry is an interface for things that know how to store node. type Registry interface { - ListNodes(ctx api.Context, options *api.ListOptions) (*api.NodeList, error) - CreateNode(ctx api.Context, node *api.Node) error - UpdateNode(ctx api.Context, node *api.Node) error - GetNode(ctx api.Context, nodeID string, options *metav1.GetOptions) (*api.Node, error) - DeleteNode(ctx api.Context, nodeID string) error - WatchNodes(ctx api.Context, options *api.ListOptions) (watch.Interface, error) + ListNodes(ctx genericapirequest.Context, options *api.ListOptions) (*api.NodeList, error) + CreateNode(ctx genericapirequest.Context, node *api.Node) error + UpdateNode(ctx genericapirequest.Context, node *api.Node) error + GetNode(ctx genericapirequest.Context, nodeID string, options *metav1.GetOptions) (*api.Node, error) + DeleteNode(ctx genericapirequest.Context, nodeID string) error + WatchNodes(ctx genericapirequest.Context, options *api.ListOptions) (watch.Interface, error) } // storage puts strong typing around storage calls @@ -44,7 +45,7 @@ func NewRegistry(s rest.StandardStorage) Registry { return &storage{s} } -func (s *storage) ListNodes(ctx api.Context, options *api.ListOptions) (*api.NodeList, error) { +func (s *storage) ListNodes(ctx genericapirequest.Context, options *api.ListOptions) (*api.NodeList, error) { obj, err := s.List(ctx, options) if err != nil { return nil, err @@ -53,21 +54,21 @@ func (s *storage) ListNodes(ctx api.Context, options *api.ListOptions) (*api.Nod return obj.(*api.NodeList), nil } -func (s *storage) CreateNode(ctx api.Context, node *api.Node) error { +func (s *storage) CreateNode(ctx genericapirequest.Context, node *api.Node) error { _, err := s.Create(ctx, node) return err } -func (s *storage) UpdateNode(ctx api.Context, node *api.Node) error { +func (s *storage) UpdateNode(ctx genericapirequest.Context, node *api.Node) error { _, _, err := s.Update(ctx, node.Name, rest.DefaultUpdatedObjectInfo(node, api.Scheme)) return err } -func (s *storage) WatchNodes(ctx api.Context, options *api.ListOptions) (watch.Interface, error) { +func (s *storage) WatchNodes(ctx genericapirequest.Context, options *api.ListOptions) (watch.Interface, error) { return s.Watch(ctx, options) } -func (s *storage) GetNode(ctx api.Context, name string, options *metav1.GetOptions) (*api.Node, error) { +func (s *storage) GetNode(ctx genericapirequest.Context, name string, options *metav1.GetOptions) (*api.Node, error) { obj, err := s.Get(ctx, name, options) if err != nil { return nil, err @@ -75,7 +76,7 @@ func (s *storage) GetNode(ctx api.Context, name string, options *metav1.GetOptio return obj.(*api.Node), nil } -func (s *storage) DeleteNode(ctx api.Context, name string) error { +func (s *storage) DeleteNode(ctx genericapirequest.Context, name string) error { _, err := s.Delete(ctx, name, nil) return err } diff --git a/pkg/registry/core/node/rest/BUILD b/pkg/registry/core/node/rest/BUILD index 26b8f3fb17..dbcce9b413 100644 --- a/pkg/registry/core/node/rest/BUILD +++ b/pkg/registry/core/node/rest/BUILD @@ -15,6 +15,7 @@ go_library( "//pkg/api:go_default_library", "//pkg/api/rest:go_default_library", "//pkg/capabilities:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/kubelet/client:go_default_library", "//pkg/registry/core/node:go_default_library", "//pkg/registry/generic/registry:go_default_library", diff --git a/pkg/registry/core/node/rest/proxy.go b/pkg/registry/core/node/rest/proxy.go index c4dc023071..fea558585d 100644 --- a/pkg/registry/core/node/rest/proxy.go +++ b/pkg/registry/core/node/rest/proxy.go @@ -25,6 +25,7 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/rest" "k8s.io/kubernetes/pkg/capabilities" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/kubelet/client" "k8s.io/kubernetes/pkg/registry/core/node" genericregistry "k8s.io/kubernetes/pkg/registry/generic/registry" @@ -60,7 +61,7 @@ func (r *ProxyREST) NewConnectOptions() (runtime.Object, bool, string) { } // Connect returns a handler for the node proxy -func (r *ProxyREST) Connect(ctx api.Context, id string, opts runtime.Object, responder rest.Responder) (http.Handler, error) { +func (r *ProxyREST) Connect(ctx genericapirequest.Context, id string, opts runtime.Object, responder rest.Responder) (http.Handler, error) { proxyOpts, ok := opts.(*api.NodeProxyOptions) if !ok { return nil, fmt.Errorf("Invalid options object: %#v", opts) diff --git a/pkg/registry/core/node/strategy.go b/pkg/registry/core/node/strategy.go index d068d4adee..33a83ea0c4 100644 --- a/pkg/registry/core/node/strategy.go +++ b/pkg/registry/core/node/strategy.go @@ -27,6 +27,7 @@ import ( "k8s.io/kubernetes/pkg/api/validation" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" "k8s.io/kubernetes/pkg/fields" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/kubelet/client" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/registry/generic" @@ -58,20 +59,20 @@ func (nodeStrategy) AllowCreateOnUpdate() bool { } // PrepareForCreate clears fields that are not allowed to be set by end users on creation. -func (nodeStrategy) PrepareForCreate(ctx api.Context, obj runtime.Object) { +func (nodeStrategy) PrepareForCreate(ctx genericapirequest.Context, obj runtime.Object) { _ = obj.(*api.Node) // Nodes allow *all* fields, including status, to be set on create. } // PrepareForUpdate clears fields that are not allowed to be set by end users on update. -func (nodeStrategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { +func (nodeStrategy) PrepareForUpdate(ctx genericapirequest.Context, obj, old runtime.Object) { newNode := obj.(*api.Node) oldNode := old.(*api.Node) newNode.Status = oldNode.Status } // Validate validates a new node. -func (nodeStrategy) Validate(ctx api.Context, obj runtime.Object) field.ErrorList { +func (nodeStrategy) Validate(ctx genericapirequest.Context, obj runtime.Object) field.ErrorList { node := obj.(*api.Node) return validation.ValidateNode(node) } @@ -81,7 +82,7 @@ func (nodeStrategy) Canonicalize(obj runtime.Object) { } // ValidateUpdate is the default update validation for an end user. -func (nodeStrategy) ValidateUpdate(ctx api.Context, obj, old runtime.Object) field.ErrorList { +func (nodeStrategy) ValidateUpdate(ctx genericapirequest.Context, obj, old runtime.Object) field.ErrorList { errorList := validation.ValidateNode(obj.(*api.Node)) return append(errorList, validation.ValidateNodeUpdate(obj.(*api.Node), old.(*api.Node))...) } @@ -90,7 +91,7 @@ func (nodeStrategy) AllowUnconditionalUpdate() bool { return true } -func (ns nodeStrategy) Export(ctx api.Context, obj runtime.Object, exact bool) error { +func (ns nodeStrategy) Export(ctx genericapirequest.Context, obj runtime.Object, exact bool) error { n, ok := obj.(*api.Node) if !ok { // unexpected programmer error @@ -112,18 +113,18 @@ type nodeStatusStrategy struct { var StatusStrategy = nodeStatusStrategy{Strategy} -func (nodeStatusStrategy) PrepareForCreate(ctx api.Context, obj runtime.Object) { +func (nodeStatusStrategy) PrepareForCreate(ctx genericapirequest.Context, obj runtime.Object) { _ = obj.(*api.Node) // Nodes allow *all* fields, including status, to be set on create. } -func (nodeStatusStrategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { +func (nodeStatusStrategy) PrepareForUpdate(ctx genericapirequest.Context, obj, old runtime.Object) { newNode := obj.(*api.Node) oldNode := old.(*api.Node) newNode.Spec = oldNode.Spec } -func (nodeStatusStrategy) ValidateUpdate(ctx api.Context, obj, old runtime.Object) field.ErrorList { +func (nodeStatusStrategy) ValidateUpdate(ctx genericapirequest.Context, obj, old runtime.Object) field.ErrorList { return validation.ValidateNodeUpdate(obj.(*api.Node), old.(*api.Node)) } @@ -133,7 +134,7 @@ func (nodeStatusStrategy) Canonicalize(obj runtime.Object) { // ResourceGetter is an interface for retrieving resources by ResourceLocation. type ResourceGetter interface { - Get(api.Context, string, *metav1.GetOptions) (runtime.Object, error) + Get(genericapirequest.Context, string, *metav1.GetOptions) (runtime.Object, error) } // NodeToSelectableFields returns a field set that represents the object. @@ -171,13 +172,13 @@ func NodeNameTriggerFunc(obj runtime.Object) []pkgstorage.MatchValue { } // ResourceLocation returns an URL and transport which one can use to send traffic for the specified node. -func ResourceLocation(getter ResourceGetter, connection client.ConnectionInfoGetter, proxyTransport http.RoundTripper, ctx api.Context, id string) (*url.URL, http.RoundTripper, error) { +func ResourceLocation(getter ResourceGetter, connection client.ConnectionInfoGetter, proxyTransport http.RoundTripper, ctx genericapirequest.Context, id string) (*url.URL, http.RoundTripper, error) { schemeReq, name, portReq, valid := utilnet.SplitSchemeNamePort(id) if !valid { return nil, nil, errors.NewBadRequest(fmt.Sprintf("invalid node request %q", id)) } - info, err := connection.GetConnectionInfo(ctx, types.NodeName(name)) + info, err := connection.GetConnectionInfo(types.NodeName(name)) if err != nil { return nil, nil, err } diff --git a/pkg/registry/core/persistentvolume/BUILD b/pkg/registry/core/persistentvolume/BUILD index 4e32ce9d9d..16ed256e6f 100644 --- a/pkg/registry/core/persistentvolume/BUILD +++ b/pkg/registry/core/persistentvolume/BUILD @@ -19,6 +19,7 @@ go_library( "//pkg/api:go_default_library", "//pkg/api/validation:go_default_library", "//pkg/fields:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/labels:go_default_library", "//pkg/registry/generic:go_default_library", "//pkg/runtime:go_default_library", diff --git a/pkg/registry/core/persistentvolume/etcd/BUILD b/pkg/registry/core/persistentvolume/etcd/BUILD index 08616ed6f4..99c7b050c3 100644 --- a/pkg/registry/core/persistentvolume/etcd/BUILD +++ b/pkg/registry/core/persistentvolume/etcd/BUILD @@ -16,6 +16,7 @@ go_library( "//pkg/api:go_default_library", "//pkg/api/rest:go_default_library", "//pkg/apis/meta/v1:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/registry/core/persistentvolume:go_default_library", "//pkg/registry/generic:go_default_library", "//pkg/registry/generic/registry:go_default_library", @@ -34,6 +35,7 @@ go_test( "//pkg/api/rest:go_default_library", "//pkg/apis/meta/v1:go_default_library", "//pkg/fields:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/labels:go_default_library", "//pkg/registry/generic:go_default_library", "//pkg/registry/registrytest:go_default_library", diff --git a/pkg/registry/core/persistentvolume/etcd/etcd.go b/pkg/registry/core/persistentvolume/etcd/etcd.go index adefdad930..9ce1109689 100644 --- a/pkg/registry/core/persistentvolume/etcd/etcd.go +++ b/pkg/registry/core/persistentvolume/etcd/etcd.go @@ -20,6 +20,7 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/rest" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/registry/core/persistentvolume" "k8s.io/kubernetes/pkg/registry/generic" genericregistry "k8s.io/kubernetes/pkg/registry/generic/registry" @@ -67,11 +68,11 @@ func (r *StatusREST) New() runtime.Object { } // Get retrieves the object from the storage. It is required to support Patch. -func (r *StatusREST) Get(ctx api.Context, name string, options *metav1.GetOptions) (runtime.Object, error) { +func (r *StatusREST) Get(ctx genericapirequest.Context, name string, options *metav1.GetOptions) (runtime.Object, error) { return r.store.Get(ctx, name, options) } // Update alters the status subset of an object. -func (r *StatusREST) Update(ctx api.Context, name string, objInfo rest.UpdatedObjectInfo) (runtime.Object, bool, error) { +func (r *StatusREST) Update(ctx genericapirequest.Context, name string, objInfo rest.UpdatedObjectInfo) (runtime.Object, bool, error) { return r.store.Update(ctx, name, objInfo) } diff --git a/pkg/registry/core/persistentvolume/etcd/etcd_test.go b/pkg/registry/core/persistentvolume/etcd/etcd_test.go index 7f9c23932c..dae234ad68 100644 --- a/pkg/registry/core/persistentvolume/etcd/etcd_test.go +++ b/pkg/registry/core/persistentvolume/etcd/etcd_test.go @@ -24,6 +24,7 @@ import ( "k8s.io/kubernetes/pkg/api/rest" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" "k8s.io/kubernetes/pkg/fields" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/registry/generic" "k8s.io/kubernetes/pkg/registry/registrytest" @@ -162,7 +163,7 @@ func TestUpdateStatus(t *testing.T) { storage, statusStorage, server := newStorage(t) defer server.Terminate(t) defer storage.Store.DestroyFunc() - ctx := api.NewContext() + ctx := genericapirequest.NewContext() key, _ := storage.KeyFunc(ctx, "foo") pvStart := validNewPersistentVolume("foo") err := storage.Storage.Create(ctx, key, pvStart, nil, 0) diff --git a/pkg/registry/core/persistentvolume/strategy.go b/pkg/registry/core/persistentvolume/strategy.go index 3a086600d0..20f1ad47db 100644 --- a/pkg/registry/core/persistentvolume/strategy.go +++ b/pkg/registry/core/persistentvolume/strategy.go @@ -22,6 +22,7 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/validation" "k8s.io/kubernetes/pkg/fields" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/registry/generic" "k8s.io/kubernetes/pkg/runtime" @@ -44,12 +45,12 @@ func (persistentvolumeStrategy) NamespaceScoped() bool { } // ResetBeforeCreate clears the Status field which is not allowed to be set by end users on creation. -func (persistentvolumeStrategy) PrepareForCreate(ctx api.Context, obj runtime.Object) { +func (persistentvolumeStrategy) PrepareForCreate(ctx genericapirequest.Context, obj runtime.Object) { pv := obj.(*api.PersistentVolume) pv.Status = api.PersistentVolumeStatus{} } -func (persistentvolumeStrategy) Validate(ctx api.Context, obj runtime.Object) field.ErrorList { +func (persistentvolumeStrategy) Validate(ctx genericapirequest.Context, obj runtime.Object) field.ErrorList { persistentvolume := obj.(*api.PersistentVolume) return validation.ValidatePersistentVolume(persistentvolume) } @@ -63,13 +64,13 @@ func (persistentvolumeStrategy) AllowCreateOnUpdate() bool { } // PrepareForUpdate sets the Status fields which is not allowed to be set by an end user updating a PV -func (persistentvolumeStrategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { +func (persistentvolumeStrategy) PrepareForUpdate(ctx genericapirequest.Context, obj, old runtime.Object) { newPv := obj.(*api.PersistentVolume) oldPv := old.(*api.PersistentVolume) newPv.Status = oldPv.Status } -func (persistentvolumeStrategy) ValidateUpdate(ctx api.Context, obj, old runtime.Object) field.ErrorList { +func (persistentvolumeStrategy) ValidateUpdate(ctx genericapirequest.Context, obj, old runtime.Object) field.ErrorList { errorList := validation.ValidatePersistentVolume(obj.(*api.PersistentVolume)) return append(errorList, validation.ValidatePersistentVolumeUpdate(obj.(*api.PersistentVolume), old.(*api.PersistentVolume))...) } @@ -85,13 +86,13 @@ type persistentvolumeStatusStrategy struct { var StatusStrategy = persistentvolumeStatusStrategy{Strategy} // PrepareForUpdate sets the Spec field which is not allowed to be changed when updating a PV's Status -func (persistentvolumeStatusStrategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { +func (persistentvolumeStatusStrategy) PrepareForUpdate(ctx genericapirequest.Context, obj, old runtime.Object) { newPv := obj.(*api.PersistentVolume) oldPv := old.(*api.PersistentVolume) newPv.Spec = oldPv.Spec } -func (persistentvolumeStatusStrategy) ValidateUpdate(ctx api.Context, obj, old runtime.Object) field.ErrorList { +func (persistentvolumeStatusStrategy) ValidateUpdate(ctx genericapirequest.Context, obj, old runtime.Object) field.ErrorList { return validation.ValidatePersistentVolumeStatusUpdate(obj.(*api.PersistentVolume), old.(*api.PersistentVolume)) } diff --git a/pkg/registry/core/persistentvolumeclaim/BUILD b/pkg/registry/core/persistentvolumeclaim/BUILD index 4e32ce9d9d..16ed256e6f 100644 --- a/pkg/registry/core/persistentvolumeclaim/BUILD +++ b/pkg/registry/core/persistentvolumeclaim/BUILD @@ -19,6 +19,7 @@ go_library( "//pkg/api:go_default_library", "//pkg/api/validation:go_default_library", "//pkg/fields:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/labels:go_default_library", "//pkg/registry/generic:go_default_library", "//pkg/runtime:go_default_library", diff --git a/pkg/registry/core/persistentvolumeclaim/etcd/BUILD b/pkg/registry/core/persistentvolumeclaim/etcd/BUILD index 87755128b3..8bc9cb89c5 100644 --- a/pkg/registry/core/persistentvolumeclaim/etcd/BUILD +++ b/pkg/registry/core/persistentvolumeclaim/etcd/BUILD @@ -16,6 +16,7 @@ go_library( "//pkg/api:go_default_library", "//pkg/api/rest:go_default_library", "//pkg/apis/meta/v1:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/registry/core/persistentvolumeclaim:go_default_library", "//pkg/registry/generic:go_default_library", "//pkg/registry/generic/registry:go_default_library", @@ -34,6 +35,7 @@ go_test( "//pkg/api/rest:go_default_library", "//pkg/apis/meta/v1:go_default_library", "//pkg/fields:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/labels:go_default_library", "//pkg/registry/generic:go_default_library", "//pkg/registry/registrytest:go_default_library", diff --git a/pkg/registry/core/persistentvolumeclaim/etcd/etcd.go b/pkg/registry/core/persistentvolumeclaim/etcd/etcd.go index 8e3171e4ae..4dd8cd56f1 100644 --- a/pkg/registry/core/persistentvolumeclaim/etcd/etcd.go +++ b/pkg/registry/core/persistentvolumeclaim/etcd/etcd.go @@ -20,6 +20,7 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/rest" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/registry/core/persistentvolumeclaim" "k8s.io/kubernetes/pkg/registry/generic" genericregistry "k8s.io/kubernetes/pkg/registry/generic/registry" @@ -67,11 +68,11 @@ func (r *StatusREST) New() runtime.Object { } // Get retrieves the object from the storage. It is required to support Patch. -func (r *StatusREST) Get(ctx api.Context, name string, options *metav1.GetOptions) (runtime.Object, error) { +func (r *StatusREST) Get(ctx genericapirequest.Context, name string, options *metav1.GetOptions) (runtime.Object, error) { return r.store.Get(ctx, name, options) } // Update alters the status subset of an object. -func (r *StatusREST) Update(ctx api.Context, name string, objInfo rest.UpdatedObjectInfo) (runtime.Object, bool, error) { +func (r *StatusREST) Update(ctx genericapirequest.Context, name string, objInfo rest.UpdatedObjectInfo) (runtime.Object, bool, error) { return r.store.Update(ctx, name, objInfo) } diff --git a/pkg/registry/core/persistentvolumeclaim/etcd/etcd_test.go b/pkg/registry/core/persistentvolumeclaim/etcd/etcd_test.go index afd9369235..81d538fc45 100644 --- a/pkg/registry/core/persistentvolumeclaim/etcd/etcd_test.go +++ b/pkg/registry/core/persistentvolumeclaim/etcd/etcd_test.go @@ -24,6 +24,7 @@ import ( "k8s.io/kubernetes/pkg/api/rest" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" "k8s.io/kubernetes/pkg/fields" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/registry/generic" "k8s.io/kubernetes/pkg/registry/registrytest" @@ -152,7 +153,7 @@ func TestUpdateStatus(t *testing.T) { storage, statusStorage, server := newStorage(t) defer server.Terminate(t) defer storage.Store.DestroyFunc() - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() key, _ := storage.KeyFunc(ctx, "foo") pvcStart := validNewPersistentVolumeClaim("foo", api.NamespaceDefault) diff --git a/pkg/registry/core/persistentvolumeclaim/strategy.go b/pkg/registry/core/persistentvolumeclaim/strategy.go index b5a42f60d0..0d38d06671 100644 --- a/pkg/registry/core/persistentvolumeclaim/strategy.go +++ b/pkg/registry/core/persistentvolumeclaim/strategy.go @@ -22,6 +22,7 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/validation" "k8s.io/kubernetes/pkg/fields" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/registry/generic" "k8s.io/kubernetes/pkg/runtime" @@ -44,12 +45,12 @@ func (persistentvolumeclaimStrategy) NamespaceScoped() bool { } // PrepareForCreate clears the Status field which is not allowed to be set by end users on creation. -func (persistentvolumeclaimStrategy) PrepareForCreate(ctx api.Context, obj runtime.Object) { +func (persistentvolumeclaimStrategy) PrepareForCreate(ctx genericapirequest.Context, obj runtime.Object) { pv := obj.(*api.PersistentVolumeClaim) pv.Status = api.PersistentVolumeClaimStatus{} } -func (persistentvolumeclaimStrategy) Validate(ctx api.Context, obj runtime.Object) field.ErrorList { +func (persistentvolumeclaimStrategy) Validate(ctx genericapirequest.Context, obj runtime.Object) field.ErrorList { pvc := obj.(*api.PersistentVolumeClaim) return validation.ValidatePersistentVolumeClaim(pvc) } @@ -63,13 +64,13 @@ func (persistentvolumeclaimStrategy) AllowCreateOnUpdate() bool { } // PrepareForUpdate sets the Status field which is not allowed to be set by end users on update -func (persistentvolumeclaimStrategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { +func (persistentvolumeclaimStrategy) PrepareForUpdate(ctx genericapirequest.Context, obj, old runtime.Object) { newPvc := obj.(*api.PersistentVolumeClaim) oldPvc := old.(*api.PersistentVolumeClaim) newPvc.Status = oldPvc.Status } -func (persistentvolumeclaimStrategy) ValidateUpdate(ctx api.Context, obj, old runtime.Object) field.ErrorList { +func (persistentvolumeclaimStrategy) ValidateUpdate(ctx genericapirequest.Context, obj, old runtime.Object) field.ErrorList { errorList := validation.ValidatePersistentVolumeClaim(obj.(*api.PersistentVolumeClaim)) return append(errorList, validation.ValidatePersistentVolumeClaimUpdate(obj.(*api.PersistentVolumeClaim), old.(*api.PersistentVolumeClaim))...) } @@ -85,13 +86,13 @@ type persistentvolumeclaimStatusStrategy struct { var StatusStrategy = persistentvolumeclaimStatusStrategy{Strategy} // PrepareForUpdate sets the Spec field which is not allowed to be changed when updating a PV's Status -func (persistentvolumeclaimStatusStrategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { +func (persistentvolumeclaimStatusStrategy) PrepareForUpdate(ctx genericapirequest.Context, obj, old runtime.Object) { newPv := obj.(*api.PersistentVolumeClaim) oldPv := old.(*api.PersistentVolumeClaim) newPv.Spec = oldPv.Spec } -func (persistentvolumeclaimStatusStrategy) ValidateUpdate(ctx api.Context, obj, old runtime.Object) field.ErrorList { +func (persistentvolumeclaimStatusStrategy) ValidateUpdate(ctx genericapirequest.Context, obj, old runtime.Object) field.ErrorList { return validation.ValidatePersistentVolumeClaimStatusUpdate(obj.(*api.PersistentVolumeClaim), old.(*api.PersistentVolumeClaim)) } diff --git a/pkg/registry/core/pod/BUILD b/pkg/registry/core/pod/BUILD index df15270951..956c08bc92 100644 --- a/pkg/registry/core/pod/BUILD +++ b/pkg/registry/core/pod/BUILD @@ -21,6 +21,7 @@ go_library( "//pkg/api/validation:go_default_library", "//pkg/apis/meta/v1:go_default_library", "//pkg/fields:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/kubelet/client:go_default_library", "//pkg/labels:go_default_library", "//pkg/registry/generic:go_default_library", @@ -44,6 +45,7 @@ go_test( "//pkg/apimachinery/registered:go_default_library", "//pkg/apis/meta/v1:go_default_library", "//pkg/fields:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/labels:go_default_library", "//pkg/runtime:go_default_library", ], diff --git a/pkg/registry/core/pod/etcd/BUILD b/pkg/registry/core/pod/etcd/BUILD index 37802e4ecc..b06926c0a7 100644 --- a/pkg/registry/core/pod/etcd/BUILD +++ b/pkg/registry/core/pod/etcd/BUILD @@ -25,6 +25,7 @@ go_library( "//pkg/apis/policy:go_default_library", "//pkg/client/clientset_generated/internalclientset/typed/policy/internalversion:go_default_library", "//pkg/client/retry:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/kubelet/client:go_default_library", "//pkg/labels:go_default_library", "//pkg/registry/core/pod:go_default_library", @@ -49,6 +50,7 @@ go_test( "//pkg/api/rest:go_default_library", "//pkg/apis/meta/v1:go_default_library", "//pkg/fields:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/labels:go_default_library", "//pkg/registry/generic:go_default_library", "//pkg/registry/registrytest:go_default_library", diff --git a/pkg/registry/core/pod/etcd/etcd.go b/pkg/registry/core/pod/etcd/etcd.go index 118135a7b1..9e3c9d9526 100644 --- a/pkg/registry/core/pod/etcd/etcd.go +++ b/pkg/registry/core/pod/etcd/etcd.go @@ -28,6 +28,7 @@ import ( "k8s.io/kubernetes/pkg/api/validation" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" policyclient "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/policy/internalversion" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/kubelet/client" "k8s.io/kubernetes/pkg/registry/core/pod" podrest "k8s.io/kubernetes/pkg/registry/core/pod/rest" @@ -97,7 +98,7 @@ func NewStorage(optsGetter generic.RESTOptionsGetter, k client.ConnectionInfoGet var _ = rest.Redirector(&REST{}) // ResourceLocation returns a pods location from its HostIP -func (r *REST) ResourceLocation(ctx api.Context, name string) (*url.URL, http.RoundTripper, error) { +func (r *REST) ResourceLocation(ctx genericapirequest.Context, name string) (*url.URL, http.RoundTripper, error) { return pod.ResourceLocation(r, r.proxyTransport, ctx, name) } @@ -114,7 +115,7 @@ func (r *BindingREST) New() runtime.Object { var _ = rest.Creater(&BindingREST{}) // Create ensures a pod is bound to a specific host. -func (r *BindingREST) Create(ctx api.Context, obj runtime.Object) (out runtime.Object, err error) { +func (r *BindingREST) Create(ctx genericapirequest.Context, obj runtime.Object) (out runtime.Object, err error) { binding := obj.(*api.Binding) // TODO: move me to a binding strategy @@ -130,7 +131,7 @@ func (r *BindingREST) Create(ctx api.Context, obj runtime.Object) (out runtime.O // setPodHostAndAnnotations sets the given pod's host to 'machine' if and only if it was // previously 'oldMachine' and merges the provided annotations with those of the pod. // Returns the current state of the pod, or an error. -func (r *BindingREST) setPodHostAndAnnotations(ctx api.Context, podID, oldMachine, machine string, annotations map[string]string) (finalPod *api.Pod, err error) { +func (r *BindingREST) setPodHostAndAnnotations(ctx genericapirequest.Context, podID, oldMachine, machine string, annotations map[string]string) (finalPod *api.Pod, err error) { podKey, err := r.store.KeyFunc(ctx, podID) if err != nil { return nil, err @@ -164,7 +165,7 @@ func (r *BindingREST) setPodHostAndAnnotations(ctx api.Context, podID, oldMachin } // assignPod assigns the given pod to the given machine. -func (r *BindingREST) assignPod(ctx api.Context, podID string, machine string, annotations map[string]string) (err error) { +func (r *BindingREST) assignPod(ctx genericapirequest.Context, podID string, machine string, annotations map[string]string) (err error) { if _, err = r.setPodHostAndAnnotations(ctx, podID, "", machine, annotations); err != nil { err = storeerr.InterpretGetError(err, api.Resource("pods"), podID) err = storeerr.InterpretUpdateError(err, api.Resource("pods"), podID) @@ -186,11 +187,11 @@ func (r *StatusREST) New() runtime.Object { } // Get retrieves the object from the storage. It is required to support Patch. -func (r *StatusREST) Get(ctx api.Context, name string, options *metav1.GetOptions) (runtime.Object, error) { +func (r *StatusREST) Get(ctx genericapirequest.Context, name string, options *metav1.GetOptions) (runtime.Object, error) { return r.store.Get(ctx, name, options) } // Update alters the status subset of an object. -func (r *StatusREST) Update(ctx api.Context, name string, objInfo rest.UpdatedObjectInfo) (runtime.Object, bool, error) { +func (r *StatusREST) Update(ctx genericapirequest.Context, name string, objInfo rest.UpdatedObjectInfo) (runtime.Object, bool, error) { return r.store.Update(ctx, name, objInfo) } diff --git a/pkg/registry/core/pod/etcd/etcd_test.go b/pkg/registry/core/pod/etcd/etcd_test.go index 80a9a181de..3c2957699d 100644 --- a/pkg/registry/core/pod/etcd/etcd_test.go +++ b/pkg/registry/core/pod/etcd/etcd_test.go @@ -27,6 +27,7 @@ import ( "k8s.io/kubernetes/pkg/api/rest" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" "k8s.io/kubernetes/pkg/fields" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/registry/generic" "k8s.io/kubernetes/pkg/registry/registrytest" @@ -166,7 +167,7 @@ func newFailDeleteStorage(t *testing.T, called *bool) (*REST, *etcdtesting.EtcdT func TestIgnoreDeleteNotFound(t *testing.T) { pod := validNewPod() - testContext := api.WithNamespace(api.NewContext(), api.NamespaceDefault) + testContext := genericapirequest.WithNamespace(genericapirequest.NewContext(), api.NamespaceDefault) called := false registry, server := newFailDeleteStorage(t, &called) defer server.Terminate(t) @@ -216,11 +217,11 @@ func TestCreateSetsFields(t *testing.T) { defer server.Terminate(t) defer storage.Store.DestroyFunc() pod := validNewPod() - _, err := storage.Create(api.NewDefaultContext(), pod) + _, err := storage.Create(genericapirequest.NewDefaultContext(), pod) if err != nil { t.Fatalf("unexpected error: %v", err) } - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() object, err := storage.Get(ctx, "foo", &metav1.GetOptions{}) if err != nil { t.Errorf("unexpected error: %v", err) @@ -326,7 +327,7 @@ func TestResourceLocation(t *testing.T) { }, } - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() for _, tc := range testCases { storage, _, _, server := newStorage(t) key, _ := storage.KeyFunc(ctx, tc.pod.Name) @@ -335,7 +336,7 @@ func TestResourceLocation(t *testing.T) { } redirector := rest.Redirector(storage) - location, _, err := redirector.ResourceLocation(api.NewDefaultContext(), tc.query) + location, _, err := redirector.ResourceLocation(genericapirequest.NewDefaultContext(), tc.query) if err != nil { t.Errorf("Unexpected error: %v", err) } @@ -397,7 +398,7 @@ func TestEtcdCreate(t *testing.T) { storage, bindingStorage, _, server := newStorage(t) defer server.Terminate(t) defer storage.Store.DestroyFunc() - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() _, err := storage.Create(ctx, validNewPod()) if err != nil { t.Fatalf("unexpected error: %v", err) @@ -424,7 +425,7 @@ func TestEtcdCreateBindingNoPod(t *testing.T) { storage, bindingStorage, _, server := newStorage(t) defer server.Terminate(t) defer storage.Store.DestroyFunc() - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() // Assume that a pod has undergone the following: // - Create (apiserver) @@ -456,7 +457,7 @@ func TestEtcdCreateFailsWithoutNamespace(t *testing.T) { defer storage.Store.DestroyFunc() pod := validNewPod() pod.Namespace = "" - _, err := storage.Create(api.NewContext(), pod) + _, err := storage.Create(genericapirequest.NewContext(), pod) // Accept "namespace" or "Namespace". if err == nil || !strings.Contains(err.Error(), "amespace") { t.Fatalf("expected error that namespace was missing from context, got: %v", err) @@ -467,7 +468,7 @@ func TestEtcdCreateWithContainersNotFound(t *testing.T) { storage, bindingStorage, _, server := newStorage(t) defer server.Terminate(t) defer storage.Store.DestroyFunc() - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() _, err := storage.Create(ctx, validNewPod()) if err != nil { t.Fatalf("unexpected error: %v", err) @@ -501,7 +502,7 @@ func TestEtcdCreateWithConflict(t *testing.T) { storage, bindingStorage, _, server := newStorage(t) defer server.Terminate(t) defer storage.Store.DestroyFunc() - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() _, err := storage.Create(ctx, validNewPod()) if err != nil { @@ -532,7 +533,7 @@ func TestEtcdCreateWithExistingContainers(t *testing.T) { storage, bindingStorage, _, server := newStorage(t) defer server.Terminate(t) defer storage.Store.DestroyFunc() - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() _, err := storage.Create(ctx, validNewPod()) if err != nil { t.Fatalf("unexpected error: %v", err) @@ -554,7 +555,7 @@ func TestEtcdCreateWithExistingContainers(t *testing.T) { } func TestEtcdCreateBinding(t *testing.T) { - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() testCases := map[string]struct { binding api.Binding @@ -615,7 +616,7 @@ func TestEtcdUpdateNotScheduled(t *testing.T) { storage, _, _, server := newStorage(t) defer server.Terminate(t) defer storage.Store.DestroyFunc() - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() if _, err := storage.Create(ctx, validNewPod()); err != nil { t.Fatalf("unexpected error: %v", err) @@ -641,7 +642,7 @@ func TestEtcdUpdateScheduled(t *testing.T) { storage, _, _, server := newStorage(t) defer server.Terminate(t) defer storage.Store.DestroyFunc() - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() key, _ := storage.KeyFunc(ctx, "foo") err := storage.Storage.Create(ctx, key, &api.Pod{ @@ -712,7 +713,7 @@ func TestEtcdUpdateStatus(t *testing.T) { storage, _, statusStorage, server := newStorage(t) defer server.Terminate(t) defer storage.Store.DestroyFunc() - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() key, _ := storage.KeyFunc(ctx, "foo") podStart := api.Pod{ diff --git a/pkg/registry/core/pod/etcd/eviction.go b/pkg/registry/core/pod/etcd/eviction.go index fdafb1e3da..2d90f18a8b 100644 --- a/pkg/registry/core/pod/etcd/eviction.go +++ b/pkg/registry/core/pod/etcd/eviction.go @@ -27,6 +27,7 @@ import ( "k8s.io/kubernetes/pkg/apis/policy" policyclient "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/policy/internalversion" "k8s.io/kubernetes/pkg/client/retry" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/labels" genericregistry "k8s.io/kubernetes/pkg/registry/generic/registry" "k8s.io/kubernetes/pkg/runtime" @@ -70,7 +71,7 @@ func (r *EvictionREST) New() runtime.Object { } // Create attempts to create a new eviction. That is, it tries to evict a pod. -func (r *EvictionREST) Create(ctx api.Context, obj runtime.Object) (runtime.Object, error) { +func (r *EvictionREST) Create(ctx genericapirequest.Context, obj runtime.Object) (runtime.Object, error) { eviction := obj.(*policy.Eviction) obj, err := r.store.Get(ctx, eviction.Name, &metav1.GetOptions{}) @@ -175,7 +176,7 @@ func (r *EvictionREST) checkAndDecrement(namespace string, podName string, pdb p } // getPodDisruptionBudgets returns any PDBs that match the pod or err if there's an error. -func (r *EvictionREST) getPodDisruptionBudgets(ctx api.Context, pod *api.Pod) ([]policy.PodDisruptionBudget, error) { +func (r *EvictionREST) getPodDisruptionBudgets(ctx genericapirequest.Context, pod *api.Pod) ([]policy.PodDisruptionBudget, error) { if len(pod.Labels) == 0 { return nil, nil } diff --git a/pkg/registry/core/pod/rest/BUILD b/pkg/registry/core/pod/rest/BUILD index 6e31ab2168..389583b2e9 100644 --- a/pkg/registry/core/pod/rest/BUILD +++ b/pkg/registry/core/pod/rest/BUILD @@ -21,6 +21,7 @@ go_library( "//pkg/api/rest:go_default_library", "//pkg/api/validation:go_default_library", "//pkg/capabilities:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/kubelet/client:go_default_library", "//pkg/registry/core/pod:go_default_library", "//pkg/registry/generic/registry:go_default_library", @@ -37,6 +38,7 @@ go_test( deps = [ "//pkg/api:go_default_library", "//pkg/api/errors:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/registry/generic:go_default_library", "//pkg/registry/generic/registry:go_default_library", "//pkg/registry/registrytest:go_default_library", diff --git a/pkg/registry/core/pod/rest/log.go b/pkg/registry/core/pod/rest/log.go index 989df4bd60..fc85ee02a7 100644 --- a/pkg/registry/core/pod/rest/log.go +++ b/pkg/registry/core/pod/rest/log.go @@ -23,6 +23,7 @@ import ( "k8s.io/kubernetes/pkg/api/errors" "k8s.io/kubernetes/pkg/api/rest" "k8s.io/kubernetes/pkg/api/validation" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/kubelet/client" "k8s.io/kubernetes/pkg/registry/core/pod" genericregistry "k8s.io/kubernetes/pkg/registry/generic/registry" @@ -61,7 +62,7 @@ func (r *LogREST) ProducesObject(verb string) interface{} { } // Get retrieves a runtime.Object that will stream the contents of the pod log -func (r *LogREST) Get(ctx api.Context, name string, opts runtime.Object) (runtime.Object, error) { +func (r *LogREST) Get(ctx genericapirequest.Context, name string, opts runtime.Object) (runtime.Object, error) { logOpts, ok := opts.(*api.PodLogOptions) if !ok { return nil, fmt.Errorf("invalid options object: %#v", opts) diff --git a/pkg/registry/core/pod/rest/log_test.go b/pkg/registry/core/pod/rest/log_test.go index 90a23de233..b087a2e469 100644 --- a/pkg/registry/core/pod/rest/log_test.go +++ b/pkg/registry/core/pod/rest/log_test.go @@ -21,6 +21,7 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/errors" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/registry/generic" genericregistry "k8s.io/kubernetes/pkg/registry/generic/registry" "k8s.io/kubernetes/pkg/registry/registrytest" @@ -43,7 +44,7 @@ func TestPodLogValidates(t *testing.T) { } for _, tc := range testCases { - _, err := logRest.Get(api.NewDefaultContext(), "test", tc) + _, err := logRest.Get(genericapirequest.NewDefaultContext(), "test", tc) if !errors.IsInvalid(err) { t.Fatalf("unexpected error: %v", err) } diff --git a/pkg/registry/core/pod/rest/subresources.go b/pkg/registry/core/pod/rest/subresources.go index 40a1088a7a..f93505be8e 100644 --- a/pkg/registry/core/pod/rest/subresources.go +++ b/pkg/registry/core/pod/rest/subresources.go @@ -25,6 +25,7 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/rest" "k8s.io/kubernetes/pkg/capabilities" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/kubelet/client" "k8s.io/kubernetes/pkg/registry/core/pod" genericregistry "k8s.io/kubernetes/pkg/registry/generic/registry" @@ -59,7 +60,7 @@ func (r *ProxyREST) NewConnectOptions() (runtime.Object, bool, string) { } // Connect returns a handler for the pod proxy -func (r *ProxyREST) Connect(ctx api.Context, id string, opts runtime.Object, responder rest.Responder) (http.Handler, error) { +func (r *ProxyREST) Connect(ctx genericapirequest.Context, id string, opts runtime.Object, responder rest.Responder) (http.Handler, error) { proxyOpts, ok := opts.(*api.PodProxyOptions) if !ok { return nil, fmt.Errorf("Invalid options object: %#v", opts) @@ -91,7 +92,7 @@ func (r *AttachREST) New() runtime.Object { } // Connect returns a handler for the pod exec proxy -func (r *AttachREST) Connect(ctx api.Context, name string, opts runtime.Object, responder rest.Responder) (http.Handler, error) { +func (r *AttachREST) Connect(ctx genericapirequest.Context, name string, opts runtime.Object, responder rest.Responder) (http.Handler, error) { attachOpts, ok := opts.(*api.PodAttachOptions) if !ok { return nil, fmt.Errorf("Invalid options object: %#v", opts) @@ -128,7 +129,7 @@ func (r *ExecREST) New() runtime.Object { } // Connect returns a handler for the pod exec proxy -func (r *ExecREST) Connect(ctx api.Context, name string, opts runtime.Object, responder rest.Responder) (http.Handler, error) { +func (r *ExecREST) Connect(ctx genericapirequest.Context, name string, opts runtime.Object, responder rest.Responder) (http.Handler, error) { execOpts, ok := opts.(*api.PodExecOptions) if !ok { return nil, fmt.Errorf("invalid options object: %#v", opts) @@ -175,7 +176,7 @@ func (r *PortForwardREST) ConnectMethods() []string { } // Connect returns a handler for the pod portforward proxy -func (r *PortForwardREST) Connect(ctx api.Context, name string, opts runtime.Object, responder rest.Responder) (http.Handler, error) { +func (r *PortForwardREST) Connect(ctx genericapirequest.Context, name string, opts runtime.Object, responder rest.Responder) (http.Handler, error) { location, transport, err := pod.PortForwardLocation(r.Store, r.KubeletConn, ctx, name) if err != nil { return nil, err diff --git a/pkg/registry/core/pod/strategy.go b/pkg/registry/core/pod/strategy.go index 79db2061ad..92320b011f 100644 --- a/pkg/registry/core/pod/strategy.go +++ b/pkg/registry/core/pod/strategy.go @@ -30,6 +30,7 @@ import ( "k8s.io/kubernetes/pkg/api/validation" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" "k8s.io/kubernetes/pkg/fields" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/kubelet/client" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/registry/generic" @@ -56,7 +57,7 @@ func (podStrategy) NamespaceScoped() bool { } // PrepareForCreate clears fields that are not allowed to be set by end users on creation. -func (podStrategy) PrepareForCreate(ctx api.Context, obj runtime.Object) { +func (podStrategy) PrepareForCreate(ctx genericapirequest.Context, obj runtime.Object) { pod := obj.(*api.Pod) pod.Status = api.PodStatus{ Phase: api.PodPending, @@ -64,14 +65,14 @@ func (podStrategy) PrepareForCreate(ctx api.Context, obj runtime.Object) { } // PrepareForUpdate clears fields that are not allowed to be set by end users on update. -func (podStrategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { +func (podStrategy) PrepareForUpdate(ctx genericapirequest.Context, obj, old runtime.Object) { newPod := obj.(*api.Pod) oldPod := old.(*api.Pod) newPod.Status = oldPod.Status } // Validate validates a new pod. -func (podStrategy) Validate(ctx api.Context, obj runtime.Object) field.ErrorList { +func (podStrategy) Validate(ctx genericapirequest.Context, obj runtime.Object) field.ErrorList { pod := obj.(*api.Pod) return validation.ValidatePod(pod) } @@ -86,7 +87,7 @@ func (podStrategy) AllowCreateOnUpdate() bool { } // ValidateUpdate is the default update validation for an end user. -func (podStrategy) ValidateUpdate(ctx api.Context, obj, old runtime.Object) field.ErrorList { +func (podStrategy) ValidateUpdate(ctx genericapirequest.Context, obj, old runtime.Object) field.ErrorList { errorList := validation.ValidatePod(obj.(*api.Pod)) return append(errorList, validation.ValidatePodUpdate(obj.(*api.Pod), old.(*api.Pod))...) } @@ -98,7 +99,7 @@ func (podStrategy) AllowUnconditionalUpdate() bool { // CheckGracefulDelete allows a pod to be gracefully deleted. It updates the DeleteOptions to // reflect the desired grace value. -func (podStrategy) CheckGracefulDelete(ctx api.Context, obj runtime.Object, options *api.DeleteOptions) bool { +func (podStrategy) CheckGracefulDelete(ctx genericapirequest.Context, obj runtime.Object, options *api.DeleteOptions) bool { if options == nil { return false } @@ -131,7 +132,7 @@ type podStrategyWithoutGraceful struct { } // CheckGracefulDelete prohibits graceful deletion. -func (podStrategyWithoutGraceful) CheckGracefulDelete(ctx api.Context, obj runtime.Object, options *api.DeleteOptions) bool { +func (podStrategyWithoutGraceful) CheckGracefulDelete(ctx genericapirequest.Context, obj runtime.Object, options *api.DeleteOptions) bool { return false } @@ -144,14 +145,14 @@ type podStatusStrategy struct { var StatusStrategy = podStatusStrategy{Strategy} -func (podStatusStrategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { +func (podStatusStrategy) PrepareForUpdate(ctx genericapirequest.Context, obj, old runtime.Object) { newPod := obj.(*api.Pod) oldPod := old.(*api.Pod) newPod.Spec = oldPod.Spec newPod.DeletionTimestamp = nil } -func (podStatusStrategy) ValidateUpdate(ctx api.Context, obj, old runtime.Object) field.ErrorList { +func (podStatusStrategy) ValidateUpdate(ctx genericapirequest.Context, obj, old runtime.Object) field.ErrorList { // TODO: merge valid fields after update return validation.ValidatePodStatusUpdate(obj.(*api.Pod), old.(*api.Pod)) } @@ -197,10 +198,10 @@ func PodToSelectableFields(pod *api.Pod) fields.Set { // ResourceGetter is an interface for retrieving resources by ResourceLocation. type ResourceGetter interface { - Get(api.Context, string, *metav1.GetOptions) (runtime.Object, error) + Get(genericapirequest.Context, string, *metav1.GetOptions) (runtime.Object, error) } -func getPod(getter ResourceGetter, ctx api.Context, name string) (*api.Pod, error) { +func getPod(getter ResourceGetter, ctx genericapirequest.Context, name string) (*api.Pod, error) { obj, err := getter.Get(ctx, name, &metav1.GetOptions{}) if err != nil { return nil, err @@ -213,7 +214,7 @@ func getPod(getter ResourceGetter, ctx api.Context, name string) (*api.Pod, erro } // ResourceLocation returns a URL to which one can send traffic for the specified pod. -func ResourceLocation(getter ResourceGetter, rt http.RoundTripper, ctx api.Context, id string) (*url.URL, http.RoundTripper, error) { +func ResourceLocation(getter ResourceGetter, rt http.RoundTripper, ctx genericapirequest.Context, id string) (*url.URL, http.RoundTripper, error) { // Allow ID as "podname" or "podname:port" or "scheme:podname:port". // If port is not specified, try to use the first defined port on the pod. scheme, name, port, valid := utilnet.SplitSchemeNamePort(id) @@ -262,7 +263,7 @@ func getContainerNames(containers []api.Container) string { func LogLocation( getter ResourceGetter, connInfo client.ConnectionInfoGetter, - ctx api.Context, + ctx genericapirequest.Context, name string, opts *api.PodLogOptions, ) (*url.URL, http.RoundTripper, error) { @@ -299,7 +300,7 @@ func LogLocation( // If pod has not been assigned a host, return an empty location return nil, nil, nil } - nodeInfo, err := connInfo.GetConnectionInfo(ctx, nodeName) + nodeInfo, err := connInfo.GetConnectionInfo(nodeName) if err != nil { return nil, nil, err } @@ -390,7 +391,7 @@ func streamParams(params url.Values, opts runtime.Object) error { func AttachLocation( getter ResourceGetter, connInfo client.ConnectionInfoGetter, - ctx api.Context, + ctx genericapirequest.Context, name string, opts *api.PodAttachOptions, ) (*url.URL, http.RoundTripper, error) { @@ -402,7 +403,7 @@ func AttachLocation( func ExecLocation( getter ResourceGetter, connInfo client.ConnectionInfoGetter, - ctx api.Context, + ctx genericapirequest.Context, name string, opts *api.PodExecOptions, ) (*url.URL, http.RoundTripper, error) { @@ -412,7 +413,7 @@ func ExecLocation( func streamLocation( getter ResourceGetter, connInfo client.ConnectionInfoGetter, - ctx api.Context, + ctx genericapirequest.Context, name string, opts runtime.Object, container, @@ -450,7 +451,7 @@ func streamLocation( // If pod has not been assigned a host, return an empty location return nil, nil, errors.NewBadRequest(fmt.Sprintf("pod %s does not have a host assigned", name)) } - nodeInfo, err := connInfo.GetConnectionInfo(ctx, nodeName) + nodeInfo, err := connInfo.GetConnectionInfo(nodeName) if err != nil { return nil, nil, err } @@ -471,7 +472,7 @@ func streamLocation( func PortForwardLocation( getter ResourceGetter, connInfo client.ConnectionInfoGetter, - ctx api.Context, + ctx genericapirequest.Context, name string, ) (*url.URL, http.RoundTripper, error) { pod, err := getPod(getter, ctx, name) @@ -484,7 +485,7 @@ func PortForwardLocation( // If pod has not been assigned a host, return an empty location return nil, nil, errors.NewBadRequest(fmt.Sprintf("pod %s does not have a host assigned", name)) } - nodeInfo, err := connInfo.GetConnectionInfo(ctx, nodeName) + nodeInfo, err := connInfo.GetConnectionInfo(nodeName) if err != nil { return nil, nil, err } diff --git a/pkg/registry/core/pod/strategy_test.go b/pkg/registry/core/pod/strategy_test.go index 0e6bf68e38..b1550ac42a 100644 --- a/pkg/registry/core/pod/strategy_test.go +++ b/pkg/registry/core/pod/strategy_test.go @@ -26,6 +26,7 @@ import ( "k8s.io/kubernetes/pkg/apimachinery/registered" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" "k8s.io/kubernetes/pkg/fields" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/runtime" ) @@ -136,7 +137,7 @@ func TestCheckGracefulDelete(t *testing.T) { } for _, tc := range tcs { out := &api.DeleteOptions{GracePeriodSeconds: &defaultGracePeriod} - Strategy.CheckGracefulDelete(api.NewContext(), tc.in, out) + Strategy.CheckGracefulDelete(genericapirequest.NewContext(), tc.in, out) if out.GracePeriodSeconds == nil { t.Errorf("out grace period was nil but supposed to be %v", tc.gracePeriod) } @@ -150,12 +151,12 @@ type mockPodGetter struct { pod *api.Pod } -func (g mockPodGetter) Get(api.Context, string, *metav1.GetOptions) (runtime.Object, error) { +func (g mockPodGetter) Get(genericapirequest.Context, string, *metav1.GetOptions) (runtime.Object, error) { return g.pod, nil } func TestCheckLogLocation(t *testing.T) { - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() tcs := []struct { in *api.Pod opts *api.PodLogOptions diff --git a/pkg/registry/core/podtemplate/BUILD b/pkg/registry/core/podtemplate/BUILD index d52c262b72..d58cb059b2 100644 --- a/pkg/registry/core/podtemplate/BUILD +++ b/pkg/registry/core/podtemplate/BUILD @@ -19,6 +19,7 @@ go_library( "//pkg/api:go_default_library", "//pkg/api/validation:go_default_library", "//pkg/fields:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/labels:go_default_library", "//pkg/runtime:go_default_library", "//pkg/storage:go_default_library", diff --git a/pkg/registry/core/podtemplate/strategy.go b/pkg/registry/core/podtemplate/strategy.go index 6aa6359eb3..6f3bc162e7 100644 --- a/pkg/registry/core/podtemplate/strategy.go +++ b/pkg/registry/core/podtemplate/strategy.go @@ -22,6 +22,7 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/validation" "k8s.io/kubernetes/pkg/fields" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/storage" @@ -44,12 +45,12 @@ func (podTemplateStrategy) NamespaceScoped() bool { } // PrepareForCreate clears fields that are not allowed to be set by end users on creation. -func (podTemplateStrategy) PrepareForCreate(ctx api.Context, obj runtime.Object) { +func (podTemplateStrategy) PrepareForCreate(ctx genericapirequest.Context, obj runtime.Object) { _ = obj.(*api.PodTemplate) } // Validate validates a new pod template. -func (podTemplateStrategy) Validate(ctx api.Context, obj runtime.Object) field.ErrorList { +func (podTemplateStrategy) Validate(ctx genericapirequest.Context, obj runtime.Object) field.ErrorList { pod := obj.(*api.PodTemplate) return validation.ValidatePodTemplate(pod) } @@ -64,12 +65,12 @@ func (podTemplateStrategy) AllowCreateOnUpdate() bool { } // PrepareForUpdate clears fields that are not allowed to be set by end users on update. -func (podTemplateStrategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { +func (podTemplateStrategy) PrepareForUpdate(ctx genericapirequest.Context, obj, old runtime.Object) { _ = obj.(*api.PodTemplate) } // ValidateUpdate is the default update validation for an end user. -func (podTemplateStrategy) ValidateUpdate(ctx api.Context, obj, old runtime.Object) field.ErrorList { +func (podTemplateStrategy) ValidateUpdate(ctx genericapirequest.Context, obj, old runtime.Object) field.ErrorList { return validation.ValidatePodTemplateUpdate(obj.(*api.PodTemplate), old.(*api.PodTemplate)) } @@ -77,7 +78,7 @@ func (podTemplateStrategy) AllowUnconditionalUpdate() bool { return true } -func (podTemplateStrategy) Export(ctx api.Context, obj runtime.Object, exact bool) error { +func (podTemplateStrategy) Export(ctx genericapirequest.Context, obj runtime.Object, exact bool) error { // Do nothing return nil } diff --git a/pkg/registry/core/resourcequota/BUILD b/pkg/registry/core/resourcequota/BUILD index 3b76edddc9..4c0a76ba4e 100644 --- a/pkg/registry/core/resourcequota/BUILD +++ b/pkg/registry/core/resourcequota/BUILD @@ -19,6 +19,7 @@ go_library( "//pkg/api:go_default_library", "//pkg/api/validation:go_default_library", "//pkg/fields:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/labels:go_default_library", "//pkg/registry/generic:go_default_library", "//pkg/runtime:go_default_library", @@ -37,5 +38,6 @@ go_test( "//pkg/api/resource:go_default_library", "//pkg/api/testing:go_default_library", "//pkg/apimachinery/registered:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", ], ) diff --git a/pkg/registry/core/resourcequota/etcd/BUILD b/pkg/registry/core/resourcequota/etcd/BUILD index 04d38146a4..e524037e15 100644 --- a/pkg/registry/core/resourcequota/etcd/BUILD +++ b/pkg/registry/core/resourcequota/etcd/BUILD @@ -16,6 +16,7 @@ go_library( "//pkg/api:go_default_library", "//pkg/api/rest:go_default_library", "//pkg/apis/meta/v1:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/registry/core/resourcequota:go_default_library", "//pkg/registry/generic:go_default_library", "//pkg/registry/generic/registry:go_default_library", @@ -34,6 +35,7 @@ go_test( "//pkg/api/rest:go_default_library", "//pkg/apis/meta/v1:go_default_library", "//pkg/fields:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/labels:go_default_library", "//pkg/registry/generic:go_default_library", "//pkg/registry/registrytest:go_default_library", diff --git a/pkg/registry/core/resourcequota/etcd/etcd.go b/pkg/registry/core/resourcequota/etcd/etcd.go index 88f9467041..c5c73f3b09 100644 --- a/pkg/registry/core/resourcequota/etcd/etcd.go +++ b/pkg/registry/core/resourcequota/etcd/etcd.go @@ -20,6 +20,7 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/rest" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/registry/core/resourcequota" "k8s.io/kubernetes/pkg/registry/generic" genericregistry "k8s.io/kubernetes/pkg/registry/generic/registry" @@ -67,11 +68,11 @@ func (r *StatusREST) New() runtime.Object { } // Get retrieves the object from the storage. It is required to support Patch. -func (r *StatusREST) Get(ctx api.Context, name string, options *metav1.GetOptions) (runtime.Object, error) { +func (r *StatusREST) Get(ctx genericapirequest.Context, name string, options *metav1.GetOptions) (runtime.Object, error) { return r.store.Get(ctx, name, options) } // Update alters the status subset of an object. -func (r *StatusREST) Update(ctx api.Context, name string, objInfo rest.UpdatedObjectInfo) (runtime.Object, bool, error) { +func (r *StatusREST) Update(ctx genericapirequest.Context, name string, objInfo rest.UpdatedObjectInfo) (runtime.Object, bool, error) { return r.store.Update(ctx, name, objInfo) } diff --git a/pkg/registry/core/resourcequota/etcd/etcd_test.go b/pkg/registry/core/resourcequota/etcd/etcd_test.go index da12e30627..925735b146 100644 --- a/pkg/registry/core/resourcequota/etcd/etcd_test.go +++ b/pkg/registry/core/resourcequota/etcd/etcd_test.go @@ -24,6 +24,7 @@ import ( "k8s.io/kubernetes/pkg/api/rest" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" "k8s.io/kubernetes/pkg/fields" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/registry/generic" "k8s.io/kubernetes/pkg/registry/registrytest" @@ -83,9 +84,9 @@ func TestCreateSetsFields(t *testing.T) { storage, _, server := newStorage(t) defer server.Terminate(t) defer storage.Store.DestroyFunc() - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() resourcequota := validNewResourceQuota() - _, err := storage.Create(api.NewDefaultContext(), resourcequota) + _, err := storage.Create(genericapirequest.NewDefaultContext(), resourcequota) if err != nil { t.Fatalf("unexpected error: %v", err) } @@ -155,7 +156,7 @@ func TestUpdateStatus(t *testing.T) { storage, status, server := newStorage(t) defer server.Terminate(t) defer storage.Store.DestroyFunc() - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() key, _ := storage.KeyFunc(ctx, "foo") resourcequotaStart := validNewResourceQuota() diff --git a/pkg/registry/core/resourcequota/strategy.go b/pkg/registry/core/resourcequota/strategy.go index c6e7019e97..a26beb3337 100644 --- a/pkg/registry/core/resourcequota/strategy.go +++ b/pkg/registry/core/resourcequota/strategy.go @@ -22,6 +22,7 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/validation" "k8s.io/kubernetes/pkg/fields" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/registry/generic" "k8s.io/kubernetes/pkg/runtime" @@ -45,20 +46,20 @@ func (resourcequotaStrategy) NamespaceScoped() bool { } // PrepareForCreate clears fields that are not allowed to be set by end users on creation. -func (resourcequotaStrategy) PrepareForCreate(ctx api.Context, obj runtime.Object) { +func (resourcequotaStrategy) PrepareForCreate(ctx genericapirequest.Context, obj runtime.Object) { resourcequota := obj.(*api.ResourceQuota) resourcequota.Status = api.ResourceQuotaStatus{} } // PrepareForUpdate clears fields that are not allowed to be set by end users on update. -func (resourcequotaStrategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { +func (resourcequotaStrategy) PrepareForUpdate(ctx genericapirequest.Context, obj, old runtime.Object) { newResourcequota := obj.(*api.ResourceQuota) oldResourcequota := old.(*api.ResourceQuota) newResourcequota.Status = oldResourcequota.Status } // Validate validates a new resourcequota. -func (resourcequotaStrategy) Validate(ctx api.Context, obj runtime.Object) field.ErrorList { +func (resourcequotaStrategy) Validate(ctx genericapirequest.Context, obj runtime.Object) field.ErrorList { resourcequota := obj.(*api.ResourceQuota) return validation.ValidateResourceQuota(resourcequota) } @@ -73,7 +74,7 @@ func (resourcequotaStrategy) AllowCreateOnUpdate() bool { } // ValidateUpdate is the default update validation for an end user. -func (resourcequotaStrategy) ValidateUpdate(ctx api.Context, obj, old runtime.Object) field.ErrorList { +func (resourcequotaStrategy) ValidateUpdate(ctx genericapirequest.Context, obj, old runtime.Object) field.ErrorList { errorList := validation.ValidateResourceQuota(obj.(*api.ResourceQuota)) return append(errorList, validation.ValidateResourceQuotaUpdate(obj.(*api.ResourceQuota), old.(*api.ResourceQuota))...) } @@ -88,13 +89,13 @@ type resourcequotaStatusStrategy struct { var StatusStrategy = resourcequotaStatusStrategy{Strategy} -func (resourcequotaStatusStrategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { +func (resourcequotaStatusStrategy) PrepareForUpdate(ctx genericapirequest.Context, obj, old runtime.Object) { newResourcequota := obj.(*api.ResourceQuota) oldResourcequota := old.(*api.ResourceQuota) newResourcequota.Spec = oldResourcequota.Spec } -func (resourcequotaStatusStrategy) ValidateUpdate(ctx api.Context, obj, old runtime.Object) field.ErrorList { +func (resourcequotaStatusStrategy) ValidateUpdate(ctx genericapirequest.Context, obj, old runtime.Object) field.ErrorList { return validation.ValidateResourceQuotaStatusUpdate(obj.(*api.ResourceQuota), old.(*api.ResourceQuota)) } diff --git a/pkg/registry/core/resourcequota/strategy_test.go b/pkg/registry/core/resourcequota/strategy_test.go index 30c09fdbf3..73ba7d860e 100644 --- a/pkg/registry/core/resourcequota/strategy_test.go +++ b/pkg/registry/core/resourcequota/strategy_test.go @@ -23,6 +23,7 @@ import ( "k8s.io/kubernetes/pkg/api/resource" apitesting "k8s.io/kubernetes/pkg/api/testing" "k8s.io/kubernetes/pkg/apimachinery/registered" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" ) func TestResourceQuotaStrategy(t *testing.T) { @@ -53,7 +54,7 @@ func TestResourceQuotaStrategy(t *testing.T) { }, }, } - Strategy.PrepareForCreate(api.NewContext(), resourceQuota) + Strategy.PrepareForCreate(genericapirequest.NewContext(), resourceQuota) if resourceQuota.Status.Used != nil { t.Errorf("ResourceQuota does not allow setting status on create") } diff --git a/pkg/registry/core/secret/BUILD b/pkg/registry/core/secret/BUILD index 5cfecb4592..376158b2ec 100644 --- a/pkg/registry/core/secret/BUILD +++ b/pkg/registry/core/secret/BUILD @@ -23,6 +23,7 @@ go_library( "//pkg/api/validation:go_default_library", "//pkg/apis/meta/v1:go_default_library", "//pkg/fields:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/labels:go_default_library", "//pkg/registry/generic:go_default_library", "//pkg/runtime:go_default_library", @@ -41,6 +42,7 @@ go_test( "//pkg/api:go_default_library", "//pkg/api/testing:go_default_library", "//pkg/apimachinery/registered:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/runtime:go_default_library", ], ) diff --git a/pkg/registry/core/secret/registry.go b/pkg/registry/core/secret/registry.go index a15f604108..8dcd89fb8d 100644 --- a/pkg/registry/core/secret/registry.go +++ b/pkg/registry/core/secret/registry.go @@ -20,17 +20,18 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/rest" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/watch" ) // Registry is an interface implemented by things that know how to store Secret objects. type Registry interface { - ListSecrets(ctx api.Context, options *api.ListOptions) (*api.SecretList, error) - WatchSecrets(ctx api.Context, options *api.ListOptions) (watch.Interface, error) - GetSecret(ctx api.Context, name string, options *metav1.GetOptions) (*api.Secret, error) - CreateSecret(ctx api.Context, Secret *api.Secret) (*api.Secret, error) - UpdateSecret(ctx api.Context, Secret *api.Secret) (*api.Secret, error) - DeleteSecret(ctx api.Context, name string) error + ListSecrets(ctx genericapirequest.Context, options *api.ListOptions) (*api.SecretList, error) + WatchSecrets(ctx genericapirequest.Context, options *api.ListOptions) (watch.Interface, error) + GetSecret(ctx genericapirequest.Context, name string, options *metav1.GetOptions) (*api.Secret, error) + CreateSecret(ctx genericapirequest.Context, Secret *api.Secret) (*api.Secret, error) + UpdateSecret(ctx genericapirequest.Context, Secret *api.Secret) (*api.Secret, error) + DeleteSecret(ctx genericapirequest.Context, name string) error } // storage puts strong typing around storage calls @@ -44,7 +45,7 @@ func NewRegistry(s rest.StandardStorage) Registry { return &storage{s} } -func (s *storage) ListSecrets(ctx api.Context, options *api.ListOptions) (*api.SecretList, error) { +func (s *storage) ListSecrets(ctx genericapirequest.Context, options *api.ListOptions) (*api.SecretList, error) { obj, err := s.List(ctx, options) if err != nil { return nil, err @@ -52,11 +53,11 @@ func (s *storage) ListSecrets(ctx api.Context, options *api.ListOptions) (*api.S return obj.(*api.SecretList), nil } -func (s *storage) WatchSecrets(ctx api.Context, options *api.ListOptions) (watch.Interface, error) { +func (s *storage) WatchSecrets(ctx genericapirequest.Context, options *api.ListOptions) (watch.Interface, error) { return s.Watch(ctx, options) } -func (s *storage) GetSecret(ctx api.Context, name string, options *metav1.GetOptions) (*api.Secret, error) { +func (s *storage) GetSecret(ctx genericapirequest.Context, name string, options *metav1.GetOptions) (*api.Secret, error) { obj, err := s.Get(ctx, name, options) if err != nil { return nil, err @@ -64,17 +65,17 @@ func (s *storage) GetSecret(ctx api.Context, name string, options *metav1.GetOpt return obj.(*api.Secret), nil } -func (s *storage) CreateSecret(ctx api.Context, secret *api.Secret) (*api.Secret, error) { +func (s *storage) CreateSecret(ctx genericapirequest.Context, secret *api.Secret) (*api.Secret, error) { obj, err := s.Create(ctx, secret) return obj.(*api.Secret), err } -func (s *storage) UpdateSecret(ctx api.Context, secret *api.Secret) (*api.Secret, error) { +func (s *storage) UpdateSecret(ctx genericapirequest.Context, secret *api.Secret) (*api.Secret, error) { obj, _, err := s.Update(ctx, secret.Name, rest.DefaultUpdatedObjectInfo(secret, api.Scheme)) return obj.(*api.Secret), err } -func (s *storage) DeleteSecret(ctx api.Context, name string) error { +func (s *storage) DeleteSecret(ctx genericapirequest.Context, name string) error { _, err := s.Delete(ctx, name, nil) return err } diff --git a/pkg/registry/core/secret/strategy.go b/pkg/registry/core/secret/strategy.go index a6247b6b94..6494072abc 100644 --- a/pkg/registry/core/secret/strategy.go +++ b/pkg/registry/core/secret/strategy.go @@ -24,6 +24,7 @@ import ( "k8s.io/kubernetes/pkg/api/rest" "k8s.io/kubernetes/pkg/api/validation" "k8s.io/kubernetes/pkg/fields" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/registry/generic" "k8s.io/kubernetes/pkg/runtime" @@ -49,10 +50,10 @@ func (strategy) NamespaceScoped() bool { return true } -func (strategy) PrepareForCreate(ctx api.Context, obj runtime.Object) { +func (strategy) PrepareForCreate(ctx genericapirequest.Context, obj runtime.Object) { } -func (strategy) Validate(ctx api.Context, obj runtime.Object) field.ErrorList { +func (strategy) Validate(ctx genericapirequest.Context, obj runtime.Object) field.ErrorList { return validation.ValidateSecret(obj.(*api.Secret)) } @@ -63,10 +64,10 @@ func (strategy) AllowCreateOnUpdate() bool { return false } -func (strategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { +func (strategy) PrepareForUpdate(ctx genericapirequest.Context, obj, old runtime.Object) { } -func (strategy) ValidateUpdate(ctx api.Context, obj, old runtime.Object) field.ErrorList { +func (strategy) ValidateUpdate(ctx genericapirequest.Context, obj, old runtime.Object) field.ErrorList { return validation.ValidateSecretUpdate(obj.(*api.Secret), old.(*api.Secret)) } @@ -74,7 +75,7 @@ func (strategy) AllowUnconditionalUpdate() bool { return true } -func (s strategy) Export(ctx api.Context, obj runtime.Object, exact bool) error { +func (s strategy) Export(ctx genericapirequest.Context, obj runtime.Object, exact bool) error { t, ok := obj.(*api.Secret) if !ok { // unexpected programmer error diff --git a/pkg/registry/core/secret/strategy_test.go b/pkg/registry/core/secret/strategy_test.go index 6c03ca9271..8b13cab810 100644 --- a/pkg/registry/core/secret/strategy_test.go +++ b/pkg/registry/core/secret/strategy_test.go @@ -23,6 +23,7 @@ import ( "k8s.io/kubernetes/pkg/api" apitesting "k8s.io/kubernetes/pkg/api/testing" "k8s.io/kubernetes/pkg/apimachinery/registered" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/runtime" ) @@ -83,7 +84,7 @@ func TestExportSecret(t *testing.T) { } for _, test := range tests { - err := Strategy.Export(api.NewContext(), test.objIn, test.exact) + err := Strategy.Export(genericapirequest.NewContext(), test.objIn, test.exact) if err != nil { if !test.expectErr { t.Errorf("unexpected error: %v", err) diff --git a/pkg/registry/core/service/BUILD b/pkg/registry/core/service/BUILD index 4e7b7c5848..a7c100a6f6 100644 --- a/pkg/registry/core/service/BUILD +++ b/pkg/registry/core/service/BUILD @@ -27,6 +27,7 @@ go_library( "//pkg/apis/meta/v1:go_default_library", "//pkg/capabilities:go_default_library", "//pkg/fields:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/labels:go_default_library", "//pkg/registry/core/endpoint:go_default_library", "//pkg/registry/core/service/ipallocator:go_default_library", @@ -60,6 +61,7 @@ go_test( "//pkg/api/testing:go_default_library", "//pkg/apimachinery/registered:go_default_library", "//pkg/apis/meta/v1:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/registry/core/service/ipallocator:go_default_library", "//pkg/registry/core/service/portallocator:go_default_library", "//pkg/registry/registrytest:go_default_library", diff --git a/pkg/registry/core/service/etcd/BUILD b/pkg/registry/core/service/etcd/BUILD index f648526e9c..065e99c940 100644 --- a/pkg/registry/core/service/etcd/BUILD +++ b/pkg/registry/core/service/etcd/BUILD @@ -16,6 +16,7 @@ go_library( "//pkg/api:go_default_library", "//pkg/api/rest:go_default_library", "//pkg/apis/meta/v1:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/registry/core/service:go_default_library", "//pkg/registry/generic:go_default_library", "//pkg/registry/generic/registry:go_default_library", diff --git a/pkg/registry/core/service/etcd/etcd.go b/pkg/registry/core/service/etcd/etcd.go index 72fd826071..a74926e3c6 100644 --- a/pkg/registry/core/service/etcd/etcd.go +++ b/pkg/registry/core/service/etcd/etcd.go @@ -20,6 +20,7 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/rest" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/registry/core/service" "k8s.io/kubernetes/pkg/registry/generic" genericregistry "k8s.io/kubernetes/pkg/registry/generic/registry" @@ -66,11 +67,11 @@ func (r *StatusREST) New() runtime.Object { } // Get retrieves the object from the storage. It is required to support Patch. -func (r *StatusREST) Get(ctx api.Context, name string, options *metav1.GetOptions) (runtime.Object, error) { +func (r *StatusREST) Get(ctx genericapirequest.Context, name string, options *metav1.GetOptions) (runtime.Object, error) { return r.store.Get(ctx, name, options) } // Update alters the status subset of an object. -func (r *StatusREST) Update(ctx api.Context, name string, objInfo rest.UpdatedObjectInfo) (runtime.Object, bool, error) { +func (r *StatusREST) Update(ctx genericapirequest.Context, name string, objInfo rest.UpdatedObjectInfo) (runtime.Object, bool, error) { return r.store.Update(ctx, name, objInfo) } diff --git a/pkg/registry/core/service/proxy.go b/pkg/registry/core/service/proxy.go index 47f3be6606..6d8fd0a1f8 100644 --- a/pkg/registry/core/service/proxy.go +++ b/pkg/registry/core/service/proxy.go @@ -25,6 +25,7 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/rest" "k8s.io/kubernetes/pkg/capabilities" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" genericrest "k8s.io/kubernetes/pkg/registry/generic/rest" "k8s.io/kubernetes/pkg/runtime" ) @@ -56,7 +57,7 @@ func (r *ProxyREST) NewConnectOptions() (runtime.Object, bool, string) { } // Connect returns a handler for the service proxy -func (r *ProxyREST) Connect(ctx api.Context, id string, opts runtime.Object, responder rest.Responder) (http.Handler, error) { +func (r *ProxyREST) Connect(ctx genericapirequest.Context, id string, opts runtime.Object, responder rest.Responder) (http.Handler, error) { proxyOpts, ok := opts.(*api.ServiceProxyOptions) if !ok { return nil, fmt.Errorf("Invalid options object: %#v", opts) diff --git a/pkg/registry/core/service/registry.go b/pkg/registry/core/service/registry.go index 578e70c595..697540fb43 100644 --- a/pkg/registry/core/service/registry.go +++ b/pkg/registry/core/service/registry.go @@ -22,18 +22,19 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/rest" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/watch" ) // Registry is an interface for things that know how to store services. type Registry interface { - ListServices(ctx api.Context, options *api.ListOptions) (*api.ServiceList, error) - CreateService(ctx api.Context, svc *api.Service) (*api.Service, error) - GetService(ctx api.Context, name string, options *metav1.GetOptions) (*api.Service, error) - DeleteService(ctx api.Context, name string) error - UpdateService(ctx api.Context, svc *api.Service) (*api.Service, error) - WatchServices(ctx api.Context, options *api.ListOptions) (watch.Interface, error) - ExportService(ctx api.Context, name string, options metav1.ExportOptions) (*api.Service, error) + ListServices(ctx genericapirequest.Context, options *api.ListOptions) (*api.ServiceList, error) + CreateService(ctx genericapirequest.Context, svc *api.Service) (*api.Service, error) + GetService(ctx genericapirequest.Context, name string, options *metav1.GetOptions) (*api.Service, error) + DeleteService(ctx genericapirequest.Context, name string) error + UpdateService(ctx genericapirequest.Context, svc *api.Service) (*api.Service, error) + WatchServices(ctx genericapirequest.Context, options *api.ListOptions) (watch.Interface, error) + ExportService(ctx genericapirequest.Context, name string, options metav1.ExportOptions) (*api.Service, error) } // storage puts strong typing around storage calls @@ -47,7 +48,7 @@ func NewRegistry(s rest.StandardStorage) Registry { return &storage{s} } -func (s *storage) ListServices(ctx api.Context, options *api.ListOptions) (*api.ServiceList, error) { +func (s *storage) ListServices(ctx genericapirequest.Context, options *api.ListOptions) (*api.ServiceList, error) { obj, err := s.List(ctx, options) if err != nil { return nil, err @@ -55,7 +56,7 @@ func (s *storage) ListServices(ctx api.Context, options *api.ListOptions) (*api. return obj.(*api.ServiceList), nil } -func (s *storage) CreateService(ctx api.Context, svc *api.Service) (*api.Service, error) { +func (s *storage) CreateService(ctx genericapirequest.Context, svc *api.Service) (*api.Service, error) { obj, err := s.Create(ctx, svc) if err != nil { return nil, err @@ -63,7 +64,7 @@ func (s *storage) CreateService(ctx api.Context, svc *api.Service) (*api.Service return obj.(*api.Service), nil } -func (s *storage) GetService(ctx api.Context, name string, options *metav1.GetOptions) (*api.Service, error) { +func (s *storage) GetService(ctx genericapirequest.Context, name string, options *metav1.GetOptions) (*api.Service, error) { obj, err := s.Get(ctx, name, options) if err != nil { return nil, err @@ -71,12 +72,12 @@ func (s *storage) GetService(ctx api.Context, name string, options *metav1.GetOp return obj.(*api.Service), nil } -func (s *storage) DeleteService(ctx api.Context, name string) error { +func (s *storage) DeleteService(ctx genericapirequest.Context, name string) error { _, err := s.Delete(ctx, name, nil) return err } -func (s *storage) UpdateService(ctx api.Context, svc *api.Service) (*api.Service, error) { +func (s *storage) UpdateService(ctx genericapirequest.Context, svc *api.Service) (*api.Service, error) { obj, _, err := s.Update(ctx, svc.Name, rest.DefaultUpdatedObjectInfo(svc, api.Scheme)) if err != nil { return nil, err @@ -84,13 +85,13 @@ func (s *storage) UpdateService(ctx api.Context, svc *api.Service) (*api.Service return obj.(*api.Service), nil } -func (s *storage) WatchServices(ctx api.Context, options *api.ListOptions) (watch.Interface, error) { +func (s *storage) WatchServices(ctx genericapirequest.Context, options *api.ListOptions) (watch.Interface, error) { return s.Watch(ctx, options) } // If StandardStorage implements rest.Exporter, returns exported service. // Otherwise export is not supported. -func (s *storage) ExportService(ctx api.Context, name string, options metav1.ExportOptions) (*api.Service, error) { +func (s *storage) ExportService(ctx genericapirequest.Context, name string, options metav1.ExportOptions) (*api.Service, error) { exporter, isExporter := s.StandardStorage.(rest.Exporter) if !isExporter { return nil, fmt.Errorf("export is not supported") diff --git a/pkg/registry/core/service/rest.go b/pkg/registry/core/service/rest.go index 629bc2ed1d..2b0156fa94 100644 --- a/pkg/registry/core/service/rest.go +++ b/pkg/registry/core/service/rest.go @@ -31,6 +31,7 @@ import ( apiservice "k8s.io/kubernetes/pkg/api/service" "k8s.io/kubernetes/pkg/api/validation" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/registry/core/endpoint" "k8s.io/kubernetes/pkg/registry/core/service/ipallocator" "k8s.io/kubernetes/pkg/registry/core/service/portallocator" @@ -73,7 +74,7 @@ func NewStorage(registry Registry, endpoints endpoint.Registry, serviceIPs ipall } } -func (rs *REST) Create(ctx api.Context, obj runtime.Object) (runtime.Object, error) { +func (rs *REST) Create(ctx genericapirequest.Context, obj runtime.Object) (runtime.Object, error) { service := obj.(*api.Service) if err := rest.BeforeCreate(Strategy, ctx, obj); err != nil { @@ -205,7 +206,7 @@ func (rs *REST) Create(ctx api.Context, obj runtime.Object) (runtime.Object, err return out, err } -func (rs *REST) Delete(ctx api.Context, id string) (runtime.Object, error) { +func (rs *REST) Delete(ctx genericapirequest.Context, id string) (runtime.Object, error) { service, err := rs.registry.GetService(ctx, id, &metav1.GetOptions{}) if err != nil { return nil, err @@ -248,23 +249,23 @@ func (rs *REST) Delete(ctx api.Context, id string) (runtime.Object, error) { return &metav1.Status{Status: metav1.StatusSuccess}, nil } -func (rs *REST) Get(ctx api.Context, id string, options *metav1.GetOptions) (runtime.Object, error) { +func (rs *REST) Get(ctx genericapirequest.Context, id string, options *metav1.GetOptions) (runtime.Object, error) { return rs.registry.GetService(ctx, id, options) } -func (rs *REST) List(ctx api.Context, options *api.ListOptions) (runtime.Object, error) { +func (rs *REST) List(ctx genericapirequest.Context, options *api.ListOptions) (runtime.Object, error) { return rs.registry.ListServices(ctx, options) } // Watch returns Services events via a watch.Interface. // It implements rest.Watcher. -func (rs *REST) Watch(ctx api.Context, options *api.ListOptions) (watch.Interface, error) { +func (rs *REST) Watch(ctx genericapirequest.Context, options *api.ListOptions) (watch.Interface, error) { return rs.registry.WatchServices(ctx, options) } // Export returns Service stripped of cluster-specific information. // It implements rest.Exporter. -func (rs *REST) Export(ctx api.Context, name string, opts metav1.ExportOptions) (runtime.Object, error) { +func (rs *REST) Export(ctx genericapirequest.Context, name string, opts metav1.ExportOptions) (runtime.Object, error) { return rs.registry.ExportService(ctx, name, opts) } @@ -368,7 +369,7 @@ func (rs *REST) healthCheckNodePortUpdate(oldService, service *api.Service) (boo return true, nil } -func (rs *REST) Update(ctx api.Context, name string, objInfo rest.UpdatedObjectInfo) (runtime.Object, bool, error) { +func (rs *REST) Update(ctx genericapirequest.Context, name string, objInfo rest.UpdatedObjectInfo) (runtime.Object, bool, error) { oldService, err := rs.registry.GetService(ctx, name, &metav1.GetOptions{}) if err != nil { return nil, false, err @@ -467,7 +468,7 @@ func (rs *REST) Update(ctx api.Context, name string, objInfo rest.UpdatedObjectI var _ = rest.Redirector(&REST{}) // ResourceLocation returns a URL to which one can send traffic for the specified service. -func (rs *REST) ResourceLocation(ctx api.Context, id string) (*url.URL, http.RoundTripper, error) { +func (rs *REST) ResourceLocation(ctx genericapirequest.Context, id string) (*url.URL, http.RoundTripper, error) { // Allow ID as "svcname", "svcname:port", or "scheme:svcname:port". svcScheme, svcName, portStr, valid := utilnet.SplitSchemeNamePort(id) if !valid { diff --git a/pkg/registry/core/service/rest_test.go b/pkg/registry/core/service/rest_test.go index caf8d5b6df..cfec950f6b 100644 --- a/pkg/registry/core/service/rest_test.go +++ b/pkg/registry/core/service/rest_test.go @@ -27,6 +27,7 @@ import ( "k8s.io/kubernetes/pkg/api/rest" "k8s.io/kubernetes/pkg/api/service" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/registry/core/service/ipallocator" "k8s.io/kubernetes/pkg/registry/core/service/portallocator" "k8s.io/kubernetes/pkg/registry/registrytest" @@ -90,7 +91,7 @@ func TestServiceRegistryCreate(t *testing.T) { }}, }, } - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() created_svc, err := storage.Create(ctx, svc) if err != nil { t.Fatalf("Unexpected error: %v", err) @@ -209,7 +210,7 @@ func TestServiceRegistryCreateMultiNodePortsService(t *testing.T) { }, } - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() for _, test := range testCases { created_svc, err := storage.Create(ctx, test.svc) if err != nil { @@ -276,7 +277,7 @@ func TestServiceStorageValidatesCreate(t *testing.T) { }, }, } - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() for _, failureCase := range failureCases { c, err := storage.Create(ctx, &failureCase) if c != nil { @@ -289,7 +290,7 @@ func TestServiceStorageValidatesCreate(t *testing.T) { } func TestServiceRegistryUpdate(t *testing.T) { - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() storage, registry := NewTestREST(t, nil) svc, err := registry.CreateService(ctx, &api.Service{ ObjectMeta: api.ObjectMeta{Name: "foo", ResourceVersion: "1", Namespace: api.NamespaceDefault}, @@ -340,7 +341,7 @@ func TestServiceRegistryUpdate(t *testing.T) { } func TestServiceStorageValidatesUpdate(t *testing.T) { - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() storage, registry := NewTestREST(t, nil) registry.CreateService(ctx, &api.Service{ ObjectMeta: api.ObjectMeta{Name: "foo"}, @@ -392,7 +393,7 @@ func TestServiceStorageValidatesUpdate(t *testing.T) { } func TestServiceRegistryExternalService(t *testing.T) { - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() storage, registry := NewTestREST(t, nil) svc := &api.Service{ ObjectMeta: api.ObjectMeta{Name: "foo"}, @@ -421,7 +422,7 @@ func TestServiceRegistryExternalService(t *testing.T) { } func TestServiceRegistryDelete(t *testing.T) { - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() storage, registry := NewTestREST(t, nil) svc := &api.Service{ ObjectMeta: api.ObjectMeta{Name: "foo"}, @@ -443,7 +444,7 @@ func TestServiceRegistryDelete(t *testing.T) { } func TestServiceRegistryDeleteExternal(t *testing.T) { - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() storage, registry := NewTestREST(t, nil) svc := &api.Service{ ObjectMeta: api.ObjectMeta{Name: "foo"}, @@ -465,7 +466,7 @@ func TestServiceRegistryDeleteExternal(t *testing.T) { } func TestServiceRegistryUpdateExternalService(t *testing.T) { - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() storage, _ := NewTestREST(t, nil) // Create non-external load balancer. @@ -502,7 +503,7 @@ func TestServiceRegistryUpdateExternalService(t *testing.T) { } func TestServiceRegistryUpdateMultiPortExternalService(t *testing.T) { - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() storage, _ := NewTestREST(t, nil) // Create external load balancer. @@ -538,7 +539,7 @@ func TestServiceRegistryUpdateMultiPortExternalService(t *testing.T) { } func TestServiceRegistryGet(t *testing.T) { - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() storage, registry := NewTestREST(t, nil) registry.CreateService(ctx, &api.Service{ ObjectMeta: api.ObjectMeta{Name: "foo"}, @@ -553,7 +554,7 @@ func TestServiceRegistryGet(t *testing.T) { } func TestServiceRegistryResourceLocation(t *testing.T) { - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() endpoints := &api.EndpointsList{ Items: []api.Endpoints{ { @@ -674,7 +675,7 @@ func TestServiceRegistryResourceLocation(t *testing.T) { } func TestServiceRegistryList(t *testing.T) { - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() storage, registry := NewTestREST(t, nil) registry.CreateService(ctx, &api.Service{ ObjectMeta: api.ObjectMeta{Name: "foo", Namespace: api.NamespaceDefault}, @@ -721,7 +722,7 @@ func TestServiceRegistryIPAllocation(t *testing.T) { }}, }, } - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() created_svc1, _ := storage.Create(ctx, svc1) created_service_1 := created_svc1.(*api.Service) if created_service_1.Name != "foo" { @@ -743,7 +744,7 @@ func TestServiceRegistryIPAllocation(t *testing.T) { TargetPort: intstr.FromInt(6502), }}, }} - ctx = api.NewDefaultContext() + ctx = genericapirequest.NewDefaultContext() created_svc2, _ := storage.Create(ctx, svc2) created_service_2 := created_svc2.(*api.Service) if created_service_2.Name != "bar" { @@ -776,7 +777,7 @@ func TestServiceRegistryIPAllocation(t *testing.T) { }}, }, } - ctx = api.NewDefaultContext() + ctx = genericapirequest.NewDefaultContext() created_svc3, err := storage.Create(ctx, svc3) if err != nil { t.Fatal(err) @@ -803,7 +804,7 @@ func TestServiceRegistryIPReallocation(t *testing.T) { }}, }, } - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() created_svc1, _ := storage.Create(ctx, svc1) created_service_1 := created_svc1.(*api.Service) if created_service_1.Name != "foo" { @@ -831,7 +832,7 @@ func TestServiceRegistryIPReallocation(t *testing.T) { }}, }, } - ctx = api.NewDefaultContext() + ctx = genericapirequest.NewDefaultContext() created_svc2, _ := storage.Create(ctx, svc2) created_service_2 := created_svc2.(*api.Service) if created_service_2.Name != "bar" { @@ -858,7 +859,7 @@ func TestServiceRegistryIPUpdate(t *testing.T) { }}, }, } - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() created_svc, _ := storage.Create(ctx, svc) created_service := created_svc.(*api.Service) if created_service.Spec.Ports[0].Port != 6502 { @@ -912,7 +913,7 @@ func TestServiceRegistryIPLoadBalancer(t *testing.T) { }}, }, } - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() created_svc, _ := storage.Create(ctx, svc) created_service := created_svc.(*api.Service) if created_service.Spec.Ports[0].Port != 6502 { @@ -936,7 +937,7 @@ func TestUpdateServiceWithConflictingNamespace(t *testing.T) { ObjectMeta: api.ObjectMeta{Name: "test", Namespace: "not-default"}, } - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() obj, created, err := storage.Update(ctx, service.Name, rest.DefaultUpdatedObjectInfo(service, api.Scheme)) if obj != nil || created { t.Error("Expected a nil object, but we got a value or created was true") @@ -951,7 +952,7 @@ func TestUpdateServiceWithConflictingNamespace(t *testing.T) { // Validate allocation of a nodePort when the externalTraffic=OnlyLocal annotation is set // and type is LoadBalancer func TestServiceRegistryExternalTrafficAnnotationHealthCheckNodePortAllocation(t *testing.T) { - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() storage, _ := NewTestREST(t, nil) svc := &api.Service{ ObjectMeta: api.ObjectMeta{Name: "external-lb-esipp", @@ -988,7 +989,7 @@ func TestServiceRegistryExternalTrafficAnnotationHealthCheckNodePortAllocation(t // Validate using the user specified nodePort when the externalTraffic=OnlyLocal annotation is set // and type is LoadBalancer func TestServiceRegistryExternalTrafficBetaAnnotationHealthCheckNodePortUserAllocation(t *testing.T) { - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() storage, _ := NewTestREST(t, nil) svc := &api.Service{ ObjectMeta: api.ObjectMeta{Name: "external-lb-esipp", @@ -1027,7 +1028,7 @@ func TestServiceRegistryExternalTrafficBetaAnnotationHealthCheckNodePortUserAllo // Validate that the service creation fails when the requested port number is -1 func TestServiceRegistryExternalTrafficAnnotationNegative(t *testing.T) { - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() storage, _ := NewTestREST(t, nil) svc := &api.Service{ ObjectMeta: api.ObjectMeta{Name: "external-lb-esipp", @@ -1056,7 +1057,7 @@ func TestServiceRegistryExternalTrafficAnnotationNegative(t *testing.T) { // Validate that the health check nodePort is not allocated when the externalTraffic annotation is !"OnlyLocal" func TestServiceRegistryExternalTrafficAnnotationGlobal(t *testing.T) { - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() storage, _ := NewTestREST(t, nil) svc := &api.Service{ ObjectMeta: api.ObjectMeta{Name: "external-lb-esipp", @@ -1093,7 +1094,7 @@ func TestServiceRegistryExternalTrafficAnnotationGlobal(t *testing.T) { // Validate that the health check nodePort is not allocated when service type is ClusterIP func TestServiceRegistryExternalTrafficAnnotationClusterIP(t *testing.T) { - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() storage, _ := NewTestREST(t, nil) svc := &api.Service{ ObjectMeta: api.ObjectMeta{Name: "external-lb-esipp", diff --git a/pkg/registry/core/service/strategy.go b/pkg/registry/core/service/strategy.go index c9ca5d4c80..2cafcfeb55 100644 --- a/pkg/registry/core/service/strategy.go +++ b/pkg/registry/core/service/strategy.go @@ -22,6 +22,7 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/validation" "k8s.io/kubernetes/pkg/fields" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/registry/generic" "k8s.io/kubernetes/pkg/runtime" @@ -45,20 +46,20 @@ func (svcStrategy) NamespaceScoped() bool { } // PrepareForCreate clears fields that are not allowed to be set by end users on creation. -func (svcStrategy) PrepareForCreate(ctx api.Context, obj runtime.Object) { +func (svcStrategy) PrepareForCreate(ctx genericapirequest.Context, obj runtime.Object) { service := obj.(*api.Service) service.Status = api.ServiceStatus{} } // PrepareForUpdate clears fields that are not allowed to be set by end users on update. -func (svcStrategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { +func (svcStrategy) PrepareForUpdate(ctx genericapirequest.Context, obj, old runtime.Object) { newService := obj.(*api.Service) oldService := old.(*api.Service) newService.Status = oldService.Status } // Validate validates a new service. -func (svcStrategy) Validate(ctx api.Context, obj runtime.Object) field.ErrorList { +func (svcStrategy) Validate(ctx genericapirequest.Context, obj runtime.Object) field.ErrorList { service := obj.(*api.Service) return validation.ValidateService(service) } @@ -71,7 +72,7 @@ func (svcStrategy) AllowCreateOnUpdate() bool { return true } -func (svcStrategy) ValidateUpdate(ctx api.Context, obj, old runtime.Object) field.ErrorList { +func (svcStrategy) ValidateUpdate(ctx genericapirequest.Context, obj, old runtime.Object) field.ErrorList { return validation.ValidateServiceUpdate(obj.(*api.Service), old.(*api.Service)) } @@ -79,7 +80,7 @@ func (svcStrategy) AllowUnconditionalUpdate() bool { return true } -func (svcStrategy) Export(ctx api.Context, obj runtime.Object, exact bool) error { +func (svcStrategy) Export(ctx genericapirequest.Context, obj runtime.Object, exact bool) error { t, ok := obj.(*api.Service) if !ok { // unexpected programmer error @@ -130,7 +131,7 @@ type serviceStatusStrategy struct { var StatusStrategy = serviceStatusStrategy{Strategy} // PrepareForUpdate clears fields that are not allowed to be set by end users on update of status -func (serviceStatusStrategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { +func (serviceStatusStrategy) PrepareForUpdate(ctx genericapirequest.Context, obj, old runtime.Object) { newService := obj.(*api.Service) oldService := old.(*api.Service) // status changes are not allowed to update spec @@ -138,6 +139,6 @@ func (serviceStatusStrategy) PrepareForUpdate(ctx api.Context, obj, old runtime. } // ValidateUpdate is the default update validation for an end user updating status -func (serviceStatusStrategy) ValidateUpdate(ctx api.Context, obj, old runtime.Object) field.ErrorList { +func (serviceStatusStrategy) ValidateUpdate(ctx genericapirequest.Context, obj, old runtime.Object) field.ErrorList { return validation.ValidateServiceStatusUpdate(obj.(*api.Service), old.(*api.Service)) } diff --git a/pkg/registry/core/service/strategy_test.go b/pkg/registry/core/service/strategy_test.go index 856152efd4..c533cd5898 100644 --- a/pkg/registry/core/service/strategy_test.go +++ b/pkg/registry/core/service/strategy_test.go @@ -25,6 +25,7 @@ import ( "k8s.io/kubernetes/pkg/api/rest" apitesting "k8s.io/kubernetes/pkg/api/testing" "k8s.io/kubernetes/pkg/apimachinery/registered" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/util/intstr" ) @@ -92,7 +93,7 @@ func TestExportService(t *testing.T) { } for _, test := range tests { - err := Strategy.Export(api.NewContext(), test.objIn, test.exact) + err := Strategy.Export(genericapirequest.NewContext(), test.objIn, test.exact) if err != nil { if !test.expectErr { t.Errorf("unexpected error: %v", err) @@ -200,7 +201,7 @@ func TestBeforeUpdate(t *testing.T) { oldSvc := makeValidService() newSvc := makeValidService() tc.tweakSvc(&oldSvc, &newSvc) - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() err := rest.BeforeUpdate(Strategy, ctx, runtime.Object(&oldSvc), runtime.Object(&newSvc)) if tc.expectErr && err == nil { t.Errorf("unexpected non-error for %q", tc.name) @@ -221,7 +222,7 @@ func TestSelectableFieldLabelConversions(t *testing.T) { } func TestServiceStatusStrategy(t *testing.T) { - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() if !StatusStrategy.NamespaceScoped() { t.Errorf("Service must be namespace scoped") } diff --git a/pkg/registry/core/serviceaccount/BUILD b/pkg/registry/core/serviceaccount/BUILD index 472a374589..d56ab74eb5 100644 --- a/pkg/registry/core/serviceaccount/BUILD +++ b/pkg/registry/core/serviceaccount/BUILD @@ -22,6 +22,7 @@ go_library( "//pkg/api/validation:go_default_library", "//pkg/apis/meta/v1:go_default_library", "//pkg/fields:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/labels:go_default_library", "//pkg/registry/generic:go_default_library", "//pkg/runtime:go_default_library", diff --git a/pkg/registry/core/serviceaccount/registry.go b/pkg/registry/core/serviceaccount/registry.go index 38c7c159cc..286c5cb57d 100644 --- a/pkg/registry/core/serviceaccount/registry.go +++ b/pkg/registry/core/serviceaccount/registry.go @@ -20,17 +20,18 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/rest" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/watch" ) // Registry is an interface implemented by things that know how to store ServiceAccount objects. type Registry interface { - ListServiceAccounts(ctx api.Context, options *api.ListOptions) (*api.ServiceAccountList, error) - WatchServiceAccounts(ctx api.Context, options *api.ListOptions) (watch.Interface, error) - GetServiceAccount(ctx api.Context, name string, options *metav1.GetOptions) (*api.ServiceAccount, error) - CreateServiceAccount(ctx api.Context, ServiceAccount *api.ServiceAccount) error - UpdateServiceAccount(ctx api.Context, ServiceAccount *api.ServiceAccount) error - DeleteServiceAccount(ctx api.Context, name string) error + ListServiceAccounts(ctx genericapirequest.Context, options *api.ListOptions) (*api.ServiceAccountList, error) + WatchServiceAccounts(ctx genericapirequest.Context, options *api.ListOptions) (watch.Interface, error) + GetServiceAccount(ctx genericapirequest.Context, name string, options *metav1.GetOptions) (*api.ServiceAccount, error) + CreateServiceAccount(ctx genericapirequest.Context, ServiceAccount *api.ServiceAccount) error + UpdateServiceAccount(ctx genericapirequest.Context, ServiceAccount *api.ServiceAccount) error + DeleteServiceAccount(ctx genericapirequest.Context, name string) error } // storage puts strong typing around storage calls @@ -44,7 +45,7 @@ func NewRegistry(s rest.StandardStorage) Registry { return &storage{s} } -func (s *storage) ListServiceAccounts(ctx api.Context, options *api.ListOptions) (*api.ServiceAccountList, error) { +func (s *storage) ListServiceAccounts(ctx genericapirequest.Context, options *api.ListOptions) (*api.ServiceAccountList, error) { obj, err := s.List(ctx, options) if err != nil { return nil, err @@ -52,11 +53,11 @@ func (s *storage) ListServiceAccounts(ctx api.Context, options *api.ListOptions) return obj.(*api.ServiceAccountList), nil } -func (s *storage) WatchServiceAccounts(ctx api.Context, options *api.ListOptions) (watch.Interface, error) { +func (s *storage) WatchServiceAccounts(ctx genericapirequest.Context, options *api.ListOptions) (watch.Interface, error) { return s.Watch(ctx, options) } -func (s *storage) GetServiceAccount(ctx api.Context, name string, options *metav1.GetOptions) (*api.ServiceAccount, error) { +func (s *storage) GetServiceAccount(ctx genericapirequest.Context, name string, options *metav1.GetOptions) (*api.ServiceAccount, error) { obj, err := s.Get(ctx, name, options) if err != nil { return nil, err @@ -64,17 +65,17 @@ func (s *storage) GetServiceAccount(ctx api.Context, name string, options *metav return obj.(*api.ServiceAccount), nil } -func (s *storage) CreateServiceAccount(ctx api.Context, serviceAccount *api.ServiceAccount) error { +func (s *storage) CreateServiceAccount(ctx genericapirequest.Context, serviceAccount *api.ServiceAccount) error { _, err := s.Create(ctx, serviceAccount) return err } -func (s *storage) UpdateServiceAccount(ctx api.Context, serviceAccount *api.ServiceAccount) error { +func (s *storage) UpdateServiceAccount(ctx genericapirequest.Context, serviceAccount *api.ServiceAccount) error { _, _, err := s.Update(ctx, serviceAccount.Name, rest.DefaultUpdatedObjectInfo(serviceAccount, api.Scheme)) return err } -func (s *storage) DeleteServiceAccount(ctx api.Context, name string) error { +func (s *storage) DeleteServiceAccount(ctx genericapirequest.Context, name string) error { _, err := s.Delete(ctx, name, nil) return err } diff --git a/pkg/registry/core/serviceaccount/strategy.go b/pkg/registry/core/serviceaccount/strategy.go index 2aa2e90eca..1cacc9c7ad 100644 --- a/pkg/registry/core/serviceaccount/strategy.go +++ b/pkg/registry/core/serviceaccount/strategy.go @@ -22,6 +22,7 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/validation" "k8s.io/kubernetes/pkg/fields" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/registry/generic" "k8s.io/kubernetes/pkg/runtime" @@ -43,11 +44,11 @@ func (strategy) NamespaceScoped() bool { return true } -func (strategy) PrepareForCreate(ctx api.Context, obj runtime.Object) { +func (strategy) PrepareForCreate(ctx genericapirequest.Context, obj runtime.Object) { cleanSecretReferences(obj.(*api.ServiceAccount)) } -func (strategy) Validate(ctx api.Context, obj runtime.Object) field.ErrorList { +func (strategy) Validate(ctx genericapirequest.Context, obj runtime.Object) field.ErrorList { return validation.ValidateServiceAccount(obj.(*api.ServiceAccount)) } @@ -59,7 +60,7 @@ func (strategy) AllowCreateOnUpdate() bool { return false } -func (strategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { +func (strategy) PrepareForUpdate(ctx genericapirequest.Context, obj, old runtime.Object) { cleanSecretReferences(obj.(*api.ServiceAccount)) } @@ -69,7 +70,7 @@ func cleanSecretReferences(serviceAccount *api.ServiceAccount) { } } -func (strategy) ValidateUpdate(ctx api.Context, obj, old runtime.Object) field.ErrorList { +func (strategy) ValidateUpdate(ctx genericapirequest.Context, obj, old runtime.Object) field.ErrorList { return validation.ValidateServiceAccountUpdate(obj.(*api.ServiceAccount), old.(*api.ServiceAccount)) } diff --git a/pkg/registry/extensions/controller/etcd/BUILD b/pkg/registry/extensions/controller/etcd/BUILD index e253a562f4..36ef33d4f2 100644 --- a/pkg/registry/extensions/controller/etcd/BUILD +++ b/pkg/registry/extensions/controller/etcd/BUILD @@ -19,6 +19,7 @@ go_library( "//pkg/apis/extensions:go_default_library", "//pkg/apis/extensions/validation:go_default_library", "//pkg/apis/meta/v1:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/registry/core/controller:go_default_library", "//pkg/registry/core/controller/etcd:go_default_library", "//pkg/registry/generic:go_default_library", @@ -36,6 +37,7 @@ go_test( "//pkg/api/rest:go_default_library", "//pkg/apis/extensions:go_default_library", "//pkg/apis/meta/v1:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/registry/generic:go_default_library", "//pkg/registry/registrytest:go_default_library", "//pkg/storage:go_default_library", diff --git a/pkg/registry/extensions/controller/etcd/etcd.go b/pkg/registry/extensions/controller/etcd/etcd.go index aec8ddea5f..b85084f6cd 100644 --- a/pkg/registry/extensions/controller/etcd/etcd.go +++ b/pkg/registry/extensions/controller/etcd/etcd.go @@ -22,15 +22,14 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/errors" "k8s.io/kubernetes/pkg/api/rest" + "k8s.io/kubernetes/pkg/apis/extensions" + extvalidation "k8s.io/kubernetes/pkg/apis/extensions/validation" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/registry/core/controller" "k8s.io/kubernetes/pkg/registry/core/controller/etcd" "k8s.io/kubernetes/pkg/registry/generic" "k8s.io/kubernetes/pkg/runtime" - - "k8s.io/kubernetes/pkg/apis/extensions" - - extvalidation "k8s.io/kubernetes/pkg/apis/extensions/validation" ) // Container includes dummy storage for RC pods and experimental storage for Scale. @@ -62,7 +61,7 @@ func (r *ScaleREST) New() runtime.Object { return &extensions.Scale{} } -func (r *ScaleREST) Get(ctx api.Context, name string, options *metav1.GetOptions) (runtime.Object, error) { +func (r *ScaleREST) Get(ctx genericapirequest.Context, name string, options *metav1.GetOptions) (runtime.Object, error) { rc, err := (*r.registry).GetController(ctx, name, options) if err != nil { return nil, errors.NewNotFound(extensions.Resource("replicationcontrollers/scale"), name) @@ -70,7 +69,7 @@ func (r *ScaleREST) Get(ctx api.Context, name string, options *metav1.GetOptions return scaleFromRC(rc), nil } -func (r *ScaleREST) Update(ctx api.Context, name string, objInfo rest.UpdatedObjectInfo) (runtime.Object, bool, error) { +func (r *ScaleREST) Update(ctx genericapirequest.Context, name string, objInfo rest.UpdatedObjectInfo) (runtime.Object, bool, error) { rc, err := (*r.registry).GetController(ctx, name, &metav1.GetOptions{}) if err != nil { return nil, false, errors.NewNotFound(extensions.Resource("replicationcontrollers/scale"), name) diff --git a/pkg/registry/extensions/controller/etcd/etcd_test.go b/pkg/registry/extensions/controller/etcd/etcd_test.go index c0a1764589..36509fe3d9 100644 --- a/pkg/registry/extensions/controller/etcd/etcd_test.go +++ b/pkg/registry/extensions/controller/etcd/etcd_test.go @@ -23,6 +23,7 @@ import ( "k8s.io/kubernetes/pkg/api/rest" "k8s.io/kubernetes/pkg/apis/extensions" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/registry/generic" "k8s.io/kubernetes/pkg/registry/registrytest" "k8s.io/kubernetes/pkg/storage" @@ -90,7 +91,7 @@ func TestGet(t *testing.T) { storage, _, si, destroyFunc := newStorage(t) defer destroyFunc() - ctx := api.WithNamespace(api.NewContext(), "test") + ctx := genericapirequest.WithNamespace(genericapirequest.NewContext(), "test") key := "/controllers/test/foo" if err := si.Create(ctx, key, &validController, nil, 0); err != nil { t.Fatalf("unexpected error: %v", err) @@ -109,7 +110,7 @@ func TestUpdate(t *testing.T) { storage, _, si, destroyFunc := newStorage(t) defer destroyFunc() - ctx := api.WithNamespace(api.NewContext(), "test") + ctx := genericapirequest.WithNamespace(genericapirequest.NewContext(), "test") key := "/controllers/test/foo" if err := si.Create(ctx, key, &validController, nil, 0); err != nil { t.Fatalf("unexpected error: %v", err) diff --git a/pkg/registry/extensions/daemonset/BUILD b/pkg/registry/extensions/daemonset/BUILD index 2b43ac1169..ee5d138cad 100644 --- a/pkg/registry/extensions/daemonset/BUILD +++ b/pkg/registry/extensions/daemonset/BUILD @@ -20,6 +20,7 @@ go_library( "//pkg/apis/extensions:go_default_library", "//pkg/apis/extensions/validation:go_default_library", "//pkg/fields:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/labels:go_default_library", "//pkg/registry/generic:go_default_library", "//pkg/runtime:go_default_library", diff --git a/pkg/registry/extensions/daemonset/etcd/BUILD b/pkg/registry/extensions/daemonset/etcd/BUILD index ef489a6b42..9545b55546 100644 --- a/pkg/registry/extensions/daemonset/etcd/BUILD +++ b/pkg/registry/extensions/daemonset/etcd/BUILD @@ -13,10 +13,10 @@ go_library( srcs = ["etcd.go"], tags = ["automanaged"], deps = [ - "//pkg/api:go_default_library", "//pkg/api/rest:go_default_library", "//pkg/apis/extensions:go_default_library", "//pkg/apis/meta/v1:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/registry/extensions/daemonset:go_default_library", "//pkg/registry/generic:go_default_library", "//pkg/registry/generic/registry:go_default_library", diff --git a/pkg/registry/extensions/daemonset/etcd/etcd.go b/pkg/registry/extensions/daemonset/etcd/etcd.go index 304b2550e3..df210cab5e 100644 --- a/pkg/registry/extensions/daemonset/etcd/etcd.go +++ b/pkg/registry/extensions/daemonset/etcd/etcd.go @@ -17,10 +17,10 @@ limitations under the License. package etcd import ( - "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/rest" "k8s.io/kubernetes/pkg/apis/extensions" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/registry/extensions/daemonset" "k8s.io/kubernetes/pkg/registry/generic" genericregistry "k8s.io/kubernetes/pkg/registry/generic/registry" @@ -68,11 +68,11 @@ func (r *StatusREST) New() runtime.Object { } // Get retrieves the object from the storage. It is required to support Patch. -func (r *StatusREST) Get(ctx api.Context, name string, options *metav1.GetOptions) (runtime.Object, error) { +func (r *StatusREST) Get(ctx genericapirequest.Context, name string, options *metav1.GetOptions) (runtime.Object, error) { return r.store.Get(ctx, name, options) } // Update alters the status subset of an object. -func (r *StatusREST) Update(ctx api.Context, name string, objInfo rest.UpdatedObjectInfo) (runtime.Object, bool, error) { +func (r *StatusREST) Update(ctx genericapirequest.Context, name string, objInfo rest.UpdatedObjectInfo) (runtime.Object, bool, error) { return r.store.Update(ctx, name, objInfo) } diff --git a/pkg/registry/extensions/daemonset/strategy.go b/pkg/registry/extensions/daemonset/strategy.go index e8928c1526..ecb120be50 100644 --- a/pkg/registry/extensions/daemonset/strategy.go +++ b/pkg/registry/extensions/daemonset/strategy.go @@ -24,6 +24,7 @@ import ( "k8s.io/kubernetes/pkg/apis/extensions" "k8s.io/kubernetes/pkg/apis/extensions/validation" "k8s.io/kubernetes/pkg/fields" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/registry/generic" "k8s.io/kubernetes/pkg/runtime" @@ -46,7 +47,7 @@ func (daemonSetStrategy) NamespaceScoped() bool { } // PrepareForCreate clears the status of a daemon set before creation. -func (daemonSetStrategy) PrepareForCreate(ctx api.Context, obj runtime.Object) { +func (daemonSetStrategy) PrepareForCreate(ctx genericapirequest.Context, obj runtime.Object) { daemonSet := obj.(*extensions.DaemonSet) daemonSet.Status = extensions.DaemonSetStatus{} @@ -54,7 +55,7 @@ func (daemonSetStrategy) PrepareForCreate(ctx api.Context, obj runtime.Object) { } // PrepareForUpdate clears fields that are not allowed to be set by end users on update. -func (daemonSetStrategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { +func (daemonSetStrategy) PrepareForUpdate(ctx genericapirequest.Context, obj, old runtime.Object) { newDaemonSet := obj.(*extensions.DaemonSet) oldDaemonSet := old.(*extensions.DaemonSet) @@ -78,7 +79,7 @@ func (daemonSetStrategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Obje } // Validate validates a new daemon set. -func (daemonSetStrategy) Validate(ctx api.Context, obj runtime.Object) field.ErrorList { +func (daemonSetStrategy) Validate(ctx genericapirequest.Context, obj runtime.Object) field.ErrorList { daemonSet := obj.(*extensions.DaemonSet) return validation.ValidateDaemonSet(daemonSet) } @@ -94,7 +95,7 @@ func (daemonSetStrategy) AllowCreateOnUpdate() bool { } // ValidateUpdate is the default update validation for an end user. -func (daemonSetStrategy) ValidateUpdate(ctx api.Context, obj, old runtime.Object) field.ErrorList { +func (daemonSetStrategy) ValidateUpdate(ctx genericapirequest.Context, obj, old runtime.Object) field.ErrorList { validationErrorList := validation.ValidateDaemonSet(obj.(*extensions.DaemonSet)) updateErrorList := validation.ValidateDaemonSetUpdate(obj.(*extensions.DaemonSet), old.(*extensions.DaemonSet)) return append(validationErrorList, updateErrorList...) @@ -136,12 +137,12 @@ type daemonSetStatusStrategy struct { var StatusStrategy = daemonSetStatusStrategy{Strategy} -func (daemonSetStatusStrategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { +func (daemonSetStatusStrategy) PrepareForUpdate(ctx genericapirequest.Context, obj, old runtime.Object) { newDaemonSet := obj.(*extensions.DaemonSet) oldDaemonSet := old.(*extensions.DaemonSet) newDaemonSet.Spec = oldDaemonSet.Spec } -func (daemonSetStatusStrategy) ValidateUpdate(ctx api.Context, obj, old runtime.Object) field.ErrorList { +func (daemonSetStatusStrategy) ValidateUpdate(ctx genericapirequest.Context, obj, old runtime.Object) field.ErrorList { return validation.ValidateDaemonSetStatusUpdate(obj.(*extensions.DaemonSet), old.(*extensions.DaemonSet)) } diff --git a/pkg/registry/extensions/deployment/BUILD b/pkg/registry/extensions/deployment/BUILD index 187cb92c0c..1195b681d9 100644 --- a/pkg/registry/extensions/deployment/BUILD +++ b/pkg/registry/extensions/deployment/BUILD @@ -24,6 +24,7 @@ go_library( "//pkg/apis/meta/v1:go_default_library", "//pkg/controller/deployment/util:go_default_library", "//pkg/fields:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/labels:go_default_library", "//pkg/registry/generic:go_default_library", "//pkg/runtime:go_default_library", @@ -42,6 +43,7 @@ go_test( "//pkg/api/testapi:go_default_library", "//pkg/api/testing:go_default_library", "//pkg/apis/extensions:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/runtime:go_default_library", ], ) diff --git a/pkg/registry/extensions/deployment/etcd/BUILD b/pkg/registry/extensions/deployment/etcd/BUILD index 2563a5c55a..69d8e1513c 100644 --- a/pkg/registry/extensions/deployment/etcd/BUILD +++ b/pkg/registry/extensions/deployment/etcd/BUILD @@ -20,6 +20,7 @@ go_library( "//pkg/apis/extensions:go_default_library", "//pkg/apis/extensions/validation:go_default_library", "//pkg/apis/meta/v1:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/registry/extensions/deployment:go_default_library", "//pkg/registry/generic:go_default_library", "//pkg/registry/generic/registry:go_default_library", @@ -41,6 +42,7 @@ go_test( "//pkg/apis/extensions:go_default_library", "//pkg/apis/meta/v1:go_default_library", "//pkg/fields:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/labels:go_default_library", "//pkg/registry/generic:go_default_library", "//pkg/registry/registrytest:go_default_library", diff --git a/pkg/registry/extensions/deployment/etcd/etcd.go b/pkg/registry/extensions/deployment/etcd/etcd.go index 18ba22208e..f00218ee1a 100644 --- a/pkg/registry/extensions/deployment/etcd/etcd.go +++ b/pkg/registry/extensions/deployment/etcd/etcd.go @@ -27,6 +27,7 @@ import ( "k8s.io/kubernetes/pkg/apis/extensions" extvalidation "k8s.io/kubernetes/pkg/apis/extensions/validation" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/registry/extensions/deployment" "k8s.io/kubernetes/pkg/registry/generic" genericregistry "k8s.io/kubernetes/pkg/registry/generic/registry" @@ -93,12 +94,12 @@ func (r *StatusREST) New() runtime.Object { } // Get retrieves the object from the storage. It is required to support Patch. -func (r *StatusREST) Get(ctx api.Context, name string, options *metav1.GetOptions) (runtime.Object, error) { +func (r *StatusREST) Get(ctx genericapirequest.Context, name string, options *metav1.GetOptions) (runtime.Object, error) { return r.store.Get(ctx, name, options) } // Update alters the status subset of an object. -func (r *StatusREST) Update(ctx api.Context, name string, objInfo rest.UpdatedObjectInfo) (runtime.Object, bool, error) { +func (r *StatusREST) Update(ctx genericapirequest.Context, name string, objInfo rest.UpdatedObjectInfo) (runtime.Object, bool, error) { return r.store.Update(ctx, name, objInfo) } @@ -114,7 +115,7 @@ func (r *RollbackREST) New() runtime.Object { var _ = rest.Creater(&RollbackREST{}) -func (r *RollbackREST) Create(ctx api.Context, obj runtime.Object) (runtime.Object, error) { +func (r *RollbackREST) Create(ctx genericapirequest.Context, obj runtime.Object) (runtime.Object, error) { rollback, ok := obj.(*extensions.DeploymentRollback) if !ok { return nil, errors.NewBadRequest(fmt.Sprintf("not a DeploymentRollback: %#v", obj)) @@ -135,7 +136,7 @@ func (r *RollbackREST) Create(ctx api.Context, obj runtime.Object) (runtime.Obje }, nil } -func (r *RollbackREST) rollbackDeployment(ctx api.Context, deploymentID string, config *extensions.RollbackConfig, annotations map[string]string) error { +func (r *RollbackREST) rollbackDeployment(ctx genericapirequest.Context, deploymentID string, config *extensions.RollbackConfig, annotations map[string]string) error { if _, err := r.setDeploymentRollback(ctx, deploymentID, config, annotations); err != nil { err = storeerr.InterpretGetError(err, extensions.Resource("deployments"), deploymentID) err = storeerr.InterpretUpdateError(err, extensions.Resource("deployments"), deploymentID) @@ -147,7 +148,7 @@ func (r *RollbackREST) rollbackDeployment(ctx api.Context, deploymentID string, return nil } -func (r *RollbackREST) setDeploymentRollback(ctx api.Context, deploymentID string, config *extensions.RollbackConfig, annotations map[string]string) (*extensions.Deployment, error) { +func (r *RollbackREST) setDeploymentRollback(ctx genericapirequest.Context, deploymentID string, config *extensions.RollbackConfig, annotations map[string]string) (*extensions.Deployment, error) { dKey, err := r.store.KeyFunc(ctx, deploymentID) if err != nil { return nil, err @@ -183,7 +184,7 @@ func (r *ScaleREST) New() runtime.Object { return &extensions.Scale{} } -func (r *ScaleREST) Get(ctx api.Context, name string, options *metav1.GetOptions) (runtime.Object, error) { +func (r *ScaleREST) Get(ctx genericapirequest.Context, name string, options *metav1.GetOptions) (runtime.Object, error) { deployment, err := r.registry.GetDeployment(ctx, name, options) if err != nil { return nil, errors.NewNotFound(extensions.Resource("deployments/scale"), name) @@ -195,7 +196,7 @@ func (r *ScaleREST) Get(ctx api.Context, name string, options *metav1.GetOptions return scale, nil } -func (r *ScaleREST) Update(ctx api.Context, name string, objInfo rest.UpdatedObjectInfo) (runtime.Object, bool, error) { +func (r *ScaleREST) Update(ctx genericapirequest.Context, name string, objInfo rest.UpdatedObjectInfo) (runtime.Object, bool, error) { deployment, err := r.registry.GetDeployment(ctx, name, &metav1.GetOptions{}) if err != nil { return nil, false, errors.NewNotFound(extensions.Resource("deployments/scale"), name) diff --git a/pkg/registry/extensions/deployment/etcd/etcd_test.go b/pkg/registry/extensions/deployment/etcd/etcd_test.go index cd757dd410..f45e94de24 100644 --- a/pkg/registry/extensions/deployment/etcd/etcd_test.go +++ b/pkg/registry/extensions/deployment/etcd/etcd_test.go @@ -27,6 +27,7 @@ import ( "k8s.io/kubernetes/pkg/apis/extensions" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" "k8s.io/kubernetes/pkg/fields" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/registry/generic" "k8s.io/kubernetes/pkg/registry/registrytest" @@ -197,7 +198,7 @@ func TestScaleGet(t *testing.T) { defer server.Terminate(t) defer storage.Deployment.Store.DestroyFunc() var deployment extensions.Deployment - ctx := api.WithNamespace(api.NewContext(), namespace) + ctx := genericapirequest.WithNamespace(genericapirequest.NewContext(), namespace) key := "/deployments/" + namespace + "/" + name if err := storage.Deployment.Storage.Create(ctx, key, &validDeployment, &deployment, 0); err != nil { t.Fatalf("error setting new deployment (key: %s) %v: %v", key, validDeployment, err) @@ -234,7 +235,7 @@ func TestScaleUpdate(t *testing.T) { defer server.Terminate(t) defer storage.Deployment.Store.DestroyFunc() var deployment extensions.Deployment - ctx := api.WithNamespace(api.NewContext(), namespace) + ctx := genericapirequest.WithNamespace(genericapirequest.NewContext(), namespace) key := "/deployments/" + namespace + "/" + name if err := storage.Deployment.Storage.Create(ctx, key, &validDeployment, &deployment, 0); err != nil { t.Fatalf("error setting new deployment (key: %s) %v: %v", key, validDeployment, err) @@ -271,7 +272,7 @@ func TestStatusUpdate(t *testing.T) { storage, server := newStorage(t) defer server.Terminate(t) defer storage.Deployment.Store.DestroyFunc() - ctx := api.WithNamespace(api.NewContext(), namespace) + ctx := genericapirequest.WithNamespace(genericapirequest.NewContext(), namespace) key := "/deployments/" + namespace + "/" + name if err := storage.Deployment.Storage.Create(ctx, key, &validDeployment, nil, 0); err != nil { t.Fatalf("unexpected error: %v", err) @@ -304,7 +305,7 @@ func TestStatusUpdate(t *testing.T) { } func TestEtcdCreateDeploymentRollback(t *testing.T) { - ctx := api.WithNamespace(api.NewContext(), namespace) + ctx := genericapirequest.WithNamespace(genericapirequest.NewContext(), namespace) testCases := map[string]struct { rollback extensions.DeploymentRollback @@ -363,7 +364,7 @@ func TestEtcdCreateDeploymentRollbackNoDeployment(t *testing.T) { defer server.Terminate(t) defer storage.Deployment.Store.DestroyFunc() rollbackStorage := storage.Rollback - ctx := api.WithNamespace(api.NewContext(), namespace) + ctx := genericapirequest.WithNamespace(genericapirequest.NewContext(), namespace) _, err := rollbackStorage.Create(ctx, &extensions.DeploymentRollback{ Name: name, diff --git a/pkg/registry/extensions/deployment/registry.go b/pkg/registry/extensions/deployment/registry.go index bd4ace1d48..492a59322a 100644 --- a/pkg/registry/extensions/deployment/registry.go +++ b/pkg/registry/extensions/deployment/registry.go @@ -23,15 +23,16 @@ import ( "k8s.io/kubernetes/pkg/api/rest" "k8s.io/kubernetes/pkg/apis/extensions" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" ) // Registry is an interface for things that know how to store Deployments. type Registry interface { - ListDeployments(ctx api.Context, options *api.ListOptions) (*extensions.DeploymentList, error) - GetDeployment(ctx api.Context, deploymentID string, options *metav1.GetOptions) (*extensions.Deployment, error) - CreateDeployment(ctx api.Context, deployment *extensions.Deployment) (*extensions.Deployment, error) - UpdateDeployment(ctx api.Context, deployment *extensions.Deployment) (*extensions.Deployment, error) - DeleteDeployment(ctx api.Context, deploymentID string) error + ListDeployments(ctx genericapirequest.Context, options *api.ListOptions) (*extensions.DeploymentList, error) + GetDeployment(ctx genericapirequest.Context, deploymentID string, options *metav1.GetOptions) (*extensions.Deployment, error) + CreateDeployment(ctx genericapirequest.Context, deployment *extensions.Deployment) (*extensions.Deployment, error) + UpdateDeployment(ctx genericapirequest.Context, deployment *extensions.Deployment) (*extensions.Deployment, error) + DeleteDeployment(ctx genericapirequest.Context, deploymentID string) error } // storage puts strong typing around storage calls @@ -44,7 +45,7 @@ func NewRegistry(s rest.StandardStorage) Registry { return &storage{s} } -func (s *storage) ListDeployments(ctx api.Context, options *api.ListOptions) (*extensions.DeploymentList, error) { +func (s *storage) ListDeployments(ctx genericapirequest.Context, options *api.ListOptions) (*extensions.DeploymentList, error) { if options != nil && options.FieldSelector != nil && !options.FieldSelector.Empty() { return nil, fmt.Errorf("field selector not supported yet") } @@ -55,7 +56,7 @@ func (s *storage) ListDeployments(ctx api.Context, options *api.ListOptions) (*e return obj.(*extensions.DeploymentList), err } -func (s *storage) GetDeployment(ctx api.Context, deploymentID string, options *metav1.GetOptions) (*extensions.Deployment, error) { +func (s *storage) GetDeployment(ctx genericapirequest.Context, deploymentID string, options *metav1.GetOptions) (*extensions.Deployment, error) { obj, err := s.Get(ctx, deploymentID, options) if err != nil { return nil, err @@ -63,7 +64,7 @@ func (s *storage) GetDeployment(ctx api.Context, deploymentID string, options *m return obj.(*extensions.Deployment), nil } -func (s *storage) CreateDeployment(ctx api.Context, deployment *extensions.Deployment) (*extensions.Deployment, error) { +func (s *storage) CreateDeployment(ctx genericapirequest.Context, deployment *extensions.Deployment) (*extensions.Deployment, error) { obj, err := s.Create(ctx, deployment) if err != nil { return nil, err @@ -71,7 +72,7 @@ func (s *storage) CreateDeployment(ctx api.Context, deployment *extensions.Deplo return obj.(*extensions.Deployment), nil } -func (s *storage) UpdateDeployment(ctx api.Context, deployment *extensions.Deployment) (*extensions.Deployment, error) { +func (s *storage) UpdateDeployment(ctx genericapirequest.Context, deployment *extensions.Deployment) (*extensions.Deployment, error) { obj, _, err := s.Update(ctx, deployment.Name, rest.DefaultUpdatedObjectInfo(deployment, api.Scheme)) if err != nil { return nil, err @@ -79,7 +80,7 @@ func (s *storage) UpdateDeployment(ctx api.Context, deployment *extensions.Deplo return obj.(*extensions.Deployment), nil } -func (s *storage) DeleteDeployment(ctx api.Context, deploymentID string) error { +func (s *storage) DeleteDeployment(ctx genericapirequest.Context, deploymentID string) error { _, err := s.Delete(ctx, deploymentID, nil) return err } diff --git a/pkg/registry/extensions/deployment/strategy.go b/pkg/registry/extensions/deployment/strategy.go index fde2718ab2..c6d5dae7e3 100644 --- a/pkg/registry/extensions/deployment/strategy.go +++ b/pkg/registry/extensions/deployment/strategy.go @@ -28,6 +28,7 @@ import ( metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" "k8s.io/kubernetes/pkg/controller/deployment/util" "k8s.io/kubernetes/pkg/fields" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/registry/generic" "k8s.io/kubernetes/pkg/runtime" @@ -57,14 +58,14 @@ func (deploymentStrategy) NamespaceScoped() bool { } // PrepareForCreate clears fields that are not allowed to be set by end users on creation. -func (deploymentStrategy) PrepareForCreate(ctx api.Context, obj runtime.Object) { +func (deploymentStrategy) PrepareForCreate(ctx genericapirequest.Context, obj runtime.Object) { deployment := obj.(*extensions.Deployment) deployment.Status = extensions.DeploymentStatus{} deployment.Generation = 1 } // Validate validates a new deployment. -func (deploymentStrategy) Validate(ctx api.Context, obj runtime.Object) field.ErrorList { +func (deploymentStrategy) Validate(ctx genericapirequest.Context, obj runtime.Object) field.ErrorList { deployment := obj.(*extensions.Deployment) return validation.ValidateDeployment(deployment) } @@ -79,7 +80,7 @@ func (deploymentStrategy) AllowCreateOnUpdate() bool { } // PrepareForUpdate clears fields that are not allowed to be set by end users on update. -func (deploymentStrategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { +func (deploymentStrategy) PrepareForUpdate(ctx genericapirequest.Context, obj, old runtime.Object) { newDeployment := obj.(*extensions.Deployment) oldDeployment := old.(*extensions.Deployment) newDeployment.Status = oldDeployment.Status @@ -103,7 +104,7 @@ func (deploymentStrategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Obj } // ValidateUpdate is the default update validation for an end user. -func (deploymentStrategy) ValidateUpdate(ctx api.Context, obj, old runtime.Object) field.ErrorList { +func (deploymentStrategy) ValidateUpdate(ctx genericapirequest.Context, obj, old runtime.Object) field.ErrorList { return validation.ValidateDeploymentUpdate(obj.(*extensions.Deployment), old.(*extensions.Deployment)) } @@ -118,7 +119,7 @@ type deploymentStatusStrategy struct { var StatusStrategy = deploymentStatusStrategy{Strategy} // PrepareForUpdate clears fields that are not allowed to be set by end users on update of status -func (deploymentStatusStrategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { +func (deploymentStatusStrategy) PrepareForUpdate(ctx genericapirequest.Context, obj, old runtime.Object) { newDeployment := obj.(*extensions.Deployment) oldDeployment := old.(*extensions.Deployment) newDeployment.Spec = oldDeployment.Spec @@ -126,7 +127,7 @@ func (deploymentStatusStrategy) PrepareForUpdate(ctx api.Context, obj, old runti } // ValidateUpdate is the default update validation for an end user updating status -func (deploymentStatusStrategy) ValidateUpdate(ctx api.Context, obj, old runtime.Object) field.ErrorList { +func (deploymentStatusStrategy) ValidateUpdate(ctx genericapirequest.Context, obj, old runtime.Object) field.ErrorList { return validation.ValidateDeploymentStatusUpdate(obj.(*extensions.Deployment), old.(*extensions.Deployment)) } diff --git a/pkg/registry/extensions/deployment/strategy_test.go b/pkg/registry/extensions/deployment/strategy_test.go index 6e07902e56..d3341b5627 100644 --- a/pkg/registry/extensions/deployment/strategy_test.go +++ b/pkg/registry/extensions/deployment/strategy_test.go @@ -24,6 +24,7 @@ import ( "k8s.io/kubernetes/pkg/api/testapi" apitesting "k8s.io/kubernetes/pkg/api/testing" "k8s.io/kubernetes/pkg/apis/extensions" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/runtime" ) @@ -55,7 +56,7 @@ func TestStatusUpdates(t *testing.T) { } for _, test := range tests { - deploymentStatusStrategy{}.PrepareForUpdate(api.NewContext(), test.obj, test.old) + deploymentStatusStrategy{}.PrepareForUpdate(genericapirequest.NewContext(), test.obj, test.old) if !reflect.DeepEqual(test.expected, test.obj) { t.Errorf("Unexpected object mismatch! Expected:\n%#v\ngot:\n%#v", test.expected, test.obj) } diff --git a/pkg/registry/extensions/ingress/BUILD b/pkg/registry/extensions/ingress/BUILD index 487c48298b..1739be1a7a 100644 --- a/pkg/registry/extensions/ingress/BUILD +++ b/pkg/registry/extensions/ingress/BUILD @@ -20,6 +20,7 @@ go_library( "//pkg/apis/extensions:go_default_library", "//pkg/apis/extensions/validation:go_default_library", "//pkg/fields:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/labels:go_default_library", "//pkg/registry/generic:go_default_library", "//pkg/runtime:go_default_library", @@ -38,6 +39,7 @@ go_test( "//pkg/api/testapi:go_default_library", "//pkg/api/testing:go_default_library", "//pkg/apis/extensions:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/util/intstr:go_default_library", ], ) diff --git a/pkg/registry/extensions/ingress/etcd/BUILD b/pkg/registry/extensions/ingress/etcd/BUILD index ea91c48156..c0c7026ca7 100644 --- a/pkg/registry/extensions/ingress/etcd/BUILD +++ b/pkg/registry/extensions/ingress/etcd/BUILD @@ -13,10 +13,10 @@ go_library( srcs = ["etcd.go"], tags = ["automanaged"], deps = [ - "//pkg/api:go_default_library", "//pkg/api/rest:go_default_library", "//pkg/apis/extensions:go_default_library", "//pkg/apis/meta/v1:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/registry/extensions/ingress:go_default_library", "//pkg/registry/generic:go_default_library", "//pkg/registry/generic/registry:go_default_library", diff --git a/pkg/registry/extensions/ingress/etcd/etcd.go b/pkg/registry/extensions/ingress/etcd/etcd.go index f0652ec66f..cd19d8f3f6 100644 --- a/pkg/registry/extensions/ingress/etcd/etcd.go +++ b/pkg/registry/extensions/ingress/etcd/etcd.go @@ -17,10 +17,10 @@ limitations under the License. package etcd import ( - "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/rest" "k8s.io/kubernetes/pkg/apis/extensions" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/registry/extensions/ingress" "k8s.io/kubernetes/pkg/registry/generic" genericregistry "k8s.io/kubernetes/pkg/registry/generic/registry" @@ -67,11 +67,11 @@ func (r *StatusREST) New() runtime.Object { } // Get retrieves the object from the storage. It is required to support Patch. -func (r *StatusREST) Get(ctx api.Context, name string, options *metav1.GetOptions) (runtime.Object, error) { +func (r *StatusREST) Get(ctx genericapirequest.Context, name string, options *metav1.GetOptions) (runtime.Object, error) { return r.store.Get(ctx, name, options) } // Update alters the status subset of an object. -func (r *StatusREST) Update(ctx api.Context, name string, objInfo rest.UpdatedObjectInfo) (runtime.Object, bool, error) { +func (r *StatusREST) Update(ctx genericapirequest.Context, name string, objInfo rest.UpdatedObjectInfo) (runtime.Object, bool, error) { return r.store.Update(ctx, name, objInfo) } diff --git a/pkg/registry/extensions/ingress/strategy.go b/pkg/registry/extensions/ingress/strategy.go index d18347a744..8bf8304285 100644 --- a/pkg/registry/extensions/ingress/strategy.go +++ b/pkg/registry/extensions/ingress/strategy.go @@ -24,6 +24,7 @@ import ( "k8s.io/kubernetes/pkg/apis/extensions" "k8s.io/kubernetes/pkg/apis/extensions/validation" "k8s.io/kubernetes/pkg/fields" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/registry/generic" "k8s.io/kubernetes/pkg/runtime" @@ -46,7 +47,7 @@ func (ingressStrategy) NamespaceScoped() bool { } // PrepareForCreate clears the status of an Ingress before creation. -func (ingressStrategy) PrepareForCreate(ctx api.Context, obj runtime.Object) { +func (ingressStrategy) PrepareForCreate(ctx genericapirequest.Context, obj runtime.Object) { ingress := obj.(*extensions.Ingress) // create cannot set status ingress.Status = extensions.IngressStatus{} @@ -55,7 +56,7 @@ func (ingressStrategy) PrepareForCreate(ctx api.Context, obj runtime.Object) { } // PrepareForUpdate clears fields that are not allowed to be set by end users on update. -func (ingressStrategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { +func (ingressStrategy) PrepareForUpdate(ctx genericapirequest.Context, obj, old runtime.Object) { newIngress := obj.(*extensions.Ingress) oldIngress := old.(*extensions.Ingress) // Update is not allowed to set status @@ -71,7 +72,7 @@ func (ingressStrategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object } // Validate validates a new Ingress. -func (ingressStrategy) Validate(ctx api.Context, obj runtime.Object) field.ErrorList { +func (ingressStrategy) Validate(ctx genericapirequest.Context, obj runtime.Object) field.ErrorList { ingress := obj.(*extensions.Ingress) err := validation.ValidateIngress(ingress) return err @@ -87,7 +88,7 @@ func (ingressStrategy) AllowCreateOnUpdate() bool { } // ValidateUpdate is the default update validation for an end user. -func (ingressStrategy) ValidateUpdate(ctx api.Context, obj, old runtime.Object) field.ErrorList { +func (ingressStrategy) ValidateUpdate(ctx genericapirequest.Context, obj, old runtime.Object) field.ErrorList { validationErrorList := validation.ValidateIngress(obj.(*extensions.Ingress)) updateErrorList := validation.ValidateIngressUpdate(obj.(*extensions.Ingress), old.(*extensions.Ingress)) return append(validationErrorList, updateErrorList...) @@ -130,7 +131,7 @@ type ingressStatusStrategy struct { var StatusStrategy = ingressStatusStrategy{Strategy} // PrepareForUpdate clears fields that are not allowed to be set by end users on update of status -func (ingressStatusStrategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { +func (ingressStatusStrategy) PrepareForUpdate(ctx genericapirequest.Context, obj, old runtime.Object) { newIngress := obj.(*extensions.Ingress) oldIngress := old.(*extensions.Ingress) // status changes are not allowed to update spec @@ -138,6 +139,6 @@ func (ingressStatusStrategy) PrepareForUpdate(ctx api.Context, obj, old runtime. } // ValidateUpdate is the default update validation for an end user updating status -func (ingressStatusStrategy) ValidateUpdate(ctx api.Context, obj, old runtime.Object) field.ErrorList { +func (ingressStatusStrategy) ValidateUpdate(ctx genericapirequest.Context, obj, old runtime.Object) field.ErrorList { return validation.ValidateIngressStatusUpdate(obj.(*extensions.Ingress), old.(*extensions.Ingress)) } diff --git a/pkg/registry/extensions/ingress/strategy_test.go b/pkg/registry/extensions/ingress/strategy_test.go index cc2494541f..ea379c79eb 100644 --- a/pkg/registry/extensions/ingress/strategy_test.go +++ b/pkg/registry/extensions/ingress/strategy_test.go @@ -23,6 +23,7 @@ import ( "k8s.io/kubernetes/pkg/api/testapi" apitesting "k8s.io/kubernetes/pkg/api/testing" "k8s.io/kubernetes/pkg/apis/extensions" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/util/intstr" ) @@ -68,7 +69,7 @@ func newIngress() extensions.Ingress { } func TestIngressStrategy(t *testing.T) { - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() if !Strategy.NamespaceScoped() { t.Errorf("Ingress must be namespace scoped") } @@ -99,7 +100,7 @@ func TestIngressStrategy(t *testing.T) { } func TestIngressStatusStrategy(t *testing.T) { - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() if !StatusStrategy.NamespaceScoped() { t.Errorf("Ingress must be namespace scoped") } diff --git a/pkg/registry/extensions/networkpolicy/BUILD b/pkg/registry/extensions/networkpolicy/BUILD index 60bd206519..2855ec8a73 100644 --- a/pkg/registry/extensions/networkpolicy/BUILD +++ b/pkg/registry/extensions/networkpolicy/BUILD @@ -20,6 +20,7 @@ go_library( "//pkg/apis/extensions:go_default_library", "//pkg/apis/extensions/validation:go_default_library", "//pkg/fields:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/labels:go_default_library", "//pkg/registry/generic:go_default_library", "//pkg/runtime:go_default_library", @@ -37,5 +38,6 @@ go_test( "//pkg/api:go_default_library", "//pkg/apis/extensions:go_default_library", "//pkg/apis/meta/v1:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", ], ) diff --git a/pkg/registry/extensions/networkpolicy/etcd/BUILD b/pkg/registry/extensions/networkpolicy/etcd/BUILD index ec258a2c0e..a2425f0a4f 100644 --- a/pkg/registry/extensions/networkpolicy/etcd/BUILD +++ b/pkg/registry/extensions/networkpolicy/etcd/BUILD @@ -31,6 +31,7 @@ go_test( "//pkg/apis/extensions:go_default_library", "//pkg/apis/meta/v1:go_default_library", "//pkg/fields:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/labels:go_default_library", "//pkg/registry/generic:go_default_library", "//pkg/registry/registrytest:go_default_library", diff --git a/pkg/registry/extensions/networkpolicy/etcd/etcd_test.go b/pkg/registry/extensions/networkpolicy/etcd/etcd_test.go index d4cd8849e2..28907b4147 100644 --- a/pkg/registry/extensions/networkpolicy/etcd/etcd_test.go +++ b/pkg/registry/extensions/networkpolicy/etcd/etcd_test.go @@ -23,6 +23,7 @@ import ( "k8s.io/kubernetes/pkg/apis/extensions" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" "k8s.io/kubernetes/pkg/fields" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/registry/generic" "k8s.io/kubernetes/pkg/registry/registrytest" @@ -44,7 +45,7 @@ func newStorage(t *testing.T) (*REST, *etcdtesting.EtcdTestServer) { // createNetworkPolicy is a helper function that returns a NetworkPolicy with the updated resource version. func createNetworkPolicy(storage *REST, np extensions.NetworkPolicy, t *testing.T) (extensions.NetworkPolicy, error) { - ctx := api.WithNamespace(api.NewContext(), np.Namespace) + ctx := genericapirequest.WithNamespace(genericapirequest.NewContext(), np.Namespace) obj, err := storage.Create(ctx, &np) if err != nil { t.Errorf("Failed to create NetworkPolicy, %v", err) diff --git a/pkg/registry/extensions/networkpolicy/strategy.go b/pkg/registry/extensions/networkpolicy/strategy.go index ffc80f3811..62216f7806 100644 --- a/pkg/registry/extensions/networkpolicy/strategy.go +++ b/pkg/registry/extensions/networkpolicy/strategy.go @@ -24,6 +24,7 @@ import ( "k8s.io/kubernetes/pkg/apis/extensions" "k8s.io/kubernetes/pkg/apis/extensions/validation" "k8s.io/kubernetes/pkg/fields" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/registry/generic" "k8s.io/kubernetes/pkg/runtime" @@ -46,13 +47,13 @@ func (networkPolicyStrategy) NamespaceScoped() bool { } // PrepareForCreate clears the status of an NetworkPolicy before creation. -func (networkPolicyStrategy) PrepareForCreate(ctx api.Context, obj runtime.Object) { +func (networkPolicyStrategy) PrepareForCreate(ctx genericapirequest.Context, obj runtime.Object) { networkPolicy := obj.(*extensions.NetworkPolicy) networkPolicy.Generation = 1 } // PrepareForUpdate clears fields that are not allowed to be set by end users on update. -func (networkPolicyStrategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { +func (networkPolicyStrategy) PrepareForUpdate(ctx genericapirequest.Context, obj, old runtime.Object) { newNetworkPolicy := obj.(*extensions.NetworkPolicy) oldNetworkPolicy := old.(*extensions.NetworkPolicy) @@ -65,7 +66,7 @@ func (networkPolicyStrategy) PrepareForUpdate(ctx api.Context, obj, old runtime. } // Validate validates a new NetworkPolicy. -func (networkPolicyStrategy) Validate(ctx api.Context, obj runtime.Object) field.ErrorList { +func (networkPolicyStrategy) Validate(ctx genericapirequest.Context, obj runtime.Object) field.ErrorList { networkPolicy := obj.(*extensions.NetworkPolicy) return validation.ValidateNetworkPolicy(networkPolicy) } @@ -80,7 +81,7 @@ func (networkPolicyStrategy) AllowCreateOnUpdate() bool { } // ValidateUpdate is the default update validation for an end user. -func (networkPolicyStrategy) ValidateUpdate(ctx api.Context, obj, old runtime.Object) field.ErrorList { +func (networkPolicyStrategy) ValidateUpdate(ctx genericapirequest.Context, obj, old runtime.Object) field.ErrorList { validationErrorList := validation.ValidateNetworkPolicy(obj.(*extensions.NetworkPolicy)) updateErrorList := validation.ValidateNetworkPolicyUpdate(obj.(*extensions.NetworkPolicy), old.(*extensions.NetworkPolicy)) return append(validationErrorList, updateErrorList...) diff --git a/pkg/registry/extensions/networkpolicy/strategy_test.go b/pkg/registry/extensions/networkpolicy/strategy_test.go index f957cfa53d..a2b041daf8 100644 --- a/pkg/registry/extensions/networkpolicy/strategy_test.go +++ b/pkg/registry/extensions/networkpolicy/strategy_test.go @@ -22,10 +22,11 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/apis/extensions" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" ) func TestNetworkPolicyStrategy(t *testing.T) { - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() if !Strategy.NamespaceScoped() { t.Errorf("NetworkPolicy must be namespace scoped") } diff --git a/pkg/registry/extensions/podsecuritypolicy/BUILD b/pkg/registry/extensions/podsecuritypolicy/BUILD index f164a156b1..baa0a5279e 100644 --- a/pkg/registry/extensions/podsecuritypolicy/BUILD +++ b/pkg/registry/extensions/podsecuritypolicy/BUILD @@ -20,6 +20,7 @@ go_library( "//pkg/apis/extensions:go_default_library", "//pkg/apis/extensions/validation:go_default_library", "//pkg/fields:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/labels:go_default_library", "//pkg/registry/generic:go_default_library", "//pkg/runtime:go_default_library", diff --git a/pkg/registry/extensions/podsecuritypolicy/strategy.go b/pkg/registry/extensions/podsecuritypolicy/strategy.go index 1238860da7..e2b80a15e0 100644 --- a/pkg/registry/extensions/podsecuritypolicy/strategy.go +++ b/pkg/registry/extensions/podsecuritypolicy/strategy.go @@ -24,6 +24,7 @@ import ( "k8s.io/kubernetes/pkg/apis/extensions" "k8s.io/kubernetes/pkg/apis/extensions/validation" "k8s.io/kubernetes/pkg/fields" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/registry/generic" "k8s.io/kubernetes/pkg/runtime" @@ -57,20 +58,20 @@ func (strategy) AllowUnconditionalUpdate() bool { return true } -func (strategy) PrepareForCreate(ctx api.Context, obj runtime.Object) { +func (strategy) PrepareForCreate(ctx genericapirequest.Context, obj runtime.Object) { } -func (strategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { +func (strategy) PrepareForUpdate(ctx genericapirequest.Context, obj, old runtime.Object) { } func (strategy) Canonicalize(obj runtime.Object) { } -func (strategy) Validate(ctx api.Context, obj runtime.Object) field.ErrorList { +func (strategy) Validate(ctx genericapirequest.Context, obj runtime.Object) field.ErrorList { return validation.ValidatePodSecurityPolicy(obj.(*extensions.PodSecurityPolicy)) } -func (strategy) ValidateUpdate(ctx api.Context, obj, old runtime.Object) field.ErrorList { +func (strategy) ValidateUpdate(ctx genericapirequest.Context, obj, old runtime.Object) field.ErrorList { return validation.ValidatePodSecurityPolicyUpdate(old.(*extensions.PodSecurityPolicy), obj.(*extensions.PodSecurityPolicy)) } diff --git a/pkg/registry/extensions/replicaset/BUILD b/pkg/registry/extensions/replicaset/BUILD index 023d15acf4..169dda93a3 100644 --- a/pkg/registry/extensions/replicaset/BUILD +++ b/pkg/registry/extensions/replicaset/BUILD @@ -23,6 +23,7 @@ go_library( "//pkg/apis/extensions/validation:go_default_library", "//pkg/apis/meta/v1:go_default_library", "//pkg/fields:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/labels:go_default_library", "//pkg/registry/generic:go_default_library", "//pkg/runtime:go_default_library", @@ -41,5 +42,6 @@ go_test( "//pkg/api:go_default_library", "//pkg/apis/extensions:go_default_library", "//pkg/apis/meta/v1:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", ], ) diff --git a/pkg/registry/extensions/replicaset/etcd/BUILD b/pkg/registry/extensions/replicaset/etcd/BUILD index 0e86353853..b6cbed0b59 100644 --- a/pkg/registry/extensions/replicaset/etcd/BUILD +++ b/pkg/registry/extensions/replicaset/etcd/BUILD @@ -19,6 +19,7 @@ go_library( "//pkg/apis/extensions:go_default_library", "//pkg/apis/extensions/validation:go_default_library", "//pkg/apis/meta/v1:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/registry/extensions/replicaset:go_default_library", "//pkg/registry/generic:go_default_library", "//pkg/registry/generic/registry:go_default_library", @@ -38,6 +39,7 @@ go_test( "//pkg/apis/extensions:go_default_library", "//pkg/apis/meta/v1:go_default_library", "//pkg/fields:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/labels:go_default_library", "//pkg/registry/generic:go_default_library", "//pkg/registry/registrytest:go_default_library", diff --git a/pkg/registry/extensions/replicaset/etcd/etcd.go b/pkg/registry/extensions/replicaset/etcd/etcd.go index 7135a522b7..6193f16534 100644 --- a/pkg/registry/extensions/replicaset/etcd/etcd.go +++ b/pkg/registry/extensions/replicaset/etcd/etcd.go @@ -27,6 +27,7 @@ import ( "k8s.io/kubernetes/pkg/apis/extensions" extvalidation "k8s.io/kubernetes/pkg/apis/extensions/validation" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/registry/extensions/replicaset" "k8s.io/kubernetes/pkg/registry/generic" genericregistry "k8s.io/kubernetes/pkg/registry/generic/registry" @@ -91,12 +92,12 @@ func (r *StatusREST) New() runtime.Object { } // Get retrieves the object from the storage. It is required to support Patch. -func (r *StatusREST) Get(ctx api.Context, name string, options *metav1.GetOptions) (runtime.Object, error) { +func (r *StatusREST) Get(ctx genericapirequest.Context, name string, options *metav1.GetOptions) (runtime.Object, error) { return r.store.Get(ctx, name, options) } // Update alters the status subset of an object. -func (r *StatusREST) Update(ctx api.Context, name string, objInfo rest.UpdatedObjectInfo) (runtime.Object, bool, error) { +func (r *StatusREST) Update(ctx genericapirequest.Context, name string, objInfo rest.UpdatedObjectInfo) (runtime.Object, bool, error) { return r.store.Update(ctx, name, objInfo) } @@ -112,7 +113,7 @@ func (r *ScaleREST) New() runtime.Object { return &extensions.Scale{} } -func (r *ScaleREST) Get(ctx api.Context, name string, options *metav1.GetOptions) (runtime.Object, error) { +func (r *ScaleREST) Get(ctx genericapirequest.Context, name string, options *metav1.GetOptions) (runtime.Object, error) { rs, err := r.registry.GetReplicaSet(ctx, name, options) if err != nil { return nil, errors.NewNotFound(extensions.Resource("replicasets/scale"), name) @@ -124,7 +125,7 @@ func (r *ScaleREST) Get(ctx api.Context, name string, options *metav1.GetOptions return scale, err } -func (r *ScaleREST) Update(ctx api.Context, name string, objInfo rest.UpdatedObjectInfo) (runtime.Object, bool, error) { +func (r *ScaleREST) Update(ctx genericapirequest.Context, name string, objInfo rest.UpdatedObjectInfo) (runtime.Object, bool, error) { rs, err := r.registry.GetReplicaSet(ctx, name, &metav1.GetOptions{}) if err != nil { return nil, false, errors.NewNotFound(extensions.Resource("replicasets/scale"), name) diff --git a/pkg/registry/extensions/replicaset/etcd/etcd_test.go b/pkg/registry/extensions/replicaset/etcd/etcd_test.go index 9a6f0d1019..7f8e7d9051 100644 --- a/pkg/registry/extensions/replicaset/etcd/etcd_test.go +++ b/pkg/registry/extensions/replicaset/etcd/etcd_test.go @@ -25,6 +25,7 @@ import ( "k8s.io/kubernetes/pkg/apis/extensions" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" "k8s.io/kubernetes/pkg/fields" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/registry/generic" "k8s.io/kubernetes/pkg/registry/registrytest" @@ -44,7 +45,7 @@ func newStorage(t *testing.T) (*ReplicaSetStorage, *etcdtesting.EtcdTestServer) // createReplicaSet is a helper function that returns a ReplicaSet with the updated resource version. func createReplicaSet(storage *REST, rs extensions.ReplicaSet, t *testing.T) (extensions.ReplicaSet, error) { - ctx := api.WithNamespace(api.NewContext(), rs.Namespace) + ctx := genericapirequest.WithNamespace(genericapirequest.NewContext(), rs.Namespace) obj, err := storage.Create(ctx, &rs) if err != nil { t.Errorf("Failed to create ReplicaSet, %v", err) @@ -151,7 +152,7 @@ func TestGenerationNumber(t *testing.T) { modifiedSno := *validNewReplicaSet() modifiedSno.Generation = 100 modifiedSno.Status.ObservedGeneration = 10 - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() rs, err := createReplicaSet(storage.ReplicaSet, modifiedSno, t) etcdRS, err := storage.ReplicaSet.Get(ctx, rs.Name, &metav1.GetOptions{}) if err != nil { @@ -252,7 +253,7 @@ func TestScaleGet(t *testing.T) { name := "foo" var rs extensions.ReplicaSet - ctx := api.WithNamespace(api.NewContext(), api.NamespaceDefault) + ctx := genericapirequest.WithNamespace(genericapirequest.NewContext(), api.NamespaceDefault) key := "/replicasets/" + api.NamespaceDefault + "/" + name if err := storage.ReplicaSet.Storage.Create(ctx, key, &validReplicaSet, &rs, 0); err != nil { t.Fatalf("error setting new replica set (key: %s) %v: %v", key, validReplicaSet, err) @@ -292,7 +293,7 @@ func TestScaleUpdate(t *testing.T) { name := "foo" var rs extensions.ReplicaSet - ctx := api.WithNamespace(api.NewContext(), api.NamespaceDefault) + ctx := genericapirequest.WithNamespace(genericapirequest.NewContext(), api.NamespaceDefault) key := "/replicasets/" + api.NamespaceDefault + "/" + name if err := storage.ReplicaSet.Storage.Create(ctx, key, &validReplicaSet, &rs, 0); err != nil { t.Fatalf("error setting new replica set (key: %s) %v: %v", key, validReplicaSet, err) @@ -334,7 +335,7 @@ func TestStatusUpdate(t *testing.T) { defer server.Terminate(t) defer storage.ReplicaSet.Store.DestroyFunc() - ctx := api.WithNamespace(api.NewContext(), api.NamespaceDefault) + ctx := genericapirequest.WithNamespace(genericapirequest.NewContext(), api.NamespaceDefault) key := "/replicasets/" + api.NamespaceDefault + "/foo" if err := storage.ReplicaSet.Storage.Create(ctx, key, &validReplicaSet, nil, 0); err != nil { t.Fatalf("unexpected error: %v", err) diff --git a/pkg/registry/extensions/replicaset/registry.go b/pkg/registry/extensions/replicaset/registry.go index 319956bf8c..b5012c2e7e 100644 --- a/pkg/registry/extensions/replicaset/registry.go +++ b/pkg/registry/extensions/replicaset/registry.go @@ -25,17 +25,18 @@ import ( "k8s.io/kubernetes/pkg/api/rest" "k8s.io/kubernetes/pkg/apis/extensions" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/watch" ) // Registry is an interface for things that know how to store ReplicaSets. type Registry interface { - ListReplicaSets(ctx api.Context, options *api.ListOptions) (*extensions.ReplicaSetList, error) - WatchReplicaSets(ctx api.Context, options *api.ListOptions) (watch.Interface, error) - GetReplicaSet(ctx api.Context, replicaSetID string, options *metav1.GetOptions) (*extensions.ReplicaSet, error) - CreateReplicaSet(ctx api.Context, replicaSet *extensions.ReplicaSet) (*extensions.ReplicaSet, error) - UpdateReplicaSet(ctx api.Context, replicaSet *extensions.ReplicaSet) (*extensions.ReplicaSet, error) - DeleteReplicaSet(ctx api.Context, replicaSetID string) error + ListReplicaSets(ctx genericapirequest.Context, options *api.ListOptions) (*extensions.ReplicaSetList, error) + WatchReplicaSets(ctx genericapirequest.Context, options *api.ListOptions) (watch.Interface, error) + GetReplicaSet(ctx genericapirequest.Context, replicaSetID string, options *metav1.GetOptions) (*extensions.ReplicaSet, error) + CreateReplicaSet(ctx genericapirequest.Context, replicaSet *extensions.ReplicaSet) (*extensions.ReplicaSet, error) + UpdateReplicaSet(ctx genericapirequest.Context, replicaSet *extensions.ReplicaSet) (*extensions.ReplicaSet, error) + DeleteReplicaSet(ctx genericapirequest.Context, replicaSetID string) error } // storage puts strong typing around storage calls @@ -49,7 +50,7 @@ func NewRegistry(s rest.StandardStorage) Registry { return &storage{s} } -func (s *storage) ListReplicaSets(ctx api.Context, options *api.ListOptions) (*extensions.ReplicaSetList, error) { +func (s *storage) ListReplicaSets(ctx genericapirequest.Context, options *api.ListOptions) (*extensions.ReplicaSetList, error) { if options != nil && options.FieldSelector != nil && !options.FieldSelector.Empty() { return nil, fmt.Errorf("field selector not supported yet") } @@ -60,11 +61,11 @@ func (s *storage) ListReplicaSets(ctx api.Context, options *api.ListOptions) (*e return obj.(*extensions.ReplicaSetList), err } -func (s *storage) WatchReplicaSets(ctx api.Context, options *api.ListOptions) (watch.Interface, error) { +func (s *storage) WatchReplicaSets(ctx genericapirequest.Context, options *api.ListOptions) (watch.Interface, error) { return s.Watch(ctx, options) } -func (s *storage) GetReplicaSet(ctx api.Context, replicaSetID string, options *metav1.GetOptions) (*extensions.ReplicaSet, error) { +func (s *storage) GetReplicaSet(ctx genericapirequest.Context, replicaSetID string, options *metav1.GetOptions) (*extensions.ReplicaSet, error) { obj, err := s.Get(ctx, replicaSetID, options) if err != nil { return nil, err @@ -72,7 +73,7 @@ func (s *storage) GetReplicaSet(ctx api.Context, replicaSetID string, options *m return obj.(*extensions.ReplicaSet), nil } -func (s *storage) CreateReplicaSet(ctx api.Context, replicaSet *extensions.ReplicaSet) (*extensions.ReplicaSet, error) { +func (s *storage) CreateReplicaSet(ctx genericapirequest.Context, replicaSet *extensions.ReplicaSet) (*extensions.ReplicaSet, error) { obj, err := s.Create(ctx, replicaSet) if err != nil { return nil, err @@ -80,7 +81,7 @@ func (s *storage) CreateReplicaSet(ctx api.Context, replicaSet *extensions.Repli return obj.(*extensions.ReplicaSet), nil } -func (s *storage) UpdateReplicaSet(ctx api.Context, replicaSet *extensions.ReplicaSet) (*extensions.ReplicaSet, error) { +func (s *storage) UpdateReplicaSet(ctx genericapirequest.Context, replicaSet *extensions.ReplicaSet) (*extensions.ReplicaSet, error) { obj, _, err := s.Update(ctx, replicaSet.Name, rest.DefaultUpdatedObjectInfo(replicaSet, api.Scheme)) if err != nil { return nil, err @@ -88,7 +89,7 @@ func (s *storage) UpdateReplicaSet(ctx api.Context, replicaSet *extensions.Repli return obj.(*extensions.ReplicaSet), nil } -func (s *storage) DeleteReplicaSet(ctx api.Context, replicaSetID string) error { +func (s *storage) DeleteReplicaSet(ctx genericapirequest.Context, replicaSetID string) error { _, err := s.Delete(ctx, replicaSetID, nil) return err } diff --git a/pkg/registry/extensions/replicaset/strategy.go b/pkg/registry/extensions/replicaset/strategy.go index c94140a7ad..fb127eda01 100644 --- a/pkg/registry/extensions/replicaset/strategy.go +++ b/pkg/registry/extensions/replicaset/strategy.go @@ -28,6 +28,7 @@ import ( "k8s.io/kubernetes/pkg/apis/extensions" "k8s.io/kubernetes/pkg/apis/extensions/validation" "k8s.io/kubernetes/pkg/fields" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/registry/generic" "k8s.io/kubernetes/pkg/runtime" @@ -56,7 +57,7 @@ func (rsStrategy) NamespaceScoped() bool { } // PrepareForCreate clears the status of a ReplicaSet before creation. -func (rsStrategy) PrepareForCreate(ctx api.Context, obj runtime.Object) { +func (rsStrategy) PrepareForCreate(ctx genericapirequest.Context, obj runtime.Object) { rs := obj.(*extensions.ReplicaSet) rs.Status = extensions.ReplicaSetStatus{} @@ -64,7 +65,7 @@ func (rsStrategy) PrepareForCreate(ctx api.Context, obj runtime.Object) { } // PrepareForUpdate clears fields that are not allowed to be set by end users on update. -func (rsStrategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { +func (rsStrategy) PrepareForUpdate(ctx genericapirequest.Context, obj, old runtime.Object) { newRS := obj.(*extensions.ReplicaSet) oldRS := old.(*extensions.ReplicaSet) // update is not allowed to set status @@ -84,7 +85,7 @@ func (rsStrategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { } // Validate validates a new ReplicaSet. -func (rsStrategy) Validate(ctx api.Context, obj runtime.Object) field.ErrorList { +func (rsStrategy) Validate(ctx genericapirequest.Context, obj runtime.Object) field.ErrorList { rs := obj.(*extensions.ReplicaSet) return validation.ValidateReplicaSet(rs) } @@ -100,7 +101,7 @@ func (rsStrategy) AllowCreateOnUpdate() bool { } // ValidateUpdate is the default update validation for an end user. -func (rsStrategy) ValidateUpdate(ctx api.Context, obj, old runtime.Object) field.ErrorList { +func (rsStrategy) ValidateUpdate(ctx genericapirequest.Context, obj, old runtime.Object) field.ErrorList { validationErrorList := validation.ValidateReplicaSet(obj.(*extensions.ReplicaSet)) updateErrorList := validation.ValidateReplicaSetUpdate(obj.(*extensions.ReplicaSet), old.(*extensions.ReplicaSet)) return append(validationErrorList, updateErrorList...) @@ -145,13 +146,13 @@ type rsStatusStrategy struct { var StatusStrategy = rsStatusStrategy{Strategy} -func (rsStatusStrategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { +func (rsStatusStrategy) PrepareForUpdate(ctx genericapirequest.Context, obj, old runtime.Object) { newRS := obj.(*extensions.ReplicaSet) oldRS := old.(*extensions.ReplicaSet) // update is not allowed to set spec newRS.Spec = oldRS.Spec } -func (rsStatusStrategy) ValidateUpdate(ctx api.Context, obj, old runtime.Object) field.ErrorList { +func (rsStatusStrategy) ValidateUpdate(ctx genericapirequest.Context, obj, old runtime.Object) field.ErrorList { return validation.ValidateReplicaSetStatusUpdate(obj.(*extensions.ReplicaSet), old.(*extensions.ReplicaSet)) } diff --git a/pkg/registry/extensions/replicaset/strategy_test.go b/pkg/registry/extensions/replicaset/strategy_test.go index 3a5a1c7224..482c990889 100644 --- a/pkg/registry/extensions/replicaset/strategy_test.go +++ b/pkg/registry/extensions/replicaset/strategy_test.go @@ -22,10 +22,11 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/apis/extensions" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" ) func TestReplicaSetStrategy(t *testing.T) { - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() if !Strategy.NamespaceScoped() { t.Errorf("ReplicaSet must be namespace scoped") } @@ -84,7 +85,7 @@ func TestReplicaSetStrategy(t *testing.T) { } func TestReplicaSetStatusStrategy(t *testing.T) { - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() if !StatusStrategy.NamespaceScoped() { t.Errorf("ReplicaSet must be namespace scoped") } diff --git a/pkg/registry/extensions/thirdpartyresource/BUILD b/pkg/registry/extensions/thirdpartyresource/BUILD index 2a7b072a7f..49b71c052e 100644 --- a/pkg/registry/extensions/thirdpartyresource/BUILD +++ b/pkg/registry/extensions/thirdpartyresource/BUILD @@ -21,6 +21,7 @@ go_library( "//pkg/apis/extensions:go_default_library", "//pkg/apis/extensions/validation:go_default_library", "//pkg/fields:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/labels:go_default_library", "//pkg/runtime:go_default_library", "//pkg/storage:go_default_library", diff --git a/pkg/registry/extensions/thirdpartyresource/strategy.go b/pkg/registry/extensions/thirdpartyresource/strategy.go index 41d3b18282..2d50df6e4b 100644 --- a/pkg/registry/extensions/thirdpartyresource/strategy.go +++ b/pkg/registry/extensions/thirdpartyresource/strategy.go @@ -24,6 +24,7 @@ import ( "k8s.io/kubernetes/pkg/apis/extensions" "k8s.io/kubernetes/pkg/apis/extensions/validation" "k8s.io/kubernetes/pkg/fields" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/storage" @@ -51,10 +52,10 @@ func (strategy) GenerateName(base string) string { return "" } -func (strategy) PrepareForCreate(ctx api.Context, obj runtime.Object) { +func (strategy) PrepareForCreate(ctx genericapirequest.Context, obj runtime.Object) { } -func (strategy) Validate(ctx api.Context, obj runtime.Object) field.ErrorList { +func (strategy) Validate(ctx genericapirequest.Context, obj runtime.Object) field.ErrorList { return validation.ValidateThirdPartyResource(obj.(*extensions.ThirdPartyResource)) } @@ -66,10 +67,10 @@ func (strategy) AllowCreateOnUpdate() bool { return false } -func (strategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { +func (strategy) PrepareForUpdate(ctx genericapirequest.Context, obj, old runtime.Object) { } -func (strategy) ValidateUpdate(ctx api.Context, obj, old runtime.Object) field.ErrorList { +func (strategy) ValidateUpdate(ctx genericapirequest.Context, obj, old runtime.Object) field.ErrorList { return validation.ValidateThirdPartyResourceUpdate(obj.(*extensions.ThirdPartyResource), old.(*extensions.ThirdPartyResource)) } diff --git a/pkg/registry/extensions/thirdpartyresourcedata/BUILD b/pkg/registry/extensions/thirdpartyresourcedata/BUILD index e971ca8c32..fd2c928e52 100644 --- a/pkg/registry/extensions/thirdpartyresourcedata/BUILD +++ b/pkg/registry/extensions/thirdpartyresourcedata/BUILD @@ -30,6 +30,7 @@ go_library( "//pkg/apis/extensions/validation:go_default_library", "//pkg/apis/meta/v1:go_default_library", "//pkg/fields:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/labels:go_default_library", "//pkg/runtime:go_default_library", "//pkg/runtime/schema:go_default_library", diff --git a/pkg/registry/extensions/thirdpartyresourcedata/registry.go b/pkg/registry/extensions/thirdpartyresourcedata/registry.go index 810601d9e2..1072eb95bf 100644 --- a/pkg/registry/extensions/thirdpartyresourcedata/registry.go +++ b/pkg/registry/extensions/thirdpartyresourcedata/registry.go @@ -21,17 +21,18 @@ import ( "k8s.io/kubernetes/pkg/api/rest" "k8s.io/kubernetes/pkg/apis/extensions" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/watch" ) // Registry is an interface implemented by things that know how to store ThirdPartyResourceData objects. type Registry interface { - ListThirdPartyResourceData(ctx api.Context, options *api.ListOptions) (*extensions.ThirdPartyResourceDataList, error) - WatchThirdPartyResourceData(ctx api.Context, options *api.ListOptions) (watch.Interface, error) - GetThirdPartyResourceData(ctx api.Context, name string, options *metav1.GetOptions) (*extensions.ThirdPartyResourceData, error) - CreateThirdPartyResourceData(ctx api.Context, resource *extensions.ThirdPartyResourceData) (*extensions.ThirdPartyResourceData, error) - UpdateThirdPartyResourceData(ctx api.Context, resource *extensions.ThirdPartyResourceData) (*extensions.ThirdPartyResourceData, error) - DeleteThirdPartyResourceData(ctx api.Context, name string) error + ListThirdPartyResourceData(ctx genericapirequest.Context, options *api.ListOptions) (*extensions.ThirdPartyResourceDataList, error) + WatchThirdPartyResourceData(ctx genericapirequest.Context, options *api.ListOptions) (watch.Interface, error) + GetThirdPartyResourceData(ctx genericapirequest.Context, name string, options *metav1.GetOptions) (*extensions.ThirdPartyResourceData, error) + CreateThirdPartyResourceData(ctx genericapirequest.Context, resource *extensions.ThirdPartyResourceData) (*extensions.ThirdPartyResourceData, error) + UpdateThirdPartyResourceData(ctx genericapirequest.Context, resource *extensions.ThirdPartyResourceData) (*extensions.ThirdPartyResourceData, error) + DeleteThirdPartyResourceData(ctx genericapirequest.Context, name string) error } // storage puts strong typing around storage calls @@ -45,7 +46,7 @@ func NewRegistry(s rest.StandardStorage) Registry { return &storage{s} } -func (s *storage) ListThirdPartyResourceData(ctx api.Context, options *api.ListOptions) (*extensions.ThirdPartyResourceDataList, error) { +func (s *storage) ListThirdPartyResourceData(ctx genericapirequest.Context, options *api.ListOptions) (*extensions.ThirdPartyResourceDataList, error) { obj, err := s.List(ctx, options) if err != nil { return nil, err @@ -53,11 +54,11 @@ func (s *storage) ListThirdPartyResourceData(ctx api.Context, options *api.ListO return obj.(*extensions.ThirdPartyResourceDataList), nil } -func (s *storage) WatchThirdPartyResourceData(ctx api.Context, options *api.ListOptions) (watch.Interface, error) { +func (s *storage) WatchThirdPartyResourceData(ctx genericapirequest.Context, options *api.ListOptions) (watch.Interface, error) { return s.Watch(ctx, options) } -func (s *storage) GetThirdPartyResourceData(ctx api.Context, name string, options *metav1.GetOptions) (*extensions.ThirdPartyResourceData, error) { +func (s *storage) GetThirdPartyResourceData(ctx genericapirequest.Context, name string, options *metav1.GetOptions) (*extensions.ThirdPartyResourceData, error) { obj, err := s.Get(ctx, name, options) if err != nil { return nil, err @@ -65,17 +66,17 @@ func (s *storage) GetThirdPartyResourceData(ctx api.Context, name string, option return obj.(*extensions.ThirdPartyResourceData), nil } -func (s *storage) CreateThirdPartyResourceData(ctx api.Context, ThirdPartyResourceData *extensions.ThirdPartyResourceData) (*extensions.ThirdPartyResourceData, error) { +func (s *storage) CreateThirdPartyResourceData(ctx genericapirequest.Context, ThirdPartyResourceData *extensions.ThirdPartyResourceData) (*extensions.ThirdPartyResourceData, error) { obj, err := s.Create(ctx, ThirdPartyResourceData) return obj.(*extensions.ThirdPartyResourceData), err } -func (s *storage) UpdateThirdPartyResourceData(ctx api.Context, ThirdPartyResourceData *extensions.ThirdPartyResourceData) (*extensions.ThirdPartyResourceData, error) { +func (s *storage) UpdateThirdPartyResourceData(ctx genericapirequest.Context, ThirdPartyResourceData *extensions.ThirdPartyResourceData) (*extensions.ThirdPartyResourceData, error) { obj, _, err := s.Update(ctx, ThirdPartyResourceData.Name, rest.DefaultUpdatedObjectInfo(ThirdPartyResourceData, api.Scheme)) return obj.(*extensions.ThirdPartyResourceData), err } -func (s *storage) DeleteThirdPartyResourceData(ctx api.Context, name string) error { +func (s *storage) DeleteThirdPartyResourceData(ctx genericapirequest.Context, name string) error { _, err := s.Delete(ctx, name, nil) return err } diff --git a/pkg/registry/extensions/thirdpartyresourcedata/strategy.go b/pkg/registry/extensions/thirdpartyresourcedata/strategy.go index a09d78d85d..f16fb38d5b 100644 --- a/pkg/registry/extensions/thirdpartyresourcedata/strategy.go +++ b/pkg/registry/extensions/thirdpartyresourcedata/strategy.go @@ -24,6 +24,7 @@ import ( "k8s.io/kubernetes/pkg/apis/extensions" "k8s.io/kubernetes/pkg/apis/extensions/validation" "k8s.io/kubernetes/pkg/fields" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/runtime" apistorage "k8s.io/kubernetes/pkg/storage" @@ -48,10 +49,10 @@ func (strategy) NamespaceScoped() bool { return true } -func (strategy) PrepareForCreate(ctx api.Context, obj runtime.Object) { +func (strategy) PrepareForCreate(ctx genericapirequest.Context, obj runtime.Object) { } -func (strategy) Validate(ctx api.Context, obj runtime.Object) field.ErrorList { +func (strategy) Validate(ctx genericapirequest.Context, obj runtime.Object) field.ErrorList { return validation.ValidateThirdPartyResourceData(obj.(*extensions.ThirdPartyResourceData)) } @@ -63,10 +64,10 @@ func (strategy) AllowCreateOnUpdate() bool { return false } -func (strategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { +func (strategy) PrepareForUpdate(ctx genericapirequest.Context, obj, old runtime.Object) { } -func (strategy) ValidateUpdate(ctx api.Context, obj, old runtime.Object) field.ErrorList { +func (strategy) ValidateUpdate(ctx genericapirequest.Context, obj, old runtime.Object) field.ErrorList { return validation.ValidateThirdPartyResourceDataUpdate(obj.(*extensions.ThirdPartyResourceData), old.(*extensions.ThirdPartyResourceData)) } diff --git a/pkg/registry/generic/registry/BUILD b/pkg/registry/generic/registry/BUILD index 0bfdb740a2..4848d9ecc6 100644 --- a/pkg/registry/generic/registry/BUILD +++ b/pkg/registry/generic/registry/BUILD @@ -26,6 +26,7 @@ go_library( "//pkg/api/validation/path:go_default_library", "//pkg/apis/meta/v1:go_default_library", "//pkg/fields:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/labels:go_default_library", "//pkg/registry/cachesize:go_default_library", "//pkg/registry/generic:go_default_library", @@ -59,6 +60,7 @@ go_test( "//pkg/api/testapi:go_default_library", "//pkg/apis/meta/v1:go_default_library", "//pkg/fields:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/labels:go_default_library", "//pkg/registry/core/pod:go_default_library", "//pkg/registry/generic:go_default_library", diff --git a/pkg/registry/generic/registry/store.go b/pkg/registry/generic/registry/store.go index 81fa39a35d..2db1924b8d 100644 --- a/pkg/registry/generic/registry/store.go +++ b/pkg/registry/generic/registry/store.go @@ -31,6 +31,7 @@ import ( "k8s.io/kubernetes/pkg/api/validation/path" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" "k8s.io/kubernetes/pkg/fields" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/registry/cachesize" "k8s.io/kubernetes/pkg/registry/generic" @@ -71,11 +72,11 @@ type Store struct { QualifiedResource schema.GroupResource // Used for listing/watching; should not include trailing "/" - KeyRootFunc func(ctx api.Context) string + KeyRootFunc func(ctx genericapirequest.Context) string // Called for Create/Update/Get/Delete. Note that 'namespace' can be // gotten from ctx. - KeyFunc func(ctx api.Context, name string) (string, error) + KeyFunc func(ctx genericapirequest.Context, name string) (string, error) // Called to get the name of an object ObjectNameFunc func(obj runtime.Object) (string, error) @@ -132,9 +133,9 @@ var _ rest.StandardStorage = &Store{} const OptimisticLockErrorMsg = "the object has been modified; please apply your changes to the latest version and try again" // NamespaceKeyRootFunc is the default function for constructing storage paths to resource directories enforcing namespace rules. -func NamespaceKeyRootFunc(ctx api.Context, prefix string) string { +func NamespaceKeyRootFunc(ctx genericapirequest.Context, prefix string) string { key := prefix - ns, ok := api.NamespaceFrom(ctx) + ns, ok := genericapirequest.NamespaceFrom(ctx) if ok && len(ns) > 0 { key = key + "/" + ns } @@ -143,9 +144,9 @@ func NamespaceKeyRootFunc(ctx api.Context, prefix string) string { // NamespaceKeyFunc is the default function for constructing storage paths to a resource relative to prefix enforcing namespace rules. // If no namespace is on context, it errors. -func NamespaceKeyFunc(ctx api.Context, prefix string, name string) (string, error) { +func NamespaceKeyFunc(ctx genericapirequest.Context, prefix string, name string) (string, error) { key := NamespaceKeyRootFunc(ctx, prefix) - ns, ok := api.NamespaceFrom(ctx) + ns, ok := genericapirequest.NamespaceFrom(ctx) if !ok || len(ns) == 0 { return "", kubeerr.NewBadRequest("Namespace parameter required.") } @@ -160,7 +161,7 @@ func NamespaceKeyFunc(ctx api.Context, prefix string, name string) (string, erro } // NoNamespaceKeyFunc is the default function for constructing storage paths to a resource relative to prefix without a namespace -func NoNamespaceKeyFunc(ctx api.Context, prefix string, name string) (string, error) { +func NoNamespaceKeyFunc(ctx genericapirequest.Context, prefix string, name string) (string, error) { if len(name) == 0 { return "", kubeerr.NewBadRequest("Name parameter required.") } @@ -182,7 +183,7 @@ func (e *Store) NewList() runtime.Object { } // List returns a list of items matching labels and field -func (e *Store) List(ctx api.Context, options *api.ListOptions) (runtime.Object, error) { +func (e *Store) List(ctx genericapirequest.Context, options *api.ListOptions) (runtime.Object, error) { label := labels.Everything() if options != nil && options.LabelSelector != nil { label = options.LabelSelector @@ -204,7 +205,7 @@ func (e *Store) List(ctx api.Context, options *api.ListOptions) (runtime.Object, } // ListPredicate returns a list of all the items matching m. -func (e *Store) ListPredicate(ctx api.Context, p storage.SelectionPredicate, options *api.ListOptions) (runtime.Object, error) { +func (e *Store) ListPredicate(ctx genericapirequest.Context, p storage.SelectionPredicate, options *api.ListOptions) (runtime.Object, error) { if options == nil { // By default we should serve the request from etcd. options = &api.ListOptions{ResourceVersion: ""} @@ -223,7 +224,7 @@ func (e *Store) ListPredicate(ctx api.Context, p storage.SelectionPredicate, opt } // Create inserts a new item according to the unique key from the object. -func (e *Store) Create(ctx api.Context, obj runtime.Object) (runtime.Object, error) { +func (e *Store) Create(ctx genericapirequest.Context, obj runtime.Object) (runtime.Object, error) { if err := rest.BeforeCreate(e.CreateStrategy, ctx, obj); err != nil { return nil, err } @@ -275,7 +276,7 @@ func (e *Store) Create(ctx api.Context, obj runtime.Object) (runtime.Object, err // shouldDelete checks if a Update is removing all the object's finalizers. If so, // it further checks if the object's DeletionGracePeriodSeconds is 0. If so, it // returns true. -func (e *Store) shouldDelete(ctx api.Context, key string, obj, existing runtime.Object) bool { +func (e *Store) shouldDelete(ctx genericapirequest.Context, key string, obj, existing runtime.Object) bool { if !e.EnableGarbageCollection { return false } @@ -292,7 +293,7 @@ func (e *Store) shouldDelete(ctx api.Context, key string, obj, existing runtime. return len(newMeta.Finalizers) == 0 && oldMeta.DeletionGracePeriodSeconds != nil && *oldMeta.DeletionGracePeriodSeconds == 0 } -func (e *Store) deleteForEmptyFinalizers(ctx api.Context, name, key string, obj runtime.Object, preconditions *storage.Preconditions) (runtime.Object, bool, error) { +func (e *Store) deleteForEmptyFinalizers(ctx genericapirequest.Context, name, key string, obj runtime.Object, preconditions *storage.Preconditions) (runtime.Object, bool, error) { out := e.NewFunc() glog.V(6).Infof("going to delete %s from registry, triggered by update", name) if err := e.Storage.Delete(ctx, key, out, preconditions); err != nil { @@ -318,7 +319,7 @@ func (e *Store) deleteForEmptyFinalizers(ctx api.Context, name, key string, obj // Update performs an atomic update and set of the object. Returns the result of the update // or an error. If the registry allows create-on-update, the create flow will be executed. // A bool is returned along with the object and any errors, to indicate object creation. -func (e *Store) Update(ctx api.Context, name string, objInfo rest.UpdatedObjectInfo) (runtime.Object, bool, error) { +func (e *Store) Update(ctx genericapirequest.Context, name string, objInfo rest.UpdatedObjectInfo) (runtime.Object, bool, error) { key, err := e.KeyFunc(ctx, name) if err != nil { return nil, false, err @@ -452,7 +453,7 @@ func (e *Store) Update(ctx api.Context, name string, objInfo rest.UpdatedObjectI } // Get retrieves the item from storage. -func (e *Store) Get(ctx api.Context, name string, options *metav1.GetOptions) (runtime.Object, error) { +func (e *Store) Get(ctx genericapirequest.Context, name string, options *metav1.GetOptions) (runtime.Object, error) { obj := e.NewFunc() key, err := e.KeyFunc(ctx, name) if err != nil { @@ -540,7 +541,7 @@ func markAsDeleting(obj runtime.Object) (err error) { } // this functions need to be kept synced with updateForGracefulDeletionAndFinalizers. -func (e *Store) updateForGracefulDeletion(ctx api.Context, name, key string, options *api.DeleteOptions, preconditions storage.Preconditions, in runtime.Object) (err error, ignoreNotFound, deleteImmediately bool, out, lastExisting runtime.Object) { +func (e *Store) updateForGracefulDeletion(ctx genericapirequest.Context, name, key string, options *api.DeleteOptions, preconditions storage.Preconditions, in runtime.Object) (err error, ignoreNotFound, deleteImmediately bool, out, lastExisting runtime.Object) { lastGraceful := int64(0) out = e.NewFunc() err = e.Storage.GuaranteedUpdate( @@ -587,7 +588,7 @@ func (e *Store) updateForGracefulDeletion(ctx api.Context, name, key string, opt } // this functions need to be kept synced with updateForGracefulDeletion. -func (e *Store) updateForGracefulDeletionAndFinalizers(ctx api.Context, name, key string, options *api.DeleteOptions, preconditions storage.Preconditions, in runtime.Object) (err error, ignoreNotFound, deleteImmediately bool, out, lastExisting runtime.Object) { +func (e *Store) updateForGracefulDeletionAndFinalizers(ctx genericapirequest.Context, name, key string, options *api.DeleteOptions, preconditions storage.Preconditions, in runtime.Object) (err error, ignoreNotFound, deleteImmediately bool, out, lastExisting runtime.Object) { lastGraceful := int64(0) var pendingFinalizers bool out = e.NewFunc() @@ -663,7 +664,7 @@ func (e *Store) updateForGracefulDeletionAndFinalizers(ctx api.Context, name, ke } // Delete removes the item from storage. -func (e *Store) Delete(ctx api.Context, name string, options *api.DeleteOptions) (runtime.Object, error) { +func (e *Store) Delete(ctx genericapirequest.Context, name string, options *api.DeleteOptions) (runtime.Object, error) { key, err := e.KeyFunc(ctx, name) if err != nil { return nil, err @@ -741,7 +742,7 @@ func (e *Store) Delete(ctx api.Context, name string, options *api.DeleteOptions) // are removing all objects of a given type) with the current API (it's technically // possibly with storage API, but watch is not delivered correctly then). // It will be possible to fix it with v3 etcd API. -func (e *Store) DeleteCollection(ctx api.Context, options *api.DeleteOptions, listOptions *api.ListOptions) (runtime.Object, error) { +func (e *Store) DeleteCollection(ctx genericapirequest.Context, options *api.DeleteOptions, listOptions *api.ListOptions) (runtime.Object, error) { listObj, err := e.List(ctx, listOptions) if err != nil { return nil, err @@ -830,7 +831,7 @@ func (e *Store) finalizeDelete(obj runtime.Object, runHooks bool) (runtime.Objec // WatchPredicate. If possible, you should customize PredicateFunc to produre a // matcher that matches by key. SelectionPredicate does this for you // automatically. -func (e *Store) Watch(ctx api.Context, options *api.ListOptions) (watch.Interface, error) { +func (e *Store) Watch(ctx genericapirequest.Context, options *api.ListOptions) (watch.Interface, error) { label := labels.Everything() if options != nil && options.LabelSelector != nil { label = options.LabelSelector @@ -847,7 +848,7 @@ func (e *Store) Watch(ctx api.Context, options *api.ListOptions) (watch.Interfac } // WatchPredicate starts a watch for the items that m matches. -func (e *Store) WatchPredicate(ctx api.Context, p storage.SelectionPredicate, resourceVersion string) (watch.Interface, error) { +func (e *Store) WatchPredicate(ctx genericapirequest.Context, p storage.SelectionPredicate, resourceVersion string) (watch.Interface, error) { if name, ok := p.MatchesSingle(); ok { if key, err := e.KeyFunc(ctx, name); err == nil { w, err := e.Storage.Watch(ctx, key, resourceVersion, p) @@ -904,7 +905,7 @@ func exportObjectMeta(accessor meta.Object, exact bool) { } // Implements the rest.Exporter interface -func (e *Store) Export(ctx api.Context, name string, opts metav1.ExportOptions) (runtime.Object, error) { +func (e *Store) Export(ctx genericapirequest.Context, name string, opts metav1.ExportOptions) (runtime.Object, error) { obj, err := e.Get(ctx, name, &metav1.GetOptions{}) if err != nil { return nil, err @@ -974,17 +975,17 @@ func (e *Store) CompleteWithOptions(options *generic.StoreOptions) error { // Set the default behavior for storage key generation if e.KeyRootFunc == nil && e.KeyFunc == nil { if isNamespaced { - e.KeyRootFunc = func(ctx api.Context) string { + e.KeyRootFunc = func(ctx genericapirequest.Context) string { return NamespaceKeyRootFunc(ctx, prefix) } - e.KeyFunc = func(ctx api.Context, name string) (string, error) { + e.KeyFunc = func(ctx genericapirequest.Context, name string) (string, error) { return NamespaceKeyFunc(ctx, prefix, name) } } else { - e.KeyRootFunc = func(ctx api.Context) string { + e.KeyRootFunc = func(ctx genericapirequest.Context) string { return prefix } - e.KeyFunc = func(ctx api.Context, name string) (string, error) { + e.KeyFunc = func(ctx genericapirequest.Context, name string) (string, error) { return NoNamespaceKeyFunc(ctx, prefix, name) } } @@ -999,10 +1000,10 @@ func (e *Store) CompleteWithOptions(options *generic.StoreOptions) error { } if isNamespaced { - return e.KeyFunc(api.WithNamespace(api.NewContext(), accessor.GetNamespace()), accessor.GetName()) + return e.KeyFunc(genericapirequest.WithNamespace(genericapirequest.NewContext(), accessor.GetNamespace()), accessor.GetName()) } - return e.KeyFunc(api.NewContext(), accessor.GetName()) + return e.KeyFunc(genericapirequest.NewContext(), accessor.GetName()) } triggerFunc := options.TriggerFunc diff --git a/pkg/registry/generic/registry/store_test.go b/pkg/registry/generic/registry/store_test.go index 0d628fb40a..d1941001a3 100644 --- a/pkg/registry/generic/registry/store_test.go +++ b/pkg/registry/generic/registry/store_test.go @@ -33,6 +33,7 @@ import ( "k8s.io/kubernetes/pkg/api/testapi" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" "k8s.io/kubernetes/pkg/fields" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/registry/core/pod" "k8s.io/kubernetes/pkg/registry/generic" @@ -51,7 +52,7 @@ type testGracefulStrategy struct { testRESTStrategy } -func (t testGracefulStrategy) CheckGracefulDelete(ctx api.Context, obj runtime.Object, options *api.DeleteOptions) bool { +func (t testGracefulStrategy) CheckGracefulDelete(ctx genericapirequest.Context, obj runtime.Object, options *api.DeleteOptions) bool { return true } @@ -77,7 +78,7 @@ func (t *testRESTStrategy) NamespaceScoped() bool { return t.namespaceS func (t *testRESTStrategy) AllowCreateOnUpdate() bool { return t.allowCreateOnUpdate } func (t *testRESTStrategy) AllowUnconditionalUpdate() bool { return t.allowUnconditionalUpdate } -func (t *testRESTStrategy) PrepareForCreate(ctx api.Context, obj runtime.Object) { +func (t *testRESTStrategy) PrepareForCreate(ctx genericapirequest.Context, obj runtime.Object) { metaObj, err := meta.Accessor(obj) if err != nil { panic(err.Error()) @@ -90,11 +91,11 @@ func (t *testRESTStrategy) PrepareForCreate(ctx api.Context, obj runtime.Object) metaObj.SetLabels(labels) } -func (t *testRESTStrategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) {} -func (t *testRESTStrategy) Validate(ctx api.Context, obj runtime.Object) field.ErrorList { +func (t *testRESTStrategy) PrepareForUpdate(ctx genericapirequest.Context, obj, old runtime.Object) {} +func (t *testRESTStrategy) Validate(ctx genericapirequest.Context, obj runtime.Object) field.ErrorList { return nil } -func (t *testRESTStrategy) ValidateUpdate(ctx api.Context, obj, old runtime.Object) field.ErrorList { +func (t *testRESTStrategy) ValidateUpdate(ctx genericapirequest.Context, obj, old runtime.Object) field.ErrorList { return nil } func (t *testRESTStrategy) Canonicalize(obj runtime.Object) {} @@ -144,14 +145,14 @@ func TestStoreList(t *testing.T) { Spec: api.PodSpec{NodeName: "machine"}, } - testContext := api.WithNamespace(api.NewContext(), "test") - noNamespaceContext := api.NewContext() + testContext := genericapirequest.WithNamespace(genericapirequest.NewContext(), "test") + noNamespaceContext := genericapirequest.NewContext() table := map[string]struct { in *api.PodList m storage.SelectionPredicate out runtime.Object - context api.Context + context genericapirequest.Context }{ "notFound": { in: nil, @@ -219,7 +220,7 @@ func TestStoreListResourceVersion(t *testing.T) { ObjectMeta: api.ObjectMeta{Namespace: "test", Name: "bar"}, Spec: api.PodSpec{NodeName: "machine"}, } - ctx := api.WithNamespace(api.NewContext(), "test") + ctx := genericapirequest.WithNamespace(genericapirequest.NewContext(), "test") destroyFunc, registry := newTestGenericStoreRegistry(t, true) defer destroyFunc() @@ -283,7 +284,7 @@ func TestStoreCreate(t *testing.T) { Spec: api.PodSpec{NodeName: "machine2"}, } - testContext := api.WithNamespace(api.NewContext(), "test") + testContext := genericapirequest.WithNamespace(genericapirequest.NewContext(), "test") destroyFunc, registry := NewTestGenericStoreRegistry(t) defer destroyFunc() // re-define delete strategy to have graceful delete capability @@ -338,7 +339,7 @@ func TestStoreCreate(t *testing.T) { } } -func updateAndVerify(t *testing.T, ctx api.Context, registry *Store, pod *api.Pod) bool { +func updateAndVerify(t *testing.T, ctx genericapirequest.Context, registry *Store, pod *api.Pod) bool { obj, _, err := registry.Update(ctx, pod.Name, rest.DefaultUpdatedObjectInfo(pod, api.Scheme)) if err != nil { t.Errorf("Unexpected error: %v", err) @@ -370,7 +371,7 @@ func TestStoreUpdate(t *testing.T) { Spec: api.PodSpec{NodeName: "machine"}, } - testContext := api.WithNamespace(api.NewContext(), "test") + testContext := genericapirequest.WithNamespace(genericapirequest.NewContext(), "test") destroyFunc, registry := NewTestGenericStoreRegistry(t) defer destroyFunc() @@ -425,18 +426,18 @@ func TestNoOpUpdates(t *testing.T) { var err error var createResult runtime.Object - if createResult, err = registry.Create(api.NewDefaultContext(), newPod()); err != nil { + if createResult, err = registry.Create(genericapirequest.NewDefaultContext(), newPod()); err != nil { t.Fatalf("Unexpected error: %v", err) } - createdPod, err := registry.Get(api.NewDefaultContext(), "foo", &metav1.GetOptions{}) + createdPod, err := registry.Get(genericapirequest.NewDefaultContext(), "foo", &metav1.GetOptions{}) if err != nil { t.Fatalf("Unexpected error: %v", err) } var updateResult runtime.Object p := newPod() - if updateResult, _, err = registry.Update(api.NewDefaultContext(), p.Name, rest.DefaultUpdatedObjectInfo(p, api.Scheme)); err != nil { + if updateResult, _, err = registry.Update(genericapirequest.NewDefaultContext(), p.Name, rest.DefaultUpdatedObjectInfo(p, api.Scheme)); err != nil { t.Fatalf("Unexpected error: %v", err) } @@ -445,7 +446,7 @@ func TestNoOpUpdates(t *testing.T) { t.Errorf("no-op update should return a correct value, got: %#v", updateResult) } - updatedPod, err := registry.Get(api.NewDefaultContext(), "foo", &metav1.GetOptions{}) + updatedPod, err := registry.Get(genericapirequest.NewDefaultContext(), "foo", &metav1.GetOptions{}) if err != nil { t.Fatalf("Unexpected error: %v", err) } @@ -470,7 +471,7 @@ func TestNoOpUpdates(t *testing.T) { type testPodExport struct{} -func (t testPodExport) Export(ctx api.Context, obj runtime.Object, exact bool) error { +func (t testPodExport) Export(ctx genericapirequest.Context, obj runtime.Object, exact bool) error { pod := obj.(*api.Pod) if pod.Labels == nil { pod.Labels = map[string]string{} @@ -496,7 +497,7 @@ func TestStoreCustomExport(t *testing.T) { registry.ExportStrategy = testPodExport{} - testContext := api.WithNamespace(api.NewContext(), "test") + testContext := genericapirequest.WithNamespace(genericapirequest.NewContext(), "test") registry.UpdateStrategy.(*testRESTStrategy).allowCreateOnUpdate = true if !updateAndVerify(t, testContext, registry, &podA) { t.Errorf("Unexpected error updating podA") @@ -540,7 +541,7 @@ func TestStoreBasicExport(t *testing.T) { destroyFunc, registry := NewTestGenericStoreRegistry(t) defer destroyFunc() - testContext := api.WithNamespace(api.NewContext(), "test") + testContext := genericapirequest.WithNamespace(genericapirequest.NewContext(), "test") registry.UpdateStrategy.(*testRESTStrategy).allowCreateOnUpdate = true if !updateAndVerify(t, testContext, registry, &podA) { t.Errorf("Unexpected error updating podA") @@ -568,7 +569,7 @@ func TestStoreGet(t *testing.T) { Spec: api.PodSpec{NodeName: "machine"}, } - testContext := api.WithNamespace(api.NewContext(), "test") + testContext := genericapirequest.WithNamespace(genericapirequest.NewContext(), "test") destroyFunc, registry := NewTestGenericStoreRegistry(t) defer destroyFunc() @@ -589,7 +590,7 @@ func TestStoreDelete(t *testing.T) { Spec: api.PodSpec{NodeName: "machine"}, } - testContext := api.WithNamespace(api.NewContext(), "test") + testContext := genericapirequest.WithNamespace(genericapirequest.NewContext(), "test") destroyFunc, registry := NewTestGenericStoreRegistry(t) defer destroyFunc() @@ -636,7 +637,7 @@ func TestGracefulStoreCanDeleteIfExistingGracePeriodZero(t *testing.T) { Spec: api.PodSpec{NodeName: "machine"}, } - testContext := api.WithNamespace(api.NewContext(), "test") + testContext := genericapirequest.WithNamespace(genericapirequest.NewContext(), "test") destroyFunc, registry := NewTestGenericStoreRegistry(t) registry.EnableGarbageCollection = false defaultDeleteStrategy := testRESTStrategy{api.Scheme, api.SimpleNameGenerator, true, false, true} @@ -662,7 +663,7 @@ func TestGracefulStoreHandleFinalizers(t *testing.T) { Spec: api.PodSpec{NodeName: "machine"}, } - testContext := api.WithNamespace(api.NewContext(), "test") + testContext := genericapirequest.WithNamespace(genericapirequest.NewContext(), "test") destroyFunc, registry := NewTestGenericStoreRegistry(t) registry.EnableGarbageCollection = true defaultDeleteStrategy := testRESTStrategy{api.Scheme, api.SimpleNameGenerator, true, false, true} @@ -721,7 +722,7 @@ func TestNonGracefulStoreHandleFinalizers(t *testing.T) { Spec: api.PodSpec{NodeName: "machine"}, } - testContext := api.WithNamespace(api.NewContext(), "test") + testContext := genericapirequest.WithNamespace(genericapirequest.NewContext(), "test") destroyFunc, registry := NewTestGenericStoreRegistry(t) registry.EnableGarbageCollection = true defer destroyFunc() @@ -1016,7 +1017,7 @@ func TestStoreDeleteWithOrphanDependents(t *testing.T) { }, } - testContext := api.WithNamespace(api.NewContext(), "test") + testContext := genericapirequest.WithNamespace(genericapirequest.NewContext(), "test") destroyFunc, registry := NewTestGenericStoreRegistry(t) registry.EnableGarbageCollection = true defer destroyFunc() @@ -1064,7 +1065,7 @@ func TestStoreDeleteCollection(t *testing.T) { podA := &api.Pod{ObjectMeta: api.ObjectMeta{Name: "foo"}} podB := &api.Pod{ObjectMeta: api.ObjectMeta{Name: "bar"}} - testContext := api.WithNamespace(api.NewContext(), "test") + testContext := genericapirequest.WithNamespace(genericapirequest.NewContext(), "test") destroyFunc, registry := NewTestGenericStoreRegistry(t) defer destroyFunc() @@ -1097,7 +1098,7 @@ func TestStoreDeleteCollectionNotFound(t *testing.T) { destroyFunc, registry := NewTestGenericStoreRegistry(t) defer destroyFunc() - testContext := api.WithNamespace(api.NewContext(), "test") + testContext := genericapirequest.WithNamespace(genericapirequest.NewContext(), "test") podA := &api.Pod{ObjectMeta: api.ObjectMeta{Name: "foo"}} podB := &api.Pod{ObjectMeta: api.ObjectMeta{Name: "bar"}} @@ -1139,7 +1140,7 @@ func TestStoreDeleteCollectionNotFound(t *testing.T) { func TestStoreDeleteCollectionWithWatch(t *testing.T) { podA := &api.Pod{ObjectMeta: api.ObjectMeta{Name: "foo"}} - testContext := api.WithNamespace(api.NewContext(), "test") + testContext := genericapirequest.WithNamespace(genericapirequest.NewContext(), "test") destroyFunc, registry := NewTestGenericStoreRegistry(t) defer destroyFunc() @@ -1175,12 +1176,12 @@ func TestStoreDeleteCollectionWithWatch(t *testing.T) { } func TestStoreWatch(t *testing.T) { - testContext := api.WithNamespace(api.NewContext(), "test") - noNamespaceContext := api.NewContext() + testContext := genericapirequest.WithNamespace(genericapirequest.NewContext(), "test") + noNamespaceContext := genericapirequest.NewContext() table := map[string]struct { selectPred storage.SelectionPredicate - context api.Context + context genericapirequest.Context }{ "single": { selectPred: matchPodName("foo"), @@ -1271,11 +1272,11 @@ func newTestGenericStoreRegistry(t *testing.T, hasCacheEnabled bool) (factory.De CreateStrategy: strategy, UpdateStrategy: strategy, DeleteStrategy: strategy, - KeyRootFunc: func(ctx api.Context) string { + KeyRootFunc: func(ctx genericapirequest.Context) string { return podPrefix }, - KeyFunc: func(ctx api.Context, id string) (string, error) { - if _, ok := api.NamespaceFrom(ctx); !ok { + KeyFunc: func(ctx genericapirequest.Context, id string) (string, error) { + if _, ok := genericapirequest.NamespaceFrom(ctx); !ok { return "", fmt.Errorf("namespace is required") } return path.Join(podPrefix, id), nil diff --git a/pkg/registry/policy/poddisruptionbudget/BUILD b/pkg/registry/policy/poddisruptionbudget/BUILD index 9a77d8f604..4c69a6bad0 100644 --- a/pkg/registry/policy/poddisruptionbudget/BUILD +++ b/pkg/registry/policy/poddisruptionbudget/BUILD @@ -20,6 +20,7 @@ go_library( "//pkg/apis/policy:go_default_library", "//pkg/apis/policy/validation:go_default_library", "//pkg/fields:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/labels:go_default_library", "//pkg/registry/generic:go_default_library", "//pkg/runtime:go_default_library", @@ -37,6 +38,7 @@ go_test( "//pkg/api:go_default_library", "//pkg/apis/meta/v1:go_default_library", "//pkg/apis/policy:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/util/intstr:go_default_library", ], ) diff --git a/pkg/registry/policy/poddisruptionbudget/etcd/BUILD b/pkg/registry/policy/poddisruptionbudget/etcd/BUILD index 0bb84ff238..fe02b00792 100644 --- a/pkg/registry/policy/poddisruptionbudget/etcd/BUILD +++ b/pkg/registry/policy/poddisruptionbudget/etcd/BUILD @@ -13,10 +13,10 @@ go_library( srcs = ["etcd.go"], tags = ["automanaged"], deps = [ - "//pkg/api:go_default_library", "//pkg/api/rest:go_default_library", "//pkg/apis/meta/v1:go_default_library", "//pkg/apis/policy:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/registry/generic:go_default_library", "//pkg/registry/generic/registry:go_default_library", "//pkg/registry/policy/poddisruptionbudget:go_default_library", @@ -35,6 +35,7 @@ go_test( "//pkg/apis/meta/v1:go_default_library", "//pkg/apis/policy:go_default_library", "//pkg/fields:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/labels:go_default_library", "//pkg/registry/generic:go_default_library", "//pkg/registry/registrytest:go_default_library", diff --git a/pkg/registry/policy/poddisruptionbudget/etcd/etcd.go b/pkg/registry/policy/poddisruptionbudget/etcd/etcd.go index 14f19a0a59..b862b9d4db 100644 --- a/pkg/registry/policy/poddisruptionbudget/etcd/etcd.go +++ b/pkg/registry/policy/poddisruptionbudget/etcd/etcd.go @@ -17,10 +17,10 @@ limitations under the License. package etcd import ( - "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/rest" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" policyapi "k8s.io/kubernetes/pkg/apis/policy" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/registry/generic" genericregistry "k8s.io/kubernetes/pkg/registry/generic/registry" "k8s.io/kubernetes/pkg/registry/policy/poddisruptionbudget" @@ -67,11 +67,11 @@ func (r *StatusREST) New() runtime.Object { } // Get retrieves the object from the storage. It is required to support Patch. -func (r *StatusREST) Get(ctx api.Context, name string, options *metav1.GetOptions) (runtime.Object, error) { +func (r *StatusREST) Get(ctx genericapirequest.Context, name string, options *metav1.GetOptions) (runtime.Object, error) { return r.store.Get(ctx, name, options) } // Update alters the status subset of an object. -func (r *StatusREST) Update(ctx api.Context, name string, objInfo rest.UpdatedObjectInfo) (runtime.Object, bool, error) { +func (r *StatusREST) Update(ctx genericapirequest.Context, name string, objInfo rest.UpdatedObjectInfo) (runtime.Object, bool, error) { return r.store.Update(ctx, name, objInfo) } diff --git a/pkg/registry/policy/poddisruptionbudget/etcd/etcd_test.go b/pkg/registry/policy/poddisruptionbudget/etcd/etcd_test.go index 028618312e..177674f748 100644 --- a/pkg/registry/policy/poddisruptionbudget/etcd/etcd_test.go +++ b/pkg/registry/policy/poddisruptionbudget/etcd/etcd_test.go @@ -24,6 +24,7 @@ import ( metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" "k8s.io/kubernetes/pkg/apis/policy" "k8s.io/kubernetes/pkg/fields" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/registry/generic" "k8s.io/kubernetes/pkg/registry/registrytest" @@ -40,7 +41,7 @@ func newStorage(t *testing.T) (*REST, *StatusREST, *etcdtesting.EtcdTestServer) // createPodDisruptionBudget is a helper function that returns a PodDisruptionBudget with the updated resource version. func createPodDisruptionBudget(storage *REST, pdb policy.PodDisruptionBudget, t *testing.T) (policy.PodDisruptionBudget, error) { - ctx := api.WithNamespace(api.NewContext(), pdb.Namespace) + ctx := genericapirequest.WithNamespace(genericapirequest.NewContext(), pdb.Namespace) obj, err := storage.Create(ctx, &pdb) if err != nil { t.Errorf("Failed to create PodDisruptionBudget, %v", err) @@ -84,7 +85,7 @@ func TestStatusUpdate(t *testing.T) { storage, statusStorage, server := newStorage(t) defer server.Terminate(t) defer storage.Store.DestroyFunc() - ctx := api.WithNamespace(api.NewContext(), api.NamespaceDefault) + ctx := genericapirequest.WithNamespace(genericapirequest.NewContext(), api.NamespaceDefault) key := "/poddisruptionbudgets/" + api.NamespaceDefault + "/foo" validPodDisruptionBudget := validNewPodDisruptionBudget() if err := storage.Storage.Create(ctx, key, validPodDisruptionBudget, nil, 0); err != nil { diff --git a/pkg/registry/policy/poddisruptionbudget/strategy.go b/pkg/registry/policy/poddisruptionbudget/strategy.go index 1a0df41dd3..cffe1bb773 100644 --- a/pkg/registry/policy/poddisruptionbudget/strategy.go +++ b/pkg/registry/policy/poddisruptionbudget/strategy.go @@ -24,6 +24,7 @@ import ( "k8s.io/kubernetes/pkg/apis/policy" "k8s.io/kubernetes/pkg/apis/policy/validation" "k8s.io/kubernetes/pkg/fields" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/registry/generic" "k8s.io/kubernetes/pkg/runtime" @@ -46,7 +47,7 @@ func (podDisruptionBudgetStrategy) NamespaceScoped() bool { } // PrepareForCreate clears the status of an PodDisruptionBudget before creation. -func (podDisruptionBudgetStrategy) PrepareForCreate(ctx api.Context, obj runtime.Object) { +func (podDisruptionBudgetStrategy) PrepareForCreate(ctx genericapirequest.Context, obj runtime.Object) { podDisruptionBudget := obj.(*policy.PodDisruptionBudget) // create cannot set status podDisruptionBudget.Status = policy.PodDisruptionBudgetStatus{} @@ -55,7 +56,7 @@ func (podDisruptionBudgetStrategy) PrepareForCreate(ctx api.Context, obj runtime } // PrepareForUpdate clears fields that are not allowed to be set by end users on update. -func (podDisruptionBudgetStrategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { +func (podDisruptionBudgetStrategy) PrepareForUpdate(ctx genericapirequest.Context, obj, old runtime.Object) { newPodDisruptionBudget := obj.(*policy.PodDisruptionBudget) oldPodDisruptionBudget := old.(*policy.PodDisruptionBudget) // Update is not allowed to set status @@ -70,7 +71,7 @@ func (podDisruptionBudgetStrategy) PrepareForUpdate(ctx api.Context, obj, old ru } // Validate validates a new PodDisruptionBudget. -func (podDisruptionBudgetStrategy) Validate(ctx api.Context, obj runtime.Object) field.ErrorList { +func (podDisruptionBudgetStrategy) Validate(ctx genericapirequest.Context, obj runtime.Object) field.ErrorList { podDisruptionBudget := obj.(*policy.PodDisruptionBudget) return validation.ValidatePodDisruptionBudget(podDisruptionBudget) } @@ -85,7 +86,7 @@ func (podDisruptionBudgetStrategy) AllowCreateOnUpdate() bool { } // ValidateUpdate is the default update validation for an end user. -func (podDisruptionBudgetStrategy) ValidateUpdate(ctx api.Context, obj, old runtime.Object) field.ErrorList { +func (podDisruptionBudgetStrategy) ValidateUpdate(ctx genericapirequest.Context, obj, old runtime.Object) field.ErrorList { validationErrorList := validation.ValidatePodDisruptionBudget(obj.(*policy.PodDisruptionBudget)) updateErrorList := validation.ValidatePodDisruptionBudgetUpdate(obj.(*policy.PodDisruptionBudget), old.(*policy.PodDisruptionBudget)) return append(validationErrorList, updateErrorList...) @@ -128,7 +129,7 @@ type podDisruptionBudgetStatusStrategy struct { var StatusStrategy = podDisruptionBudgetStatusStrategy{Strategy} // PrepareForUpdate clears fields that are not allowed to be set by end users on update of status -func (podDisruptionBudgetStatusStrategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { +func (podDisruptionBudgetStatusStrategy) PrepareForUpdate(ctx genericapirequest.Context, obj, old runtime.Object) { newPodDisruptionBudget := obj.(*policy.PodDisruptionBudget) oldPodDisruptionBudget := old.(*policy.PodDisruptionBudget) // status changes are not allowed to update spec @@ -136,7 +137,7 @@ func (podDisruptionBudgetStatusStrategy) PrepareForUpdate(ctx api.Context, obj, } // ValidateUpdate is the default update validation for an end user updating status -func (podDisruptionBudgetStatusStrategy) ValidateUpdate(ctx api.Context, obj, old runtime.Object) field.ErrorList { +func (podDisruptionBudgetStatusStrategy) ValidateUpdate(ctx genericapirequest.Context, obj, old runtime.Object) field.ErrorList { // TODO: Validate status updates. return field.ErrorList{} // return validation.ValidatePodDisruptionBudgetStatusUpdate(obj.(*policy.PodDisruptionBudget), old.(*policy.PodDisruptionBudget)) diff --git a/pkg/registry/policy/poddisruptionbudget/strategy_test.go b/pkg/registry/policy/poddisruptionbudget/strategy_test.go index 15f4c97a8f..d410d74237 100644 --- a/pkg/registry/policy/poddisruptionbudget/strategy_test.go +++ b/pkg/registry/policy/poddisruptionbudget/strategy_test.go @@ -22,11 +22,12 @@ import ( "k8s.io/kubernetes/pkg/api" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" "k8s.io/kubernetes/pkg/apis/policy" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/util/intstr" ) func TestPodDisruptionBudgetStrategy(t *testing.T) { - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() if !Strategy.NamespaceScoped() { t.Errorf("PodDisruptionBudget must be namespace scoped") } @@ -86,7 +87,7 @@ func TestPodDisruptionBudgetStrategy(t *testing.T) { } func TestPodDisruptionBudgetStatusStrategy(t *testing.T) { - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() if !StatusStrategy.NamespaceScoped() { t.Errorf("PodDisruptionBudgetStatus must be namespace scoped") } diff --git a/pkg/registry/rbac/BUILD b/pkg/registry/rbac/BUILD index e26220b933..545eaf7b94 100644 --- a/pkg/registry/rbac/BUILD +++ b/pkg/registry/rbac/BUILD @@ -12,7 +12,7 @@ go_library( srcs = ["escalation_check.go"], tags = ["automanaged"], deps = [ - "//pkg/api:go_default_library", "//pkg/auth/user:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", ], ) diff --git a/pkg/registry/rbac/clusterrole/BUILD b/pkg/registry/rbac/clusterrole/BUILD index acdbfe7ef9..2324246b19 100644 --- a/pkg/registry/rbac/clusterrole/BUILD +++ b/pkg/registry/rbac/clusterrole/BUILD @@ -22,6 +22,7 @@ go_library( "//pkg/apis/rbac:go_default_library", "//pkg/apis/rbac/validation:go_default_library", "//pkg/fields:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/labels:go_default_library", "//pkg/runtime:go_default_library", "//pkg/storage:go_default_library", diff --git a/pkg/registry/rbac/clusterrole/policybased/BUILD b/pkg/registry/rbac/clusterrole/policybased/BUILD index 71350bb7d8..67e4d065a1 100644 --- a/pkg/registry/rbac/clusterrole/policybased/BUILD +++ b/pkg/registry/rbac/clusterrole/policybased/BUILD @@ -12,11 +12,11 @@ go_library( srcs = ["storage.go"], tags = ["automanaged"], deps = [ - "//pkg/api:go_default_library", "//pkg/api/errors:go_default_library", "//pkg/api/rest:go_default_library", "//pkg/apis/rbac:go_default_library", "//pkg/apis/rbac/validation:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/registry/rbac:go_default_library", "//pkg/runtime:go_default_library", ], diff --git a/pkg/registry/rbac/clusterrole/policybased/storage.go b/pkg/registry/rbac/clusterrole/policybased/storage.go index 178c5d5195..6fae1d8f65 100644 --- a/pkg/registry/rbac/clusterrole/policybased/storage.go +++ b/pkg/registry/rbac/clusterrole/policybased/storage.go @@ -18,11 +18,11 @@ limitations under the License. package policybased import ( - "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/errors" "k8s.io/kubernetes/pkg/api/rest" "k8s.io/kubernetes/pkg/apis/rbac" "k8s.io/kubernetes/pkg/apis/rbac/validation" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" rbacregistry "k8s.io/kubernetes/pkg/registry/rbac" "k8s.io/kubernetes/pkg/runtime" ) @@ -39,7 +39,7 @@ func NewStorage(s rest.StandardStorage, ruleResolver validation.AuthorizationRul return &Storage{s, ruleResolver} } -func (s *Storage) Create(ctx api.Context, obj runtime.Object) (runtime.Object, error) { +func (s *Storage) Create(ctx genericapirequest.Context, obj runtime.Object) (runtime.Object, error) { if rbacregistry.EscalationAllowed(ctx) { return s.StandardStorage.Create(ctx, obj) } @@ -52,12 +52,12 @@ func (s *Storage) Create(ctx api.Context, obj runtime.Object) (runtime.Object, e return s.StandardStorage.Create(ctx, obj) } -func (s *Storage) Update(ctx api.Context, name string, obj rest.UpdatedObjectInfo) (runtime.Object, bool, error) { +func (s *Storage) Update(ctx genericapirequest.Context, name string, obj rest.UpdatedObjectInfo) (runtime.Object, bool, error) { if rbacregistry.EscalationAllowed(ctx) { return s.StandardStorage.Update(ctx, name, obj) } - nonEscalatingInfo := rest.WrapUpdatedObjectInfo(obj, func(ctx api.Context, obj runtime.Object, oldObj runtime.Object) (runtime.Object, error) { + nonEscalatingInfo := rest.WrapUpdatedObjectInfo(obj, func(ctx genericapirequest.Context, obj runtime.Object, oldObj runtime.Object) (runtime.Object, error) { clusterRole := obj.(*rbac.ClusterRole) rules := clusterRole.Rules diff --git a/pkg/registry/rbac/clusterrole/registry.go b/pkg/registry/rbac/clusterrole/registry.go index 62a43e705a..e1c04ba791 100644 --- a/pkg/registry/rbac/clusterrole/registry.go +++ b/pkg/registry/rbac/clusterrole/registry.go @@ -21,17 +21,18 @@ import ( "k8s.io/kubernetes/pkg/api/rest" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" "k8s.io/kubernetes/pkg/apis/rbac" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/watch" ) // Registry is an interface for things that know how to store ClusterRoles. type Registry interface { - ListClusterRoles(ctx api.Context, options *api.ListOptions) (*rbac.ClusterRoleList, error) - CreateClusterRole(ctx api.Context, clusterRole *rbac.ClusterRole) error - UpdateClusterRole(ctx api.Context, clusterRole *rbac.ClusterRole) error - GetClusterRole(ctx api.Context, name string, options *metav1.GetOptions) (*rbac.ClusterRole, error) - DeleteClusterRole(ctx api.Context, name string) error - WatchClusterRoles(ctx api.Context, options *api.ListOptions) (watch.Interface, error) + ListClusterRoles(ctx genericapirequest.Context, options *api.ListOptions) (*rbac.ClusterRoleList, error) + CreateClusterRole(ctx genericapirequest.Context, clusterRole *rbac.ClusterRole) error + UpdateClusterRole(ctx genericapirequest.Context, clusterRole *rbac.ClusterRole) error + GetClusterRole(ctx genericapirequest.Context, name string, options *metav1.GetOptions) (*rbac.ClusterRole, error) + DeleteClusterRole(ctx genericapirequest.Context, name string) error + WatchClusterRoles(ctx genericapirequest.Context, options *api.ListOptions) (watch.Interface, error) } // storage puts strong typing around storage calls @@ -45,7 +46,7 @@ func NewRegistry(s rest.StandardStorage) Registry { return &storage{s} } -func (s *storage) ListClusterRoles(ctx api.Context, options *api.ListOptions) (*rbac.ClusterRoleList, error) { +func (s *storage) ListClusterRoles(ctx genericapirequest.Context, options *api.ListOptions) (*rbac.ClusterRoleList, error) { obj, err := s.List(ctx, options) if err != nil { return nil, err @@ -54,21 +55,21 @@ func (s *storage) ListClusterRoles(ctx api.Context, options *api.ListOptions) (* return obj.(*rbac.ClusterRoleList), nil } -func (s *storage) CreateClusterRole(ctx api.Context, clusterRole *rbac.ClusterRole) error { +func (s *storage) CreateClusterRole(ctx genericapirequest.Context, clusterRole *rbac.ClusterRole) error { _, err := s.Create(ctx, clusterRole) return err } -func (s *storage) UpdateClusterRole(ctx api.Context, clusterRole *rbac.ClusterRole) error { +func (s *storage) UpdateClusterRole(ctx genericapirequest.Context, clusterRole *rbac.ClusterRole) error { _, _, err := s.Update(ctx, clusterRole.Name, rest.DefaultUpdatedObjectInfo(clusterRole, api.Scheme)) return err } -func (s *storage) WatchClusterRoles(ctx api.Context, options *api.ListOptions) (watch.Interface, error) { +func (s *storage) WatchClusterRoles(ctx genericapirequest.Context, options *api.ListOptions) (watch.Interface, error) { return s.Watch(ctx, options) } -func (s *storage) GetClusterRole(ctx api.Context, name string, options *metav1.GetOptions) (*rbac.ClusterRole, error) { +func (s *storage) GetClusterRole(ctx genericapirequest.Context, name string, options *metav1.GetOptions) (*rbac.ClusterRole, error) { obj, err := s.Get(ctx, name, options) if err != nil { return nil, err @@ -76,7 +77,7 @@ func (s *storage) GetClusterRole(ctx api.Context, name string, options *metav1.G return obj.(*rbac.ClusterRole), nil } -func (s *storage) DeleteClusterRole(ctx api.Context, name string) error { +func (s *storage) DeleteClusterRole(ctx genericapirequest.Context, name string) error { _, err := s.Delete(ctx, name, nil) return err } @@ -87,5 +88,5 @@ type AuthorizerAdapter struct { } func (a AuthorizerAdapter) GetClusterRole(name string) (*rbac.ClusterRole, error) { - return a.Registry.GetClusterRole(api.NewContext(), name, &metav1.GetOptions{}) + return a.Registry.GetClusterRole(genericapirequest.NewContext(), name, &metav1.GetOptions{}) } diff --git a/pkg/registry/rbac/clusterrole/strategy.go b/pkg/registry/rbac/clusterrole/strategy.go index b2b08aff31..03da20ecea 100644 --- a/pkg/registry/rbac/clusterrole/strategy.go +++ b/pkg/registry/rbac/clusterrole/strategy.go @@ -24,6 +24,7 @@ import ( "k8s.io/kubernetes/pkg/apis/rbac" "k8s.io/kubernetes/pkg/apis/rbac/validation" "k8s.io/kubernetes/pkg/fields" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/runtime" apistorage "k8s.io/kubernetes/pkg/storage" @@ -58,12 +59,12 @@ func (strategy) AllowCreateOnUpdate() bool { // PrepareForCreate clears fields that are not allowed to be set by end users // on creation. -func (strategy) PrepareForCreate(ctx api.Context, obj runtime.Object) { +func (strategy) PrepareForCreate(ctx genericapirequest.Context, obj runtime.Object) { _ = obj.(*rbac.ClusterRole) } // PrepareForUpdate clears fields that are not allowed to be set by end users on update. -func (strategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { +func (strategy) PrepareForUpdate(ctx genericapirequest.Context, obj, old runtime.Object) { newClusterRole := obj.(*rbac.ClusterRole) oldClusterRole := old.(*rbac.ClusterRole) @@ -71,7 +72,7 @@ func (strategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { } // Validate validates a new ClusterRole. Validation must check for a correct signature. -func (strategy) Validate(ctx api.Context, obj runtime.Object) field.ErrorList { +func (strategy) Validate(ctx genericapirequest.Context, obj runtime.Object) field.ErrorList { clusterRole := obj.(*rbac.ClusterRole) return validation.ValidateClusterRole(clusterRole) } @@ -82,7 +83,7 @@ func (strategy) Canonicalize(obj runtime.Object) { } // ValidateUpdate is the default update validation for an end user. -func (strategy) ValidateUpdate(ctx api.Context, obj, old runtime.Object) field.ErrorList { +func (strategy) ValidateUpdate(ctx genericapirequest.Context, obj, old runtime.Object) field.ErrorList { newObj := obj.(*rbac.ClusterRole) errorList := validation.ValidateClusterRole(newObj) return append(errorList, validation.ValidateClusterRoleUpdate(newObj, old.(*rbac.ClusterRole))...) @@ -97,7 +98,7 @@ func (strategy) AllowUnconditionalUpdate() bool { return true } -func (s strategy) Export(ctx api.Context, obj runtime.Object, exact bool) error { +func (s strategy) Export(ctx genericapirequest.Context, obj runtime.Object, exact bool) error { return nil } diff --git a/pkg/registry/rbac/clusterrolebinding/BUILD b/pkg/registry/rbac/clusterrolebinding/BUILD index acdbfe7ef9..2324246b19 100644 --- a/pkg/registry/rbac/clusterrolebinding/BUILD +++ b/pkg/registry/rbac/clusterrolebinding/BUILD @@ -22,6 +22,7 @@ go_library( "//pkg/apis/rbac:go_default_library", "//pkg/apis/rbac/validation:go_default_library", "//pkg/fields:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/labels:go_default_library", "//pkg/runtime:go_default_library", "//pkg/storage:go_default_library", diff --git a/pkg/registry/rbac/clusterrolebinding/policybased/BUILD b/pkg/registry/rbac/clusterrolebinding/policybased/BUILD index 71350bb7d8..67e4d065a1 100644 --- a/pkg/registry/rbac/clusterrolebinding/policybased/BUILD +++ b/pkg/registry/rbac/clusterrolebinding/policybased/BUILD @@ -12,11 +12,11 @@ go_library( srcs = ["storage.go"], tags = ["automanaged"], deps = [ - "//pkg/api:go_default_library", "//pkg/api/errors:go_default_library", "//pkg/api/rest:go_default_library", "//pkg/apis/rbac:go_default_library", "//pkg/apis/rbac/validation:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/registry/rbac:go_default_library", "//pkg/runtime:go_default_library", ], diff --git a/pkg/registry/rbac/clusterrolebinding/policybased/storage.go b/pkg/registry/rbac/clusterrolebinding/policybased/storage.go index 5d79346a3d..9b2f2b6809 100644 --- a/pkg/registry/rbac/clusterrolebinding/policybased/storage.go +++ b/pkg/registry/rbac/clusterrolebinding/policybased/storage.go @@ -18,11 +18,11 @@ limitations under the License. package policybased import ( - "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/errors" "k8s.io/kubernetes/pkg/api/rest" "k8s.io/kubernetes/pkg/apis/rbac" "k8s.io/kubernetes/pkg/apis/rbac/validation" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" rbacregistry "k8s.io/kubernetes/pkg/registry/rbac" "k8s.io/kubernetes/pkg/runtime" ) @@ -39,7 +39,7 @@ func NewStorage(s rest.StandardStorage, ruleResolver validation.AuthorizationRul return &Storage{s, ruleResolver} } -func (s *Storage) Create(ctx api.Context, obj runtime.Object) (runtime.Object, error) { +func (s *Storage) Create(ctx genericapirequest.Context, obj runtime.Object) (runtime.Object, error) { if rbacregistry.EscalationAllowed(ctx) { return s.StandardStorage.Create(ctx, obj) } @@ -55,12 +55,12 @@ func (s *Storage) Create(ctx api.Context, obj runtime.Object) (runtime.Object, e return s.StandardStorage.Create(ctx, obj) } -func (s *Storage) Update(ctx api.Context, name string, obj rest.UpdatedObjectInfo) (runtime.Object, bool, error) { +func (s *Storage) Update(ctx genericapirequest.Context, name string, obj rest.UpdatedObjectInfo) (runtime.Object, bool, error) { if rbacregistry.EscalationAllowed(ctx) { return s.StandardStorage.Update(ctx, name, obj) } - nonEscalatingInfo := rest.WrapUpdatedObjectInfo(obj, func(ctx api.Context, obj runtime.Object, oldObj runtime.Object) (runtime.Object, error) { + nonEscalatingInfo := rest.WrapUpdatedObjectInfo(obj, func(ctx genericapirequest.Context, obj runtime.Object, oldObj runtime.Object) (runtime.Object, error) { clusterRoleBinding := obj.(*rbac.ClusterRoleBinding) rules, err := s.ruleResolver.GetRoleReferenceRules(clusterRoleBinding.RoleRef, clusterRoleBinding.Namespace) diff --git a/pkg/registry/rbac/clusterrolebinding/registry.go b/pkg/registry/rbac/clusterrolebinding/registry.go index 09e08c02df..1662b537fd 100644 --- a/pkg/registry/rbac/clusterrolebinding/registry.go +++ b/pkg/registry/rbac/clusterrolebinding/registry.go @@ -21,17 +21,18 @@ import ( "k8s.io/kubernetes/pkg/api/rest" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" "k8s.io/kubernetes/pkg/apis/rbac" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/watch" ) // Registry is an interface for things that know how to store ClusterRoleBindings. type Registry interface { - ListClusterRoleBindings(ctx api.Context, options *api.ListOptions) (*rbac.ClusterRoleBindingList, error) - CreateClusterRoleBinding(ctx api.Context, clusterRoleBinding *rbac.ClusterRoleBinding) error - UpdateClusterRoleBinding(ctx api.Context, clusterRoleBinding *rbac.ClusterRoleBinding) error - GetClusterRoleBinding(ctx api.Context, name string, options *metav1.GetOptions) (*rbac.ClusterRoleBinding, error) - DeleteClusterRoleBinding(ctx api.Context, name string) error - WatchClusterRoleBindings(ctx api.Context, options *api.ListOptions) (watch.Interface, error) + ListClusterRoleBindings(ctx genericapirequest.Context, options *api.ListOptions) (*rbac.ClusterRoleBindingList, error) + CreateClusterRoleBinding(ctx genericapirequest.Context, clusterRoleBinding *rbac.ClusterRoleBinding) error + UpdateClusterRoleBinding(ctx genericapirequest.Context, clusterRoleBinding *rbac.ClusterRoleBinding) error + GetClusterRoleBinding(ctx genericapirequest.Context, name string, options *metav1.GetOptions) (*rbac.ClusterRoleBinding, error) + DeleteClusterRoleBinding(ctx genericapirequest.Context, name string) error + WatchClusterRoleBindings(ctx genericapirequest.Context, options *api.ListOptions) (watch.Interface, error) } // storage puts strong typing around storage calls @@ -45,7 +46,7 @@ func NewRegistry(s rest.StandardStorage) Registry { return &storage{s} } -func (s *storage) ListClusterRoleBindings(ctx api.Context, options *api.ListOptions) (*rbac.ClusterRoleBindingList, error) { +func (s *storage) ListClusterRoleBindings(ctx genericapirequest.Context, options *api.ListOptions) (*rbac.ClusterRoleBindingList, error) { obj, err := s.List(ctx, options) if err != nil { return nil, err @@ -54,21 +55,21 @@ func (s *storage) ListClusterRoleBindings(ctx api.Context, options *api.ListOpti return obj.(*rbac.ClusterRoleBindingList), nil } -func (s *storage) CreateClusterRoleBinding(ctx api.Context, clusterRoleBinding *rbac.ClusterRoleBinding) error { +func (s *storage) CreateClusterRoleBinding(ctx genericapirequest.Context, clusterRoleBinding *rbac.ClusterRoleBinding) error { _, err := s.Create(ctx, clusterRoleBinding) return err } -func (s *storage) UpdateClusterRoleBinding(ctx api.Context, clusterRoleBinding *rbac.ClusterRoleBinding) error { +func (s *storage) UpdateClusterRoleBinding(ctx genericapirequest.Context, clusterRoleBinding *rbac.ClusterRoleBinding) error { _, _, err := s.Update(ctx, clusterRoleBinding.Name, rest.DefaultUpdatedObjectInfo(clusterRoleBinding, api.Scheme)) return err } -func (s *storage) WatchClusterRoleBindings(ctx api.Context, options *api.ListOptions) (watch.Interface, error) { +func (s *storage) WatchClusterRoleBindings(ctx genericapirequest.Context, options *api.ListOptions) (watch.Interface, error) { return s.Watch(ctx, options) } -func (s *storage) GetClusterRoleBinding(ctx api.Context, name string, options *metav1.GetOptions) (*rbac.ClusterRoleBinding, error) { +func (s *storage) GetClusterRoleBinding(ctx genericapirequest.Context, name string, options *metav1.GetOptions) (*rbac.ClusterRoleBinding, error) { obj, err := s.Get(ctx, name, options) if err != nil { return nil, err @@ -76,7 +77,7 @@ func (s *storage) GetClusterRoleBinding(ctx api.Context, name string, options *m return obj.(*rbac.ClusterRoleBinding), nil } -func (s *storage) DeleteClusterRoleBinding(ctx api.Context, name string) error { +func (s *storage) DeleteClusterRoleBinding(ctx genericapirequest.Context, name string) error { _, err := s.Delete(ctx, name, nil) return err } @@ -87,7 +88,7 @@ type AuthorizerAdapter struct { } func (a AuthorizerAdapter) ListClusterRoleBindings() ([]*rbac.ClusterRoleBinding, error) { - list, err := a.Registry.ListClusterRoleBindings(api.NewContext(), &api.ListOptions{}) + list, err := a.Registry.ListClusterRoleBindings(genericapirequest.NewContext(), &api.ListOptions{}) if err != nil { return nil, err } diff --git a/pkg/registry/rbac/clusterrolebinding/strategy.go b/pkg/registry/rbac/clusterrolebinding/strategy.go index 5412a07ddb..cb4bdb36e9 100644 --- a/pkg/registry/rbac/clusterrolebinding/strategy.go +++ b/pkg/registry/rbac/clusterrolebinding/strategy.go @@ -24,6 +24,7 @@ import ( "k8s.io/kubernetes/pkg/apis/rbac" "k8s.io/kubernetes/pkg/apis/rbac/validation" "k8s.io/kubernetes/pkg/fields" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/runtime" apistorage "k8s.io/kubernetes/pkg/storage" @@ -58,12 +59,12 @@ func (strategy) AllowCreateOnUpdate() bool { // PrepareForCreate clears fields that are not allowed to be set by end users // on creation. -func (strategy) PrepareForCreate(ctx api.Context, obj runtime.Object) { +func (strategy) PrepareForCreate(ctx genericapirequest.Context, obj runtime.Object) { _ = obj.(*rbac.ClusterRoleBinding) } // PrepareForUpdate clears fields that are not allowed to be set by end users on update. -func (strategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { +func (strategy) PrepareForUpdate(ctx genericapirequest.Context, obj, old runtime.Object) { newClusterRoleBinding := obj.(*rbac.ClusterRoleBinding) oldClusterRoleBinding := old.(*rbac.ClusterRoleBinding) @@ -71,7 +72,7 @@ func (strategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { } // Validate validates a new ClusterRoleBinding. Validation must check for a correct signature. -func (strategy) Validate(ctx api.Context, obj runtime.Object) field.ErrorList { +func (strategy) Validate(ctx genericapirequest.Context, obj runtime.Object) field.ErrorList { clusterRoleBinding := obj.(*rbac.ClusterRoleBinding) return validation.ValidateClusterRoleBinding(clusterRoleBinding) } @@ -82,7 +83,7 @@ func (strategy) Canonicalize(obj runtime.Object) { } // ValidateUpdate is the default update validation for an end user. -func (strategy) ValidateUpdate(ctx api.Context, obj, old runtime.Object) field.ErrorList { +func (strategy) ValidateUpdate(ctx genericapirequest.Context, obj, old runtime.Object) field.ErrorList { newObj := obj.(*rbac.ClusterRoleBinding) errorList := validation.ValidateClusterRoleBinding(newObj) return append(errorList, validation.ValidateClusterRoleBindingUpdate(newObj, old.(*rbac.ClusterRoleBinding))...) @@ -97,7 +98,7 @@ func (strategy) AllowUnconditionalUpdate() bool { return true } -func (s strategy) Export(ctx api.Context, obj runtime.Object, exact bool) error { +func (s strategy) Export(ctx genericapirequest.Context, obj runtime.Object, exact bool) error { return nil } diff --git a/pkg/registry/rbac/escalation_check.go b/pkg/registry/rbac/escalation_check.go index e40edad454..45deefac92 100644 --- a/pkg/registry/rbac/escalation_check.go +++ b/pkg/registry/rbac/escalation_check.go @@ -17,12 +17,12 @@ limitations under the License. package rbac import ( - "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/auth/user" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" ) -func EscalationAllowed(ctx api.Context) bool { - u, ok := api.UserFrom(ctx) +func EscalationAllowed(ctx genericapirequest.Context) bool { + u, ok := genericapirequest.UserFrom(ctx) if !ok { // the only way to be without a user is to either have no authenticators by explicitly saying that's your preference // or to be connecting via the insecure port, in which case this logically doesn't apply diff --git a/pkg/registry/rbac/role/BUILD b/pkg/registry/rbac/role/BUILD index acdbfe7ef9..2324246b19 100644 --- a/pkg/registry/rbac/role/BUILD +++ b/pkg/registry/rbac/role/BUILD @@ -22,6 +22,7 @@ go_library( "//pkg/apis/rbac:go_default_library", "//pkg/apis/rbac/validation:go_default_library", "//pkg/fields:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/labels:go_default_library", "//pkg/runtime:go_default_library", "//pkg/storage:go_default_library", diff --git a/pkg/registry/rbac/role/policybased/BUILD b/pkg/registry/rbac/role/policybased/BUILD index 71350bb7d8..67e4d065a1 100644 --- a/pkg/registry/rbac/role/policybased/BUILD +++ b/pkg/registry/rbac/role/policybased/BUILD @@ -12,11 +12,11 @@ go_library( srcs = ["storage.go"], tags = ["automanaged"], deps = [ - "//pkg/api:go_default_library", "//pkg/api/errors:go_default_library", "//pkg/api/rest:go_default_library", "//pkg/apis/rbac:go_default_library", "//pkg/apis/rbac/validation:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/registry/rbac:go_default_library", "//pkg/runtime:go_default_library", ], diff --git a/pkg/registry/rbac/role/policybased/storage.go b/pkg/registry/rbac/role/policybased/storage.go index c6bb36cb57..3890294fb2 100644 --- a/pkg/registry/rbac/role/policybased/storage.go +++ b/pkg/registry/rbac/role/policybased/storage.go @@ -18,11 +18,11 @@ limitations under the License. package policybased import ( - "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/errors" "k8s.io/kubernetes/pkg/api/rest" "k8s.io/kubernetes/pkg/apis/rbac" "k8s.io/kubernetes/pkg/apis/rbac/validation" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" rbacregistry "k8s.io/kubernetes/pkg/registry/rbac" "k8s.io/kubernetes/pkg/runtime" ) @@ -39,7 +39,7 @@ func NewStorage(s rest.StandardStorage, ruleResolver validation.AuthorizationRul return &Storage{s, ruleResolver} } -func (s *Storage) Create(ctx api.Context, obj runtime.Object) (runtime.Object, error) { +func (s *Storage) Create(ctx genericapirequest.Context, obj runtime.Object) (runtime.Object, error) { if rbacregistry.EscalationAllowed(ctx) { return s.StandardStorage.Create(ctx, obj) } @@ -52,12 +52,12 @@ func (s *Storage) Create(ctx api.Context, obj runtime.Object) (runtime.Object, e return s.StandardStorage.Create(ctx, obj) } -func (s *Storage) Update(ctx api.Context, name string, obj rest.UpdatedObjectInfo) (runtime.Object, bool, error) { +func (s *Storage) Update(ctx genericapirequest.Context, name string, obj rest.UpdatedObjectInfo) (runtime.Object, bool, error) { if rbacregistry.EscalationAllowed(ctx) { return s.StandardStorage.Update(ctx, name, obj) } - nonEscalatingInfo := rest.WrapUpdatedObjectInfo(obj, func(ctx api.Context, obj runtime.Object, oldObj runtime.Object) (runtime.Object, error) { + nonEscalatingInfo := rest.WrapUpdatedObjectInfo(obj, func(ctx genericapirequest.Context, obj runtime.Object, oldObj runtime.Object) (runtime.Object, error) { role := obj.(*rbac.Role) rules := role.Rules diff --git a/pkg/registry/rbac/role/registry.go b/pkg/registry/rbac/role/registry.go index f6ece79a24..b4807a3d6d 100644 --- a/pkg/registry/rbac/role/registry.go +++ b/pkg/registry/rbac/role/registry.go @@ -21,17 +21,18 @@ import ( "k8s.io/kubernetes/pkg/api/rest" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" "k8s.io/kubernetes/pkg/apis/rbac" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/watch" ) // Registry is an interface for things that know how to store Roles. type Registry interface { - ListRoles(ctx api.Context, options *api.ListOptions) (*rbac.RoleList, error) - CreateRole(ctx api.Context, role *rbac.Role) error - UpdateRole(ctx api.Context, role *rbac.Role) error - GetRole(ctx api.Context, name string, options *metav1.GetOptions) (*rbac.Role, error) - DeleteRole(ctx api.Context, name string) error - WatchRoles(ctx api.Context, options *api.ListOptions) (watch.Interface, error) + ListRoles(ctx genericapirequest.Context, options *api.ListOptions) (*rbac.RoleList, error) + CreateRole(ctx genericapirequest.Context, role *rbac.Role) error + UpdateRole(ctx genericapirequest.Context, role *rbac.Role) error + GetRole(ctx genericapirequest.Context, name string, options *metav1.GetOptions) (*rbac.Role, error) + DeleteRole(ctx genericapirequest.Context, name string) error + WatchRoles(ctx genericapirequest.Context, options *api.ListOptions) (watch.Interface, error) } // storage puts strong typing around storage calls @@ -45,7 +46,7 @@ func NewRegistry(s rest.StandardStorage) Registry { return &storage{s} } -func (s *storage) ListRoles(ctx api.Context, options *api.ListOptions) (*rbac.RoleList, error) { +func (s *storage) ListRoles(ctx genericapirequest.Context, options *api.ListOptions) (*rbac.RoleList, error) { obj, err := s.List(ctx, options) if err != nil { return nil, err @@ -54,21 +55,21 @@ func (s *storage) ListRoles(ctx api.Context, options *api.ListOptions) (*rbac.Ro return obj.(*rbac.RoleList), nil } -func (s *storage) CreateRole(ctx api.Context, role *rbac.Role) error { +func (s *storage) CreateRole(ctx genericapirequest.Context, role *rbac.Role) error { _, err := s.Create(ctx, role) return err } -func (s *storage) UpdateRole(ctx api.Context, role *rbac.Role) error { +func (s *storage) UpdateRole(ctx genericapirequest.Context, role *rbac.Role) error { _, _, err := s.Update(ctx, role.Name, rest.DefaultUpdatedObjectInfo(role, api.Scheme)) return err } -func (s *storage) WatchRoles(ctx api.Context, options *api.ListOptions) (watch.Interface, error) { +func (s *storage) WatchRoles(ctx genericapirequest.Context, options *api.ListOptions) (watch.Interface, error) { return s.Watch(ctx, options) } -func (s *storage) GetRole(ctx api.Context, name string, options *metav1.GetOptions) (*rbac.Role, error) { +func (s *storage) GetRole(ctx genericapirequest.Context, name string, options *metav1.GetOptions) (*rbac.Role, error) { obj, err := s.Get(ctx, name, options) if err != nil { return nil, err @@ -76,7 +77,7 @@ func (s *storage) GetRole(ctx api.Context, name string, options *metav1.GetOptio return obj.(*rbac.Role), nil } -func (s *storage) DeleteRole(ctx api.Context, name string) error { +func (s *storage) DeleteRole(ctx genericapirequest.Context, name string) error { _, err := s.Delete(ctx, name, nil) return err } @@ -87,5 +88,5 @@ type AuthorizerAdapter struct { } func (a AuthorizerAdapter) GetRole(namespace, name string) (*rbac.Role, error) { - return a.Registry.GetRole(api.WithNamespace(api.NewContext(), namespace), name, &metav1.GetOptions{}) + return a.Registry.GetRole(genericapirequest.WithNamespace(genericapirequest.NewContext(), namespace), name, &metav1.GetOptions{}) } diff --git a/pkg/registry/rbac/role/strategy.go b/pkg/registry/rbac/role/strategy.go index 02064dfffc..e4ea2cf282 100644 --- a/pkg/registry/rbac/role/strategy.go +++ b/pkg/registry/rbac/role/strategy.go @@ -24,6 +24,7 @@ import ( "k8s.io/kubernetes/pkg/apis/rbac" "k8s.io/kubernetes/pkg/apis/rbac/validation" "k8s.io/kubernetes/pkg/fields" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/runtime" apistorage "k8s.io/kubernetes/pkg/storage" @@ -58,12 +59,12 @@ func (strategy) AllowCreateOnUpdate() bool { // PrepareForCreate clears fields that are not allowed to be set by end users // on creation. -func (strategy) PrepareForCreate(ctx api.Context, obj runtime.Object) { +func (strategy) PrepareForCreate(ctx genericapirequest.Context, obj runtime.Object) { _ = obj.(*rbac.Role) } // PrepareForUpdate clears fields that are not allowed to be set by end users on update. -func (strategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { +func (strategy) PrepareForUpdate(ctx genericapirequest.Context, obj, old runtime.Object) { newRole := obj.(*rbac.Role) oldRole := old.(*rbac.Role) @@ -71,7 +72,7 @@ func (strategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { } // Validate validates a new Role. Validation must check for a correct signature. -func (strategy) Validate(ctx api.Context, obj runtime.Object) field.ErrorList { +func (strategy) Validate(ctx genericapirequest.Context, obj runtime.Object) field.ErrorList { role := obj.(*rbac.Role) return validation.ValidateRole(role) } @@ -82,7 +83,7 @@ func (strategy) Canonicalize(obj runtime.Object) { } // ValidateUpdate is the default update validation for an end user. -func (strategy) ValidateUpdate(ctx api.Context, obj, old runtime.Object) field.ErrorList { +func (strategy) ValidateUpdate(ctx genericapirequest.Context, obj, old runtime.Object) field.ErrorList { newObj := obj.(*rbac.Role) errorList := validation.ValidateRole(newObj) return append(errorList, validation.ValidateRoleUpdate(newObj, old.(*rbac.Role))...) @@ -97,7 +98,7 @@ func (strategy) AllowUnconditionalUpdate() bool { return true } -func (s strategy) Export(ctx api.Context, obj runtime.Object, exact bool) error { +func (s strategy) Export(ctx genericapirequest.Context, obj runtime.Object, exact bool) error { return nil } diff --git a/pkg/registry/rbac/rolebinding/BUILD b/pkg/registry/rbac/rolebinding/BUILD index acdbfe7ef9..2324246b19 100644 --- a/pkg/registry/rbac/rolebinding/BUILD +++ b/pkg/registry/rbac/rolebinding/BUILD @@ -22,6 +22,7 @@ go_library( "//pkg/apis/rbac:go_default_library", "//pkg/apis/rbac/validation:go_default_library", "//pkg/fields:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/labels:go_default_library", "//pkg/runtime:go_default_library", "//pkg/storage:go_default_library", diff --git a/pkg/registry/rbac/rolebinding/policybased/BUILD b/pkg/registry/rbac/rolebinding/policybased/BUILD index 71350bb7d8..67e4d065a1 100644 --- a/pkg/registry/rbac/rolebinding/policybased/BUILD +++ b/pkg/registry/rbac/rolebinding/policybased/BUILD @@ -12,11 +12,11 @@ go_library( srcs = ["storage.go"], tags = ["automanaged"], deps = [ - "//pkg/api:go_default_library", "//pkg/api/errors:go_default_library", "//pkg/api/rest:go_default_library", "//pkg/apis/rbac:go_default_library", "//pkg/apis/rbac/validation:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/registry/rbac:go_default_library", "//pkg/runtime:go_default_library", ], diff --git a/pkg/registry/rbac/rolebinding/policybased/storage.go b/pkg/registry/rbac/rolebinding/policybased/storage.go index 4962d5a78b..bb9e971e48 100644 --- a/pkg/registry/rbac/rolebinding/policybased/storage.go +++ b/pkg/registry/rbac/rolebinding/policybased/storage.go @@ -18,11 +18,11 @@ limitations under the License. package policybased import ( - "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/errors" "k8s.io/kubernetes/pkg/api/rest" "k8s.io/kubernetes/pkg/apis/rbac" "k8s.io/kubernetes/pkg/apis/rbac/validation" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" rbacregistry "k8s.io/kubernetes/pkg/registry/rbac" "k8s.io/kubernetes/pkg/runtime" ) @@ -39,7 +39,7 @@ func NewStorage(s rest.StandardStorage, ruleResolver validation.AuthorizationRul return &Storage{s, ruleResolver} } -func (s *Storage) Create(ctx api.Context, obj runtime.Object) (runtime.Object, error) { +func (s *Storage) Create(ctx genericapirequest.Context, obj runtime.Object) (runtime.Object, error) { if rbacregistry.EscalationAllowed(ctx) { return s.StandardStorage.Create(ctx, obj) } @@ -55,12 +55,12 @@ func (s *Storage) Create(ctx api.Context, obj runtime.Object) (runtime.Object, e return s.StandardStorage.Create(ctx, obj) } -func (s *Storage) Update(ctx api.Context, name string, obj rest.UpdatedObjectInfo) (runtime.Object, bool, error) { +func (s *Storage) Update(ctx genericapirequest.Context, name string, obj rest.UpdatedObjectInfo) (runtime.Object, bool, error) { if rbacregistry.EscalationAllowed(ctx) { return s.StandardStorage.Update(ctx, name, obj) } - nonEscalatingInfo := rest.WrapUpdatedObjectInfo(obj, func(ctx api.Context, obj runtime.Object, oldObj runtime.Object) (runtime.Object, error) { + nonEscalatingInfo := rest.WrapUpdatedObjectInfo(obj, func(ctx genericapirequest.Context, obj runtime.Object, oldObj runtime.Object) (runtime.Object, error) { roleBinding := obj.(*rbac.RoleBinding) rules, err := s.ruleResolver.GetRoleReferenceRules(roleBinding.RoleRef, roleBinding.Namespace) diff --git a/pkg/registry/rbac/rolebinding/registry.go b/pkg/registry/rbac/rolebinding/registry.go index d5e065331e..337badca98 100644 --- a/pkg/registry/rbac/rolebinding/registry.go +++ b/pkg/registry/rbac/rolebinding/registry.go @@ -21,17 +21,18 @@ import ( "k8s.io/kubernetes/pkg/api/rest" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" "k8s.io/kubernetes/pkg/apis/rbac" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/watch" ) // Registry is an interface for things that know how to store RoleBindings. type Registry interface { - ListRoleBindings(ctx api.Context, options *api.ListOptions) (*rbac.RoleBindingList, error) - CreateRoleBinding(ctx api.Context, roleBinding *rbac.RoleBinding) error - UpdateRoleBinding(ctx api.Context, roleBinding *rbac.RoleBinding) error - GetRoleBinding(ctx api.Context, name string, options *metav1.GetOptions) (*rbac.RoleBinding, error) - DeleteRoleBinding(ctx api.Context, name string) error - WatchRoleBindings(ctx api.Context, options *api.ListOptions) (watch.Interface, error) + ListRoleBindings(ctx genericapirequest.Context, options *api.ListOptions) (*rbac.RoleBindingList, error) + CreateRoleBinding(ctx genericapirequest.Context, roleBinding *rbac.RoleBinding) error + UpdateRoleBinding(ctx genericapirequest.Context, roleBinding *rbac.RoleBinding) error + GetRoleBinding(ctx genericapirequest.Context, name string, options *metav1.GetOptions) (*rbac.RoleBinding, error) + DeleteRoleBinding(ctx genericapirequest.Context, name string) error + WatchRoleBindings(ctx genericapirequest.Context, options *api.ListOptions) (watch.Interface, error) } // storage puts strong typing around storage calls @@ -45,7 +46,7 @@ func NewRegistry(s rest.StandardStorage) Registry { return &storage{s} } -func (s *storage) ListRoleBindings(ctx api.Context, options *api.ListOptions) (*rbac.RoleBindingList, error) { +func (s *storage) ListRoleBindings(ctx genericapirequest.Context, options *api.ListOptions) (*rbac.RoleBindingList, error) { obj, err := s.List(ctx, options) if err != nil { return nil, err @@ -54,22 +55,22 @@ func (s *storage) ListRoleBindings(ctx api.Context, options *api.ListOptions) (* return obj.(*rbac.RoleBindingList), nil } -func (s *storage) CreateRoleBinding(ctx api.Context, roleBinding *rbac.RoleBinding) error { +func (s *storage) CreateRoleBinding(ctx genericapirequest.Context, roleBinding *rbac.RoleBinding) error { // TODO(ericchiang): add additional validation _, err := s.Create(ctx, roleBinding) return err } -func (s *storage) UpdateRoleBinding(ctx api.Context, roleBinding *rbac.RoleBinding) error { +func (s *storage) UpdateRoleBinding(ctx genericapirequest.Context, roleBinding *rbac.RoleBinding) error { _, _, err := s.Update(ctx, roleBinding.Name, rest.DefaultUpdatedObjectInfo(roleBinding, api.Scheme)) return err } -func (s *storage) WatchRoleBindings(ctx api.Context, options *api.ListOptions) (watch.Interface, error) { +func (s *storage) WatchRoleBindings(ctx genericapirequest.Context, options *api.ListOptions) (watch.Interface, error) { return s.Watch(ctx, options) } -func (s *storage) GetRoleBinding(ctx api.Context, name string, options *metav1.GetOptions) (*rbac.RoleBinding, error) { +func (s *storage) GetRoleBinding(ctx genericapirequest.Context, name string, options *metav1.GetOptions) (*rbac.RoleBinding, error) { obj, err := s.Get(ctx, name, options) if err != nil { return nil, err @@ -77,7 +78,7 @@ func (s *storage) GetRoleBinding(ctx api.Context, name string, options *metav1.G return obj.(*rbac.RoleBinding), nil } -func (s *storage) DeleteRoleBinding(ctx api.Context, name string) error { +func (s *storage) DeleteRoleBinding(ctx genericapirequest.Context, name string) error { _, err := s.Delete(ctx, name, nil) return err } @@ -88,7 +89,7 @@ type AuthorizerAdapter struct { } func (a AuthorizerAdapter) ListRoleBindings(namespace string) ([]*rbac.RoleBinding, error) { - list, err := a.Registry.ListRoleBindings(api.WithNamespace(api.NewContext(), namespace), &api.ListOptions{}) + list, err := a.Registry.ListRoleBindings(genericapirequest.WithNamespace(genericapirequest.NewContext(), namespace), &api.ListOptions{}) if err != nil { return nil, err } diff --git a/pkg/registry/rbac/rolebinding/strategy.go b/pkg/registry/rbac/rolebinding/strategy.go index 545530f1c1..6c919216da 100644 --- a/pkg/registry/rbac/rolebinding/strategy.go +++ b/pkg/registry/rbac/rolebinding/strategy.go @@ -24,6 +24,7 @@ import ( "k8s.io/kubernetes/pkg/apis/rbac" "k8s.io/kubernetes/pkg/apis/rbac/validation" "k8s.io/kubernetes/pkg/fields" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/runtime" apistorage "k8s.io/kubernetes/pkg/storage" @@ -58,12 +59,12 @@ func (strategy) AllowCreateOnUpdate() bool { // PrepareForCreate clears fields that are not allowed to be set by end users // on creation. -func (strategy) PrepareForCreate(ctx api.Context, obj runtime.Object) { +func (strategy) PrepareForCreate(ctx genericapirequest.Context, obj runtime.Object) { _ = obj.(*rbac.RoleBinding) } // PrepareForUpdate clears fields that are not allowed to be set by end users on update. -func (strategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { +func (strategy) PrepareForUpdate(ctx genericapirequest.Context, obj, old runtime.Object) { newRoleBinding := obj.(*rbac.RoleBinding) oldRoleBinding := old.(*rbac.RoleBinding) @@ -71,7 +72,7 @@ func (strategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { } // Validate validates a new RoleBinding. Validation must check for a correct signature. -func (strategy) Validate(ctx api.Context, obj runtime.Object) field.ErrorList { +func (strategy) Validate(ctx genericapirequest.Context, obj runtime.Object) field.ErrorList { roleBinding := obj.(*rbac.RoleBinding) return validation.ValidateRoleBinding(roleBinding) } @@ -82,7 +83,7 @@ func (strategy) Canonicalize(obj runtime.Object) { } // ValidateUpdate is the default update validation for an end user. -func (strategy) ValidateUpdate(ctx api.Context, obj, old runtime.Object) field.ErrorList { +func (strategy) ValidateUpdate(ctx genericapirequest.Context, obj, old runtime.Object) field.ErrorList { newObj := obj.(*rbac.RoleBinding) errorList := validation.ValidateRoleBinding(newObj) return append(errorList, validation.ValidateRoleBindingUpdate(newObj, old.(*rbac.RoleBinding))...) @@ -97,7 +98,7 @@ func (strategy) AllowUnconditionalUpdate() bool { return true } -func (s strategy) Export(ctx api.Context, obj runtime.Object, exact bool) error { +func (s strategy) Export(ctx genericapirequest.Context, obj runtime.Object, exact bool) error { return nil } diff --git a/pkg/registry/registrytest/BUILD b/pkg/registry/registrytest/BUILD index d4433d3be2..ae894f7f51 100644 --- a/pkg/registry/registrytest/BUILD +++ b/pkg/registry/registrytest/BUILD @@ -26,6 +26,7 @@ go_library( "//pkg/apimachinery/registered:go_default_library", "//pkg/apis/meta/v1:go_default_library", "//pkg/fields:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/labels:go_default_library", "//pkg/registry/generic/registry:go_default_library", "//pkg/runtime:go_default_library", diff --git a/pkg/registry/registrytest/endpoint.go b/pkg/registry/registrytest/endpoint.go index 90f1644957..a5a3843358 100644 --- a/pkg/registry/registrytest/endpoint.go +++ b/pkg/registry/registrytest/endpoint.go @@ -23,6 +23,7 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/errors" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/watch" ) @@ -35,7 +36,7 @@ type EndpointRegistry struct { lock sync.Mutex } -func (e *EndpointRegistry) ListEndpoints(ctx api.Context, options *api.ListOptions) (*api.EndpointsList, error) { +func (e *EndpointRegistry) ListEndpoints(ctx genericapirequest.Context, options *api.ListOptions) (*api.EndpointsList, error) { // TODO: support namespaces in this mock e.lock.Lock() defer e.lock.Unlock() @@ -43,7 +44,7 @@ func (e *EndpointRegistry) ListEndpoints(ctx api.Context, options *api.ListOptio return e.Endpoints, e.Err } -func (e *EndpointRegistry) GetEndpoints(ctx api.Context, name string, options *metav1.GetOptions) (*api.Endpoints, error) { +func (e *EndpointRegistry) GetEndpoints(ctx genericapirequest.Context, name string, options *metav1.GetOptions) (*api.Endpoints, error) { // TODO: support namespaces in this mock e.lock.Lock() defer e.lock.Unlock() @@ -60,11 +61,11 @@ func (e *EndpointRegistry) GetEndpoints(ctx api.Context, name string, options *m return nil, errors.NewNotFound(api.Resource("endpoints"), name) } -func (e *EndpointRegistry) WatchEndpoints(ctx api.Context, options *api.ListOptions) (watch.Interface, error) { +func (e *EndpointRegistry) WatchEndpoints(ctx genericapirequest.Context, options *api.ListOptions) (watch.Interface, error) { return nil, fmt.Errorf("unimplemented!") } -func (e *EndpointRegistry) UpdateEndpoints(ctx api.Context, endpoints *api.Endpoints) error { +func (e *EndpointRegistry) UpdateEndpoints(ctx genericapirequest.Context, endpoints *api.Endpoints) error { // TODO: support namespaces in this mock e.lock.Lock() defer e.lock.Unlock() @@ -91,7 +92,7 @@ func (e *EndpointRegistry) UpdateEndpoints(ctx api.Context, endpoints *api.Endpo return nil } -func (e *EndpointRegistry) DeleteEndpoints(ctx api.Context, name string) error { +func (e *EndpointRegistry) DeleteEndpoints(ctx genericapirequest.Context, name string) error { // TODO: support namespaces in this mock e.lock.Lock() defer e.lock.Unlock() diff --git a/pkg/registry/registrytest/etcd.go b/pkg/registry/registrytest/etcd.go index 07b703f4f5..07f69a8064 100644 --- a/pkg/registry/registrytest/etcd.go +++ b/pkg/registry/registrytest/etcd.go @@ -28,6 +28,7 @@ import ( "k8s.io/kubernetes/pkg/apimachinery/registered" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" "k8s.io/kubernetes/pkg/fields" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/labels" genericregistry "k8s.io/kubernetes/pkg/registry/generic/registry" "k8s.io/kubernetes/pkg/runtime" @@ -175,7 +176,7 @@ func getCodec(obj runtime.Object) (runtime.Codec, error) { // Helper functions -func (t *Tester) getObject(ctx api.Context, obj runtime.Object) (runtime.Object, error) { +func (t *Tester) getObject(ctx genericapirequest.Context, obj runtime.Object) (runtime.Object, error) { accessor, err := meta.Accessor(obj) if err != nil { return nil, err @@ -188,7 +189,7 @@ func (t *Tester) getObject(ctx api.Context, obj runtime.Object) (runtime.Object, return result, nil } -func (t *Tester) createObject(ctx api.Context, obj runtime.Object) error { +func (t *Tester) createObject(ctx genericapirequest.Context, obj runtime.Object) error { accessor, err := meta.Accessor(obj) if err != nil { return err diff --git a/pkg/registry/registrytest/node.go b/pkg/registry/registrytest/node.go index c5bbb7b58c..e7c2b905c0 100644 --- a/pkg/registry/registrytest/node.go +++ b/pkg/registry/registrytest/node.go @@ -22,6 +22,7 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/errors" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/watch" ) @@ -58,13 +59,13 @@ func (r *NodeRegistry) SetError(err error) { r.Err = err } -func (r *NodeRegistry) ListNodes(ctx api.Context, options *api.ListOptions) (*api.NodeList, error) { +func (r *NodeRegistry) ListNodes(ctx genericapirequest.Context, options *api.ListOptions) (*api.NodeList, error) { r.Lock() defer r.Unlock() return &r.Nodes, r.Err } -func (r *NodeRegistry) CreateNode(ctx api.Context, node *api.Node) error { +func (r *NodeRegistry) CreateNode(ctx genericapirequest.Context, node *api.Node) error { r.Lock() defer r.Unlock() r.Node = node.Name @@ -72,7 +73,7 @@ func (r *NodeRegistry) CreateNode(ctx api.Context, node *api.Node) error { return r.Err } -func (r *NodeRegistry) UpdateNode(ctx api.Context, node *api.Node) error { +func (r *NodeRegistry) UpdateNode(ctx genericapirequest.Context, node *api.Node) error { r.Lock() defer r.Unlock() for i, item := range r.Nodes.Items { @@ -84,7 +85,7 @@ func (r *NodeRegistry) UpdateNode(ctx api.Context, node *api.Node) error { return r.Err } -func (r *NodeRegistry) GetNode(ctx api.Context, nodeID string, options *metav1.GetOptions) (*api.Node, error) { +func (r *NodeRegistry) GetNode(ctx genericapirequest.Context, nodeID string, options *metav1.GetOptions) (*api.Node, error) { r.Lock() defer r.Unlock() if r.Err != nil { @@ -98,7 +99,7 @@ func (r *NodeRegistry) GetNode(ctx api.Context, nodeID string, options *metav1.G return nil, errors.NewNotFound(api.Resource("nodes"), nodeID) } -func (r *NodeRegistry) DeleteNode(ctx api.Context, nodeID string) error { +func (r *NodeRegistry) DeleteNode(ctx genericapirequest.Context, nodeID string) error { r.Lock() defer r.Unlock() var newList []api.Node @@ -111,6 +112,6 @@ func (r *NodeRegistry) DeleteNode(ctx api.Context, nodeID string) error { return r.Err } -func (r *NodeRegistry) WatchNodes(ctx api.Context, options *api.ListOptions) (watch.Interface, error) { +func (r *NodeRegistry) WatchNodes(ctx genericapirequest.Context, options *api.ListOptions) (watch.Interface, error) { return nil, r.Err } diff --git a/pkg/registry/registrytest/service.go b/pkg/registry/registrytest/service.go index 7f563ae538..ad49fee4ff 100644 --- a/pkg/registry/registrytest/service.go +++ b/pkg/registry/registrytest/service.go @@ -21,6 +21,7 @@ import ( "k8s.io/kubernetes/pkg/api" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/watch" ) @@ -46,11 +47,11 @@ func (r *ServiceRegistry) SetError(err error) { r.Err = err } -func (r *ServiceRegistry) ListServices(ctx api.Context, options *api.ListOptions) (*api.ServiceList, error) { +func (r *ServiceRegistry) ListServices(ctx genericapirequest.Context, options *api.ListOptions) (*api.ServiceList, error) { r.mu.Lock() defer r.mu.Unlock() - ns, _ := api.NamespaceFrom(ctx) + ns, _ := genericapirequest.NamespaceFrom(ctx) // Copy metadata from internal list into result res := new(api.ServiceList) @@ -70,7 +71,7 @@ func (r *ServiceRegistry) ListServices(ctx api.Context, options *api.ListOptions return res, r.Err } -func (r *ServiceRegistry) CreateService(ctx api.Context, svc *api.Service) (*api.Service, error) { +func (r *ServiceRegistry) CreateService(ctx genericapirequest.Context, svc *api.Service) (*api.Service, error) { r.mu.Lock() defer r.mu.Unlock() @@ -85,7 +86,7 @@ func (r *ServiceRegistry) CreateService(ctx api.Context, svc *api.Service) (*api return svc, r.Err } -func (r *ServiceRegistry) GetService(ctx api.Context, id string, options *metav1.GetOptions) (*api.Service, error) { +func (r *ServiceRegistry) GetService(ctx genericapirequest.Context, id string, options *metav1.GetOptions) (*api.Service, error) { r.mu.Lock() defer r.mu.Unlock() @@ -93,7 +94,7 @@ func (r *ServiceRegistry) GetService(ctx api.Context, id string, options *metav1 return r.Service, r.Err } -func (r *ServiceRegistry) DeleteService(ctx api.Context, id string) error { +func (r *ServiceRegistry) DeleteService(ctx genericapirequest.Context, id string) error { r.mu.Lock() defer r.mu.Unlock() @@ -102,7 +103,7 @@ func (r *ServiceRegistry) DeleteService(ctx api.Context, id string) error { return r.Err } -func (r *ServiceRegistry) UpdateService(ctx api.Context, svc *api.Service) (*api.Service, error) { +func (r *ServiceRegistry) UpdateService(ctx genericapirequest.Context, svc *api.Service) (*api.Service, error) { r.mu.Lock() defer r.mu.Unlock() @@ -112,14 +113,14 @@ func (r *ServiceRegistry) UpdateService(ctx api.Context, svc *api.Service) (*api return svc, r.Err } -func (r *ServiceRegistry) WatchServices(ctx api.Context, options *api.ListOptions) (watch.Interface, error) { +func (r *ServiceRegistry) WatchServices(ctx genericapirequest.Context, options *api.ListOptions) (watch.Interface, error) { r.mu.Lock() defer r.mu.Unlock() return nil, r.Err } -func (r *ServiceRegistry) ExportService(ctx api.Context, name string, options metav1.ExportOptions) (*api.Service, error) { +func (r *ServiceRegistry) ExportService(ctx genericapirequest.Context, name string, options metav1.ExportOptions) (*api.Service, error) { r.mu.Lock() defer r.mu.Unlock() diff --git a/pkg/registry/storage/storageclass/BUILD b/pkg/registry/storage/storageclass/BUILD index 7228a450b4..013e644d99 100644 --- a/pkg/registry/storage/storageclass/BUILD +++ b/pkg/registry/storage/storageclass/BUILD @@ -20,6 +20,7 @@ go_library( "//pkg/apis/storage:go_default_library", "//pkg/apis/storage/validation:go_default_library", "//pkg/fields:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/labels:go_default_library", "//pkg/registry/generic:go_default_library", "//pkg/runtime:go_default_library", @@ -36,5 +37,6 @@ go_test( deps = [ "//pkg/api:go_default_library", "//pkg/apis/storage:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", ], ) diff --git a/pkg/registry/storage/storageclass/strategy.go b/pkg/registry/storage/storageclass/strategy.go index e2dad8403e..b02a826ea5 100644 --- a/pkg/registry/storage/storageclass/strategy.go +++ b/pkg/registry/storage/storageclass/strategy.go @@ -23,6 +23,7 @@ import ( "k8s.io/kubernetes/pkg/apis/storage" "k8s.io/kubernetes/pkg/apis/storage/validation" "k8s.io/kubernetes/pkg/fields" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/registry/generic" "k8s.io/kubernetes/pkg/runtime" @@ -45,11 +46,11 @@ func (storageClassStrategy) NamespaceScoped() bool { } // ResetBeforeCreate clears the Status field which is not allowed to be set by end users on creation. -func (storageClassStrategy) PrepareForCreate(ctx api.Context, obj runtime.Object) { +func (storageClassStrategy) PrepareForCreate(ctx genericapirequest.Context, obj runtime.Object) { _ = obj.(*storage.StorageClass) } -func (storageClassStrategy) Validate(ctx api.Context, obj runtime.Object) field.ErrorList { +func (storageClassStrategy) Validate(ctx genericapirequest.Context, obj runtime.Object) field.ErrorList { storageClass := obj.(*storage.StorageClass) return validation.ValidateStorageClass(storageClass) } @@ -63,12 +64,12 @@ func (storageClassStrategy) AllowCreateOnUpdate() bool { } // PrepareForUpdate sets the Status fields which is not allowed to be set by an end user updating a PV -func (storageClassStrategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { +func (storageClassStrategy) PrepareForUpdate(ctx genericapirequest.Context, obj, old runtime.Object) { _ = obj.(*storage.StorageClass) _ = old.(*storage.StorageClass) } -func (storageClassStrategy) ValidateUpdate(ctx api.Context, obj, old runtime.Object) field.ErrorList { +func (storageClassStrategy) ValidateUpdate(ctx genericapirequest.Context, obj, old runtime.Object) field.ErrorList { errorList := validation.ValidateStorageClass(obj.(*storage.StorageClass)) return append(errorList, validation.ValidateStorageClassUpdate(obj.(*storage.StorageClass), old.(*storage.StorageClass))...) } diff --git a/pkg/registry/storage/storageclass/strategy_test.go b/pkg/registry/storage/storageclass/strategy_test.go index 2ea5b8fdd1..94d7981e36 100644 --- a/pkg/registry/storage/storageclass/strategy_test.go +++ b/pkg/registry/storage/storageclass/strategy_test.go @@ -21,10 +21,11 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/apis/storage" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" ) func TestStorageClassStrategy(t *testing.T) { - ctx := api.NewDefaultContext() + ctx := genericapirequest.NewDefaultContext() if Strategy.NamespaceScoped() { t.Errorf("StorageClass must not be namespace scoped") } diff --git a/plugin/pkg/scheduler/factory/BUILD b/plugin/pkg/scheduler/factory/BUILD index 50a2b1dff1..7e7f4d5490 100644 --- a/plugin/pkg/scheduler/factory/BUILD +++ b/plugin/pkg/scheduler/factory/BUILD @@ -16,7 +16,6 @@ go_library( ], tags = ["automanaged"], deps = [ - "//pkg/api:go_default_library", "//pkg/api/errors:go_default_library", "//pkg/api/v1:go_default_library", "//pkg/apis/extensions/v1beta1:go_default_library", @@ -25,6 +24,7 @@ go_library( "//pkg/client/clientset_generated/clientset:go_default_library", "//pkg/controller/informers:go_default_library", "//pkg/fields:go_default_library", + "//pkg/genericapiserver/api/request:go_default_library", "//pkg/types:go_default_library", "//pkg/util/runtime:go_default_library", "//pkg/util/sets:go_default_library", diff --git a/plugin/pkg/scheduler/factory/factory.go b/plugin/pkg/scheduler/factory/factory.go index 7c69ebbdf8..c5d1080d72 100644 --- a/plugin/pkg/scheduler/factory/factory.go +++ b/plugin/pkg/scheduler/factory/factory.go @@ -25,7 +25,6 @@ import ( "sync/atomic" "time" - "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/errors" "k8s.io/kubernetes/pkg/api/v1" metav1 "k8s.io/kubernetes/pkg/apis/meta/v1" @@ -33,6 +32,7 @@ import ( clientset "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" "k8s.io/kubernetes/pkg/controller/informers" "k8s.io/kubernetes/pkg/fields" + genericapirequest "k8s.io/kubernetes/pkg/genericapiserver/api/request" "k8s.io/kubernetes/pkg/types" "k8s.io/kubernetes/pkg/util/runtime" "k8s.io/kubernetes/pkg/util/sets" @@ -648,8 +648,8 @@ type binder struct { // Bind just does a POST binding RPC. func (b *binder) Bind(binding *v1.Binding) error { glog.V(3).Infof("Attempting to bind %v to %v", binding.Name, binding.Target.Name) - ctx := api.WithNamespace(api.NewContext(), binding.Namespace) - return b.Client.Core().RESTClient().Post().Namespace(api.NamespaceValue(ctx)).Resource("bindings").Body(binding).Do().Error() + ctx := genericapirequest.WithNamespace(genericapirequest.NewContext(), binding.Namespace) + return b.Client.Core().RESTClient().Post().Namespace(genericapirequest.NamespaceValue(ctx)).Resource("bindings").Body(binding).Do().Error() // TODO: use Pods interface for binding once clusters are upgraded // return b.Pods(binding.Namespace).Bind(binding) }