Commit 4eadc5e9 authored by Wojciech Tyczynski's avatar Wojciech Tyczynski

Introduce RESTOptions to configure per-resource storage

parent c533ae4d
...@@ -71,7 +71,7 @@ func (r *registryGetter) GetSecret(namespace, name string) (*api.Secret, error) ...@@ -71,7 +71,7 @@ func (r *registryGetter) GetSecret(namespace, name string) (*api.Secret, error)
// uses the specified storage to retrieve service accounts and secrets. // uses the specified storage to retrieve service accounts and secrets.
func NewGetterFromStorageInterface(s storage.Interface) serviceaccount.ServiceAccountTokenGetter { func NewGetterFromStorageInterface(s storage.Interface) serviceaccount.ServiceAccountTokenGetter {
return NewGetterFromRegistries( return NewGetterFromRegistries(
serviceaccountregistry.NewRegistry(serviceaccountetcd.NewREST(s, generic.UndecoratedStorage)), serviceaccountregistry.NewRegistry(serviceaccountetcd.NewREST(generic.RESTOptions{s, generic.UndecoratedStorage})),
secret.NewRegistry(secretetcd.NewREST(s, generic.UndecoratedStorage)), secret.NewRegistry(secretetcd.NewREST(generic.RESTOptions{s, generic.UndecoratedStorage})),
) )
} }
...@@ -324,38 +324,42 @@ func (m *Master) InstallAPIs(c *Config) { ...@@ -324,38 +324,42 @@ func (m *Master) InstallAPIs(c *Config) {
} }
func (m *Master) initV1ResourcesStorage(c *Config) { func (m *Master) initV1ResourcesStorage(c *Config) {
storageDecorator := m.StorageDecorator()
dbClient := func(resource string) storage.Interface { return c.StorageDestinations.Get("", resource) } dbClient := func(resource string) storage.Interface { return c.StorageDestinations.Get("", resource) }
restOptions := func(resource string) generic.RESTOptions {
return generic.RESTOptions{
Storage: dbClient(resource),
Decorator: m.StorageDecorator(),
}
}
podTemplateStorage := podtemplateetcd.NewREST(dbClient("podTemplates"), storageDecorator) podTemplateStorage := podtemplateetcd.NewREST(restOptions("podTemplates"))
eventStorage := eventetcd.NewREST(dbClient("events"), storageDecorator, uint64(c.EventTTL.Seconds())) eventStorage := eventetcd.NewREST(restOptions("events"), uint64(c.EventTTL.Seconds()))
limitRangeStorage := limitrangeetcd.NewREST(dbClient("limitRanges"), storageDecorator) limitRangeStorage := limitrangeetcd.NewREST(restOptions("limitRanges"))
resourceQuotaStorage, resourceQuotaStatusStorage := resourcequotaetcd.NewREST(dbClient("resourceQuotas"), storageDecorator) resourceQuotaStorage, resourceQuotaStatusStorage := resourcequotaetcd.NewREST(restOptions("resourceQuotas"))
secretStorage := secretetcd.NewREST(dbClient("secrets"), storageDecorator) secretStorage := secretetcd.NewREST(restOptions("secrets"))
serviceAccountStorage := serviceaccountetcd.NewREST(dbClient("serviceAccounts"), storageDecorator) serviceAccountStorage := serviceaccountetcd.NewREST(restOptions("serviceAccounts"))
persistentVolumeStorage, persistentVolumeStatusStorage := pvetcd.NewREST(dbClient("persistentVolumes"), storageDecorator) persistentVolumeStorage, persistentVolumeStatusStorage := pvetcd.NewREST(restOptions("persistentVolumes"))
persistentVolumeClaimStorage, persistentVolumeClaimStatusStorage := pvcetcd.NewREST(dbClient("persistentVolumeClaims"), storageDecorator) persistentVolumeClaimStorage, persistentVolumeClaimStatusStorage := pvcetcd.NewREST(restOptions("persistentVolumeClaims"))
configMapStorage := configmapetcd.NewREST(dbClient("configMaps"), storageDecorator) configMapStorage := configmapetcd.NewREST(restOptions("configMaps"))
namespaceStorage, namespaceStatusStorage, namespaceFinalizeStorage := namespaceetcd.NewREST(dbClient("namespaces"), storageDecorator) namespaceStorage, namespaceStatusStorage, namespaceFinalizeStorage := namespaceetcd.NewREST(restOptions("namespaces"))
m.namespaceRegistry = namespace.NewRegistry(namespaceStorage) m.namespaceRegistry = namespace.NewRegistry(namespaceStorage)
endpointsStorage := endpointsetcd.NewREST(dbClient("endpoints"), storageDecorator) endpointsStorage := endpointsetcd.NewREST(restOptions("endpoints"))
m.endpointRegistry = endpoint.NewRegistry(endpointsStorage) m.endpointRegistry = endpoint.NewRegistry(endpointsStorage)
nodeStorage := nodeetcd.NewStorage(dbClient("nodes"), storageDecorator, c.KubeletClient, m.ProxyTransport) nodeStorage := nodeetcd.NewStorage(restOptions("nodes"), c.KubeletClient, m.ProxyTransport)
m.nodeRegistry = node.NewRegistry(nodeStorage.Node) m.nodeRegistry = node.NewRegistry(nodeStorage.Node)
podStorage := podetcd.NewStorage( podStorage := podetcd.NewStorage(
dbClient("pods"), restOptions("pods"),
storageDecorator,
kubeletclient.ConnectionInfoGetter(nodeStorage.Node), kubeletclient.ConnectionInfoGetter(nodeStorage.Node),
m.ProxyTransport, m.ProxyTransport,
) )
serviceStorage, serviceStatusStorage := serviceetcd.NewREST(dbClient("services"), storageDecorator) serviceStorage, serviceStatusStorage := serviceetcd.NewREST(restOptions("services"))
m.serviceRegistry = service.NewRegistry(serviceStorage) m.serviceRegistry = service.NewRegistry(serviceStorage)
var serviceClusterIPRegistry service.RangeRegistry var serviceClusterIPRegistry service.RangeRegistry
...@@ -381,7 +385,7 @@ func (m *Master) initV1ResourcesStorage(c *Config) { ...@@ -381,7 +385,7 @@ func (m *Master) initV1ResourcesStorage(c *Config) {
}) })
m.serviceNodePortAllocator = serviceNodePortRegistry m.serviceNodePortAllocator = serviceNodePortRegistry
controllerStorage, controllerStatusStorage := controlleretcd.NewREST(dbClient("replicationControllers"), storageDecorator) controllerStorage, controllerStatusStorage := controlleretcd.NewREST(restOptions("replicationControllers"))
serviceRest := service.NewStorage(m.serviceRegistry, m.endpointRegistry, serviceClusterIPAllocator, serviceNodePortAllocator, m.ProxyTransport) serviceRest := service.NewStorage(m.serviceRegistry, m.endpointRegistry, serviceClusterIPAllocator, serviceNodePortAllocator, m.ProxyTransport)
...@@ -608,7 +612,7 @@ func (m *Master) InstallThirdPartyResource(rsrc *extensions.ThirdPartyResource) ...@@ -608,7 +612,7 @@ func (m *Master) InstallThirdPartyResource(rsrc *extensions.ThirdPartyResource)
} }
func (m *Master) thirdpartyapi(group, kind, version string) *apiserver.APIGroupVersion { func (m *Master) thirdpartyapi(group, kind, version string) *apiserver.APIGroupVersion {
resourceStorage := thirdpartyresourcedataetcd.NewREST(m.thirdPartyStorage, generic.UndecoratedStorage, group, kind) resourceStorage := thirdpartyresourcedataetcd.NewREST(generic.RESTOptions{m.thirdPartyStorage, generic.UndecoratedStorage}, group, kind)
apiRoot := makeThirdPartyPath("") apiRoot := makeThirdPartyPath("")
...@@ -656,20 +660,23 @@ func (m *Master) getExtensionResources(c *Config) map[string]rest.Storage { ...@@ -656,20 +660,23 @@ func (m *Master) getExtensionResources(c *Config) map[string]rest.Storage {
} }
return enabled return enabled
} }
storageDecorator := m.StorageDecorator() restOptions := func(resource string) generic.RESTOptions {
dbClient := func(resource string) storage.Interface { return generic.RESTOptions{
return c.StorageDestinations.Get(extensions.GroupName, resource) Storage: c.StorageDestinations.Get(extensions.GroupName, resource),
Decorator: m.StorageDecorator(),
}
} }
storage := map[string]rest.Storage{} storage := map[string]rest.Storage{}
if isEnabled("horizontalpodautoscalers") { if isEnabled("horizontalpodautoscalers") {
m.constructHPAResources(c, storage) m.constructHPAResources(c, storage)
controllerStorage := expcontrolleretcd.NewStorage(c.StorageDestinations.Get("", "replicationControllers"), storageDecorator) controllerStorage := expcontrolleretcd.NewStorage(
generic.RESTOptions{c.StorageDestinations.Get("", "replicationControllers"), m.StorageDecorator()})
storage["replicationcontrollers"] = controllerStorage.ReplicationController storage["replicationcontrollers"] = controllerStorage.ReplicationController
storage["replicationcontrollers/scale"] = controllerStorage.Scale storage["replicationcontrollers/scale"] = controllerStorage.Scale
} }
if isEnabled("thirdpartyresources") { if isEnabled("thirdpartyresources") {
thirdPartyResourceStorage := thirdpartyresourceetcd.NewREST(dbClient("thirdpartyresources"), storageDecorator) thirdPartyResourceStorage := thirdpartyresourceetcd.NewREST(restOptions("thirdpartyresources"))
thirdPartyControl := ThirdPartyController{ thirdPartyControl := ThirdPartyController{
master: m, master: m,
thirdPartyResourceRegistry: thirdPartyResourceStorage, thirdPartyResourceRegistry: thirdPartyResourceStorage,
...@@ -686,12 +693,12 @@ func (m *Master) getExtensionResources(c *Config) map[string]rest.Storage { ...@@ -686,12 +693,12 @@ func (m *Master) getExtensionResources(c *Config) map[string]rest.Storage {
} }
if isEnabled("daemonsets") { if isEnabled("daemonsets") {
daemonSetStorage, daemonSetStatusStorage := daemonetcd.NewREST(dbClient("daemonsets"), storageDecorator) daemonSetStorage, daemonSetStatusStorage := daemonetcd.NewREST(restOptions("daemonsets"))
storage["daemonsets"] = daemonSetStorage storage["daemonsets"] = daemonSetStorage
storage["daemonsets/status"] = daemonSetStatusStorage storage["daemonsets/status"] = daemonSetStatusStorage
} }
if isEnabled("deployments") { if isEnabled("deployments") {
deploymentStorage := deploymentetcd.NewStorage(dbClient("deployments"), storageDecorator) deploymentStorage := deploymentetcd.NewStorage(restOptions("deployments"))
storage["deployments"] = deploymentStorage.Deployment storage["deployments"] = deploymentStorage.Deployment
storage["deployments/status"] = deploymentStorage.Status storage["deployments/status"] = deploymentStorage.Status
// TODO(madhusudancs): Install scale when Scale group issues are fixed (see issue #18528). // TODO(madhusudancs): Install scale when Scale group issues are fixed (see issue #18528).
...@@ -702,16 +709,16 @@ func (m *Master) getExtensionResources(c *Config) map[string]rest.Storage { ...@@ -702,16 +709,16 @@ func (m *Master) getExtensionResources(c *Config) map[string]rest.Storage {
m.constructJobResources(c, storage) m.constructJobResources(c, storage)
} }
if isEnabled("ingresses") { if isEnabled("ingresses") {
ingressStorage, ingressStatusStorage := ingressetcd.NewREST(dbClient("ingresses"), storageDecorator) ingressStorage, ingressStatusStorage := ingressetcd.NewREST(restOptions("ingresses"))
storage["ingresses"] = ingressStorage storage["ingresses"] = ingressStorage
storage["ingresses/status"] = ingressStatusStorage storage["ingresses/status"] = ingressStatusStorage
} }
if isEnabled("podsecuritypolicy") { if isEnabled("podsecuritypolicy") {
podSecurityPolicyStorage := pspetcd.NewREST(dbClient("podsecuritypolicy"), storageDecorator) podSecurityPolicyStorage := pspetcd.NewREST(restOptions("podsecuritypolicy"))
storage["podSecurityPolicies"] = podSecurityPolicyStorage storage["podSecurityPolicies"] = podSecurityPolicyStorage
} }
if isEnabled("replicasets") { if isEnabled("replicasets") {
replicaSetStorage := replicasetetcd.NewStorage(dbClient("replicasets"), storageDecorator) replicaSetStorage := replicasetetcd.NewStorage(restOptions("replicasets"))
storage["replicasets"] = replicaSetStorage.ReplicaSet storage["replicasets"] = replicaSetStorage.ReplicaSet
storage["replicasets/status"] = replicaSetStorage.Status storage["replicasets/status"] = replicaSetStorage.Status
} }
...@@ -726,11 +733,13 @@ func (m *Master) constructHPAResources(c *Config, restStorage map[string]rest.St ...@@ -726,11 +733,13 @@ func (m *Master) constructHPAResources(c *Config, restStorage map[string]rest.St
// Note that hpa's storage settings are changed by changing the autoscaling // Note that hpa's storage settings are changed by changing the autoscaling
// group. Clearly we want all hpas to be stored in the same place no // group. Clearly we want all hpas to be stored in the same place no
// matter where they're accessed from. // matter where they're accessed from.
storageDecorator := m.StorageDecorator() restOptions := func(resource string) generic.RESTOptions {
dbClient := func(resource string) storage.Interface { return generic.RESTOptions{
return c.StorageDestinations.Search([]string{autoscaling.GroupName, extensions.GroupName}, resource) Storage: c.StorageDestinations.Search([]string{autoscaling.GroupName, extensions.GroupName}, resource),
Decorator: m.StorageDecorator(),
}
} }
autoscalerStorage, autoscalerStatusStorage := horizontalpodautoscaleretcd.NewREST(dbClient("horizontalpodautoscalers"), storageDecorator) autoscalerStorage, autoscalerStatusStorage := horizontalpodautoscaleretcd.NewREST(restOptions("horizontalpodautoscalers"))
restStorage["horizontalpodautoscalers"] = autoscalerStorage restStorage["horizontalpodautoscalers"] = autoscalerStorage
restStorage["horizontalpodautoscalers/status"] = autoscalerStatusStorage restStorage["horizontalpodautoscalers/status"] = autoscalerStatusStorage
} }
...@@ -760,11 +769,13 @@ func (m *Master) constructJobResources(c *Config, restStorage map[string]rest.St ...@@ -760,11 +769,13 @@ func (m *Master) constructJobResources(c *Config, restStorage map[string]rest.St
// Note that job's storage settings are changed by changing the batch // Note that job's storage settings are changed by changing the batch
// group. Clearly we want all jobs to be stored in the same place no // group. Clearly we want all jobs to be stored in the same place no
// matter where they're accessed from. // matter where they're accessed from.
storageDecorator := m.StorageDecorator() restOptions := func(resource string) generic.RESTOptions {
dbClient := func(resource string) storage.Interface { return generic.RESTOptions{
return c.StorageDestinations.Search([]string{batch.GroupName, extensions.GroupName}, resource) Storage: c.StorageDestinations.Search([]string{batch.GroupName, extensions.GroupName}, resource),
Decorator: m.StorageDecorator(),
}
} }
jobStorage, jobStatusStorage := jobetcd.NewREST(dbClient("jobs"), storageDecorator) jobStorage, jobStatusStorage := jobetcd.NewREST(restOptions("jobs"))
restStorage["jobs"] = jobStorage restStorage["jobs"] = jobStorage
restStorage["jobs/status"] = jobStatusStorage restStorage["jobs/status"] = jobStatusStorage
} }
......
...@@ -21,7 +21,6 @@ import ( ...@@ -21,7 +21,6 @@ import (
"k8s.io/kubernetes/pkg/registry/configmap" "k8s.io/kubernetes/pkg/registry/configmap"
"k8s.io/kubernetes/pkg/registry/generic" "k8s.io/kubernetes/pkg/registry/generic"
"k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/runtime"
"k8s.io/kubernetes/pkg/storage"
etcdgeneric "k8s.io/kubernetes/pkg/registry/generic/etcd" etcdgeneric "k8s.io/kubernetes/pkg/registry/generic/etcd"
) )
...@@ -32,12 +31,12 @@ type REST struct { ...@@ -32,12 +31,12 @@ type REST struct {
} }
// NewREST returns a RESTStorage object that will work with ConfigMap objects. // NewREST returns a RESTStorage object that will work with ConfigMap objects.
func NewREST(s storage.Interface, storageDecorator generic.StorageDecorator) *REST { func NewREST(opts generic.RESTOptions) *REST {
prefix := "/configmaps" prefix := "/configmaps"
newListFunc := func() runtime.Object { return &api.ConfigMapList{} } newListFunc := func() runtime.Object { return &api.ConfigMapList{} }
storageInterface := storageDecorator( storageInterface := opts.Decorator(
s, 100, &api.ConfigMap{}, prefix, configmap.Strategy, newListFunc) opts.Storage, 100, &api.ConfigMap{}, prefix, configmap.Strategy, newListFunc)
store := &etcdgeneric.Etcd{ store := &etcdgeneric.Etcd{
NewFunc: func() runtime.Object { NewFunc: func() runtime.Object {
......
...@@ -30,7 +30,8 @@ import ( ...@@ -30,7 +30,8 @@ import (
func newStorage(t *testing.T) (*REST, *etcdtesting.EtcdTestServer) { func newStorage(t *testing.T) (*REST, *etcdtesting.EtcdTestServer) {
etcdStorage, server := registrytest.NewEtcdStorage(t, "") etcdStorage, server := registrytest.NewEtcdStorage(t, "")
return NewREST(etcdStorage, generic.UndecoratedStorage), server restOptions := generic.RESTOptions{etcdStorage, generic.UndecoratedStorage}
return NewREST(restOptions), server
} }
func validNewConfigMap() *api.ConfigMap { func validNewConfigMap() *api.ConfigMap {
......
...@@ -27,7 +27,6 @@ import ( ...@@ -27,7 +27,6 @@ import (
"k8s.io/kubernetes/pkg/registry/generic" "k8s.io/kubernetes/pkg/registry/generic"
etcdgeneric "k8s.io/kubernetes/pkg/registry/generic/etcd" etcdgeneric "k8s.io/kubernetes/pkg/registry/generic/etcd"
"k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/runtime"
"k8s.io/kubernetes/pkg/storage"
) )
type REST struct { type REST struct {
...@@ -35,12 +34,12 @@ type REST struct { ...@@ -35,12 +34,12 @@ type REST struct {
} }
// NewREST returns a RESTStorage object that will work against replication controllers. // NewREST returns a RESTStorage object that will work against replication controllers.
func NewREST(s storage.Interface, storageDecorator generic.StorageDecorator) (*REST, *StatusREST) { func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
prefix := "/controllers" prefix := "/controllers"
newListFunc := func() runtime.Object { return &api.ReplicationControllerList{} } newListFunc := func() runtime.Object { return &api.ReplicationControllerList{} }
storageInterface := storageDecorator( storageInterface := opts.Decorator(
s, cachesize.GetWatchCacheSizeByResource(cachesize.Controllers), &api.ReplicationController{}, prefix, controller.Strategy, newListFunc) opts.Storage, cachesize.GetWatchCacheSizeByResource(cachesize.Controllers), &api.ReplicationController{}, prefix, controller.Strategy, newListFunc)
store := &etcdgeneric.Etcd{ store := &etcdgeneric.Etcd{
NewFunc: func() runtime.Object { return &api.ReplicationController{} }, NewFunc: func() runtime.Object { return &api.ReplicationController{} },
......
...@@ -30,7 +30,8 @@ import ( ...@@ -30,7 +30,8 @@ import (
func newStorage(t *testing.T) (*REST, *StatusREST, *etcdtesting.EtcdTestServer) { func newStorage(t *testing.T) (*REST, *StatusREST, *etcdtesting.EtcdTestServer) {
etcdStorage, server := registrytest.NewEtcdStorage(t, "") etcdStorage, server := registrytest.NewEtcdStorage(t, "")
controllerStorage, statusStorage := NewREST(etcdStorage, generic.UndecoratedStorage) restOptions := generic.RESTOptions{etcdStorage, generic.UndecoratedStorage}
controllerStorage, statusStorage := NewREST(restOptions)
return controllerStorage, statusStorage, server return controllerStorage, statusStorage, server
} }
......
...@@ -26,7 +26,6 @@ import ( ...@@ -26,7 +26,6 @@ import (
"k8s.io/kubernetes/pkg/registry/generic" "k8s.io/kubernetes/pkg/registry/generic"
etcdgeneric "k8s.io/kubernetes/pkg/registry/generic/etcd" etcdgeneric "k8s.io/kubernetes/pkg/registry/generic/etcd"
"k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/runtime"
"k8s.io/kubernetes/pkg/storage"
) )
// rest implements a RESTStorage for DaemonSets against etcd // rest implements a RESTStorage for DaemonSets against etcd
...@@ -35,12 +34,12 @@ type REST struct { ...@@ -35,12 +34,12 @@ type REST struct {
} }
// NewREST returns a RESTStorage object that will work against DaemonSets. // NewREST returns a RESTStorage object that will work against DaemonSets.
func NewREST(s storage.Interface, storageDecorator generic.StorageDecorator) (*REST, *StatusREST) { func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
prefix := "/daemonsets" prefix := "/daemonsets"
newListFunc := func() runtime.Object { return &extensions.DaemonSetList{} } newListFunc := func() runtime.Object { return &extensions.DaemonSetList{} }
storageInterface := storageDecorator( storageInterface := opts.Decorator(
s, cachesize.GetWatchCacheSizeByResource(cachesize.Daemonsets), &extensions.DaemonSet{}, prefix, daemonset.Strategy, newListFunc) opts.Storage, cachesize.GetWatchCacheSizeByResource(cachesize.Daemonsets), &extensions.DaemonSet{}, prefix, daemonset.Strategy, newListFunc)
store := &etcdgeneric.Etcd{ store := &etcdgeneric.Etcd{
NewFunc: func() runtime.Object { return &extensions.DaemonSet{} }, NewFunc: func() runtime.Object { return &extensions.DaemonSet{} },
......
...@@ -32,7 +32,8 @@ import ( ...@@ -32,7 +32,8 @@ import (
func newStorage(t *testing.T) (*REST, *StatusREST, *etcdtesting.EtcdTestServer) { func newStorage(t *testing.T) (*REST, *StatusREST, *etcdtesting.EtcdTestServer) {
etcdStorage, server := registrytest.NewEtcdStorage(t, extensions.GroupName) etcdStorage, server := registrytest.NewEtcdStorage(t, extensions.GroupName)
daemonSetStorage, statusStorage := NewREST(etcdStorage, generic.UndecoratedStorage) restOptions := generic.RESTOptions{etcdStorage, generic.UndecoratedStorage}
daemonSetStorage, statusStorage := NewREST(restOptions)
return daemonSetStorage, statusStorage, server return daemonSetStorage, statusStorage, server
} }
......
...@@ -43,8 +43,8 @@ type DeploymentStorage struct { ...@@ -43,8 +43,8 @@ type DeploymentStorage struct {
Rollback *RollbackREST Rollback *RollbackREST
} }
func NewStorage(s storage.Interface, storageDecorator generic.StorageDecorator) DeploymentStorage { func NewStorage(opts generic.RESTOptions) DeploymentStorage {
deploymentRest, deploymentStatusRest, deploymentRollbackRest := NewREST(s, storageDecorator) deploymentRest, deploymentStatusRest, deploymentRollbackRest := NewREST(opts)
deploymentRegistry := deployment.NewRegistry(deploymentRest) deploymentRegistry := deployment.NewRegistry(deploymentRest)
return DeploymentStorage{ return DeploymentStorage{
...@@ -60,12 +60,12 @@ type REST struct { ...@@ -60,12 +60,12 @@ type REST struct {
} }
// NewREST returns a RESTStorage object that will work against deployments. // NewREST returns a RESTStorage object that will work against deployments.
func NewREST(s storage.Interface, storageDecorator generic.StorageDecorator) (*REST, *StatusREST, *RollbackREST) { func NewREST(opts generic.RESTOptions) (*REST, *StatusREST, *RollbackREST) {
prefix := "/deployments" prefix := "/deployments"
newListFunc := func() runtime.Object { return &extensions.DeploymentList{} } newListFunc := func() runtime.Object { return &extensions.DeploymentList{} }
storageInterface := storageDecorator( storageInterface := opts.Decorator(
s, cachesize.GetWatchCacheSizeByResource(cachesize.Deployments), &extensions.Deployment{}, prefix, deployment.Strategy, newListFunc) opts.Storage, cachesize.GetWatchCacheSizeByResource(cachesize.Deployments), &extensions.Deployment{}, prefix, deployment.Strategy, newListFunc)
store := &etcdgeneric.Etcd{ store := &etcdgeneric.Etcd{
NewFunc: func() runtime.Object { return &extensions.Deployment{} }, NewFunc: func() runtime.Object { return &extensions.Deployment{} },
......
...@@ -36,7 +36,8 @@ import ( ...@@ -36,7 +36,8 @@ import (
func newStorage(t *testing.T) (*DeploymentStorage, *etcdtesting.EtcdTestServer) { func newStorage(t *testing.T) (*DeploymentStorage, *etcdtesting.EtcdTestServer) {
etcdStorage, server := registrytest.NewEtcdStorage(t, extensions.GroupName) etcdStorage, server := registrytest.NewEtcdStorage(t, extensions.GroupName)
deploymentStorage := NewStorage(etcdStorage, generic.UndecoratedStorage) restOptions := generic.RESTOptions{etcdStorage, generic.UndecoratedStorage}
deploymentStorage := NewStorage(restOptions)
return &deploymentStorage, server return &deploymentStorage, server
} }
......
...@@ -25,7 +25,6 @@ import ( ...@@ -25,7 +25,6 @@ import (
"k8s.io/kubernetes/pkg/registry/generic" "k8s.io/kubernetes/pkg/registry/generic"
etcdgeneric "k8s.io/kubernetes/pkg/registry/generic/etcd" etcdgeneric "k8s.io/kubernetes/pkg/registry/generic/etcd"
"k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/runtime"
"k8s.io/kubernetes/pkg/storage"
) )
type REST struct { type REST struct {
...@@ -33,12 +32,12 @@ type REST struct { ...@@ -33,12 +32,12 @@ type REST struct {
} }
// NewREST returns a RESTStorage object that will work against endpoints. // NewREST returns a RESTStorage object that will work against endpoints.
func NewREST(s storage.Interface, storageDecorator generic.StorageDecorator) *REST { func NewREST(opts generic.RESTOptions) *REST {
prefix := "/services/endpoints" prefix := "/services/endpoints"
newListFunc := func() runtime.Object { return &api.EndpointsList{} } newListFunc := func() runtime.Object { return &api.EndpointsList{} }
storageInterface := storageDecorator( storageInterface := opts.Decorator(
s, cachesize.GetWatchCacheSizeByResource(cachesize.Endpoints), &api.Endpoints{}, prefix, endpoint.Strategy, newListFunc) opts.Storage, cachesize.GetWatchCacheSizeByResource(cachesize.Endpoints), &api.Endpoints{}, prefix, endpoint.Strategy, newListFunc)
store := &etcdgeneric.Etcd{ store := &etcdgeneric.Etcd{
NewFunc: func() runtime.Object { return &api.Endpoints{} }, NewFunc: func() runtime.Object { return &api.Endpoints{} },
......
...@@ -30,7 +30,8 @@ import ( ...@@ -30,7 +30,8 @@ import (
func newStorage(t *testing.T) (*REST, *etcdtesting.EtcdTestServer) { func newStorage(t *testing.T) (*REST, *etcdtesting.EtcdTestServer) {
etcdStorage, server := registrytest.NewEtcdStorage(t, "") etcdStorage, server := registrytest.NewEtcdStorage(t, "")
return NewREST(etcdStorage, generic.UndecoratedStorage), server restOptions := generic.RESTOptions{etcdStorage, generic.UndecoratedStorage}
return NewREST(restOptions), server
} }
func validNewEndpoints() *api.Endpoints { func validNewEndpoints() *api.Endpoints {
......
...@@ -24,7 +24,6 @@ import ( ...@@ -24,7 +24,6 @@ import (
"k8s.io/kubernetes/pkg/registry/generic" "k8s.io/kubernetes/pkg/registry/generic"
etcdgeneric "k8s.io/kubernetes/pkg/registry/generic/etcd" etcdgeneric "k8s.io/kubernetes/pkg/registry/generic/etcd"
"k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/runtime"
"k8s.io/kubernetes/pkg/storage"
) )
type REST struct { type REST struct {
...@@ -32,12 +31,12 @@ type REST struct { ...@@ -32,12 +31,12 @@ type REST struct {
} }
// NewREST returns a RESTStorage object that will work against events. // NewREST returns a RESTStorage object that will work against events.
func NewREST(s storage.Interface, storageDecorator generic.StorageDecorator, ttl uint64) *REST { func NewREST(opts generic.RESTOptions, ttl uint64) *REST {
prefix := "/events" prefix := "/events"
// We explicitly do NOT do any decoration here - switching on Cacher // We explicitly do NOT do any decoration here - switching on Cacher
// for events will lead to too high memory consumption. // for events will lead to too high memory consumption.
storageInterface := s storageInterface := opts.Storage
store := &etcdgeneric.Etcd{ store := &etcdgeneric.Etcd{
NewFunc: func() runtime.Object { return &api.Event{} }, NewFunc: func() runtime.Object { return &api.Event{} },
......
...@@ -30,7 +30,8 @@ var testTTL uint64 = 60 ...@@ -30,7 +30,8 @@ var testTTL uint64 = 60
func newStorage(t *testing.T) (*REST, *etcdtesting.EtcdTestServer) { func newStorage(t *testing.T) (*REST, *etcdtesting.EtcdTestServer) {
etcdStorage, server := registrytest.NewEtcdStorage(t, "") etcdStorage, server := registrytest.NewEtcdStorage(t, "")
return NewREST(etcdStorage, generic.UndecoratedStorage, testTTL), server restOptions := generic.RESTOptions{etcdStorage, generic.UndecoratedStorage}
return NewREST(restOptions, testTTL), server
} }
func validNewEvent(namespace string) *api.Event { func validNewEvent(namespace string) *api.Event {
......
...@@ -23,7 +23,6 @@ import ( ...@@ -23,7 +23,6 @@ import (
"k8s.io/kubernetes/pkg/api/errors" "k8s.io/kubernetes/pkg/api/errors"
"k8s.io/kubernetes/pkg/api/rest" "k8s.io/kubernetes/pkg/api/rest"
"k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/runtime"
"k8s.io/kubernetes/pkg/storage"
"k8s.io/kubernetes/pkg/registry/controller" "k8s.io/kubernetes/pkg/registry/controller"
"k8s.io/kubernetes/pkg/registry/controller/etcd" "k8s.io/kubernetes/pkg/registry/controller/etcd"
...@@ -40,9 +39,9 @@ type ContainerStorage struct { ...@@ -40,9 +39,9 @@ type ContainerStorage struct {
Scale *ScaleREST Scale *ScaleREST
} }
func NewStorage(s storage.Interface, storageDecorator generic.StorageDecorator) ContainerStorage { func NewStorage(opts generic.RESTOptions) ContainerStorage {
// scale does not set status, only updates spec so we ignore the status // scale does not set status, only updates spec so we ignore the status
controllerREST, _ := etcd.NewREST(s, storageDecorator) controllerREST, _ := etcd.NewREST(opts)
rcRegistry := controller.NewRegistry(controllerREST) rcRegistry := controller.NewRegistry(controllerREST)
return ContainerStorage{ return ContainerStorage{
......
...@@ -30,7 +30,8 @@ import ( ...@@ -30,7 +30,8 @@ import (
func newStorage(t *testing.T) (*ScaleREST, *etcdtesting.EtcdTestServer, storage.Interface) { func newStorage(t *testing.T) (*ScaleREST, *etcdtesting.EtcdTestServer, storage.Interface) {
etcdStorage, server := registrytest.NewEtcdStorage(t, "") etcdStorage, server := registrytest.NewEtcdStorage(t, "")
return NewStorage(etcdStorage, generic.UndecoratedStorage).Scale, server, etcdStorage restOptions := generic.RESTOptions{etcdStorage, generic.UndecoratedStorage}
return NewStorage(restOptions).Scale, server, etcdStorage
} }
var validPodTemplate = api.PodTemplate{ var validPodTemplate = api.PodTemplate{
......
/*
Copyright 2016 The Kubernetes Authors All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package generic
import (
pkgstorage "k8s.io/kubernetes/pkg/storage"
)
// RESTOptions is set of configuration options to generic registries.
type RESTOptions struct {
Storage pkgstorage.Interface
Decorator StorageDecorator
}
...@@ -26,7 +26,6 @@ import ( ...@@ -26,7 +26,6 @@ import (
etcdgeneric "k8s.io/kubernetes/pkg/registry/generic/etcd" etcdgeneric "k8s.io/kubernetes/pkg/registry/generic/etcd"
"k8s.io/kubernetes/pkg/registry/horizontalpodautoscaler" "k8s.io/kubernetes/pkg/registry/horizontalpodautoscaler"
"k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/runtime"
"k8s.io/kubernetes/pkg/storage"
) )
type REST struct { type REST struct {
...@@ -34,12 +33,12 @@ type REST struct { ...@@ -34,12 +33,12 @@ type REST struct {
} }
// NewREST returns a RESTStorage object that will work against horizontal pod autoscalers. // NewREST returns a RESTStorage object that will work against horizontal pod autoscalers.
func NewREST(s storage.Interface, storageDecorator generic.StorageDecorator) (*REST, *StatusREST) { func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
prefix := "/horizontalpodautoscalers" prefix := "/horizontalpodautoscalers"
newListFunc := func() runtime.Object { return &extensions.HorizontalPodAutoscalerList{} } newListFunc := func() runtime.Object { return &extensions.HorizontalPodAutoscalerList{} }
storageInterface := storageDecorator( storageInterface := opts.Decorator(
s, cachesize.GetWatchCacheSizeByResource(cachesize.HorizontalPodAutoscalers), &extensions.HorizontalPodAutoscaler{}, prefix, horizontalpodautoscaler.Strategy, newListFunc) opts.Storage, cachesize.GetWatchCacheSizeByResource(cachesize.HorizontalPodAutoscalers), &extensions.HorizontalPodAutoscaler{}, prefix, horizontalpodautoscaler.Strategy, newListFunc)
store := &etcdgeneric.Etcd{ store := &etcdgeneric.Etcd{
NewFunc: func() runtime.Object { return &extensions.HorizontalPodAutoscaler{} }, NewFunc: func() runtime.Object { return &extensions.HorizontalPodAutoscaler{} },
......
...@@ -33,7 +33,8 @@ import ( ...@@ -33,7 +33,8 @@ import (
func newStorage(t *testing.T) (*REST, *StatusREST, *etcdtesting.EtcdTestServer) { func newStorage(t *testing.T) (*REST, *StatusREST, *etcdtesting.EtcdTestServer) {
etcdStorage, server := registrytest.NewEtcdStorage(t, extensions.GroupName) etcdStorage, server := registrytest.NewEtcdStorage(t, extensions.GroupName)
horizontalPodAutoscalerStorage, statusStorage := NewREST(etcdStorage, generic.UndecoratedStorage) restOptions := generic.RESTOptions{etcdStorage, generic.UndecoratedStorage}
horizontalPodAutoscalerStorage, statusStorage := NewREST(restOptions)
return horizontalPodAutoscalerStorage, statusStorage, server return horizontalPodAutoscalerStorage, statusStorage, server
} }
......
...@@ -26,7 +26,6 @@ import ( ...@@ -26,7 +26,6 @@ import (
etcdgeneric "k8s.io/kubernetes/pkg/registry/generic/etcd" etcdgeneric "k8s.io/kubernetes/pkg/registry/generic/etcd"
ingress "k8s.io/kubernetes/pkg/registry/ingress" ingress "k8s.io/kubernetes/pkg/registry/ingress"
"k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/runtime"
"k8s.io/kubernetes/pkg/storage"
) )
// rest implements a RESTStorage for replication controllers against etcd // rest implements a RESTStorage for replication controllers against etcd
...@@ -35,12 +34,12 @@ type REST struct { ...@@ -35,12 +34,12 @@ type REST struct {
} }
// NewREST returns a RESTStorage object that will work against replication controllers. // NewREST returns a RESTStorage object that will work against replication controllers.
func NewREST(s storage.Interface, storageDecorator generic.StorageDecorator) (*REST, *StatusREST) { func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
prefix := "/ingress" prefix := "/ingress"
newListFunc := func() runtime.Object { return &extensions.IngressList{} } newListFunc := func() runtime.Object { return &extensions.IngressList{} }
storageInterface := storageDecorator( storageInterface := opts.Decorator(
s, cachesize.GetWatchCacheSizeByResource(cachesize.Ingress), &extensions.Ingress{}, prefix, ingress.Strategy, newListFunc) opts.Storage, cachesize.GetWatchCacheSizeByResource(cachesize.Ingress), &extensions.Ingress{}, prefix, ingress.Strategy, newListFunc)
store := &etcdgeneric.Etcd{ store := &etcdgeneric.Etcd{
NewFunc: func() runtime.Object { return &extensions.Ingress{} }, NewFunc: func() runtime.Object { return &extensions.Ingress{} },
......
...@@ -32,7 +32,8 @@ import ( ...@@ -32,7 +32,8 @@ import (
func newStorage(t *testing.T) (*REST, *StatusREST, *etcdtesting.EtcdTestServer) { func newStorage(t *testing.T) (*REST, *StatusREST, *etcdtesting.EtcdTestServer) {
etcdStorage, server := registrytest.NewEtcdStorage(t, extensions.GroupName) etcdStorage, server := registrytest.NewEtcdStorage(t, extensions.GroupName)
ingressStorage, statusStorage := NewREST(etcdStorage, generic.UndecoratedStorage) restOptions := generic.RESTOptions{etcdStorage, generic.UndecoratedStorage}
ingressStorage, statusStorage := NewREST(restOptions)
return ingressStorage, statusStorage, server return ingressStorage, statusStorage, server
} }
......
...@@ -26,7 +26,6 @@ import ( ...@@ -26,7 +26,6 @@ import (
etcdgeneric "k8s.io/kubernetes/pkg/registry/generic/etcd" etcdgeneric "k8s.io/kubernetes/pkg/registry/generic/etcd"
"k8s.io/kubernetes/pkg/registry/job" "k8s.io/kubernetes/pkg/registry/job"
"k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/runtime"
"k8s.io/kubernetes/pkg/storage"
) )
// REST implements a RESTStorage for jobs against etcd // REST implements a RESTStorage for jobs against etcd
...@@ -35,12 +34,12 @@ type REST struct { ...@@ -35,12 +34,12 @@ type REST struct {
} }
// NewREST returns a RESTStorage object that will work against Jobs. // NewREST returns a RESTStorage object that will work against Jobs.
func NewREST(s storage.Interface, storageDecorator generic.StorageDecorator) (*REST, *StatusREST) { func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
prefix := "/jobs" prefix := "/jobs"
newListFunc := func() runtime.Object { return &extensions.JobList{} } newListFunc := func() runtime.Object { return &extensions.JobList{} }
storageInterface := storageDecorator( storageInterface := opts.Decorator(
s, cachesize.GetWatchCacheSizeByResource(cachesize.Jobs), &extensions.Job{}, prefix, job.Strategy, newListFunc) opts.Storage, cachesize.GetWatchCacheSizeByResource(cachesize.Jobs), &extensions.Job{}, prefix, job.Strategy, newListFunc)
store := &etcdgeneric.Etcd{ store := &etcdgeneric.Etcd{
NewFunc: func() runtime.Object { return &extensions.Job{} }, NewFunc: func() runtime.Object { return &extensions.Job{} },
......
...@@ -34,7 +34,8 @@ import ( ...@@ -34,7 +34,8 @@ import (
func newStorage(t *testing.T) (*REST, *StatusREST, *etcdtesting.EtcdTestServer) { func newStorage(t *testing.T) (*REST, *StatusREST, *etcdtesting.EtcdTestServer) {
etcdStorage, server := registrytest.NewEtcdStorage(t, extensions.GroupName) etcdStorage, server := registrytest.NewEtcdStorage(t, extensions.GroupName)
jobStorage, statusStorage := NewREST(etcdStorage, generic.UndecoratedStorage) restOptions := generic.RESTOptions{etcdStorage, generic.UndecoratedStorage}
jobStorage, statusStorage := NewREST(restOptions)
return jobStorage, statusStorage, server return jobStorage, statusStorage, server
} }
......
...@@ -25,7 +25,6 @@ import ( ...@@ -25,7 +25,6 @@ import (
etcdgeneric "k8s.io/kubernetes/pkg/registry/generic/etcd" etcdgeneric "k8s.io/kubernetes/pkg/registry/generic/etcd"
"k8s.io/kubernetes/pkg/registry/limitrange" "k8s.io/kubernetes/pkg/registry/limitrange"
"k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/runtime"
"k8s.io/kubernetes/pkg/storage"
) )
type REST struct { type REST struct {
...@@ -33,12 +32,12 @@ type REST struct { ...@@ -33,12 +32,12 @@ type REST struct {
} }
// NewREST returns a RESTStorage object that will work against horizontal pod autoscalers. // NewREST returns a RESTStorage object that will work against horizontal pod autoscalers.
func NewREST(s storage.Interface, storageDecorator generic.StorageDecorator) *REST { func NewREST(opts generic.RESTOptions) *REST {
prefix := "/limitranges" prefix := "/limitranges"
newListFunc := func() runtime.Object { return &api.LimitRangeList{} } newListFunc := func() runtime.Object { return &api.LimitRangeList{} }
storageInterface := storageDecorator( storageInterface := opts.Decorator(
s, cachesize.GetWatchCacheSizeByResource(cachesize.LimitRanges), &api.LimitRange{}, prefix, limitrange.Strategy, newListFunc) opts.Storage, cachesize.GetWatchCacheSizeByResource(cachesize.LimitRanges), &api.LimitRange{}, prefix, limitrange.Strategy, newListFunc)
store := &etcdgeneric.Etcd{ store := &etcdgeneric.Etcd{
NewFunc: func() runtime.Object { return &api.LimitRange{} }, NewFunc: func() runtime.Object { return &api.LimitRange{} },
......
...@@ -31,7 +31,8 @@ import ( ...@@ -31,7 +31,8 @@ import (
func newStorage(t *testing.T) (*REST, *etcdtesting.EtcdTestServer) { func newStorage(t *testing.T) (*REST, *etcdtesting.EtcdTestServer) {
etcdStorage, server := registrytest.NewEtcdStorage(t, "") etcdStorage, server := registrytest.NewEtcdStorage(t, "")
return NewREST(etcdStorage, generic.UndecoratedStorage), server restOptions := generic.RESTOptions{etcdStorage, generic.UndecoratedStorage}
return NewREST(restOptions), server
} }
func validNewLimitRange() *api.LimitRange { func validNewLimitRange() *api.LimitRange {
......
...@@ -29,7 +29,6 @@ import ( ...@@ -29,7 +29,6 @@ import (
etcdgeneric "k8s.io/kubernetes/pkg/registry/generic/etcd" etcdgeneric "k8s.io/kubernetes/pkg/registry/generic/etcd"
"k8s.io/kubernetes/pkg/registry/namespace" "k8s.io/kubernetes/pkg/registry/namespace"
"k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/runtime"
"k8s.io/kubernetes/pkg/storage"
) )
// rest implements a RESTStorage for namespaces against etcd // rest implements a RESTStorage for namespaces against etcd
...@@ -49,12 +48,12 @@ type FinalizeREST struct { ...@@ -49,12 +48,12 @@ type FinalizeREST struct {
} }
// NewREST returns a RESTStorage object that will work against namespaces. // NewREST returns a RESTStorage object that will work against namespaces.
func NewREST(s storage.Interface, storageDecorator generic.StorageDecorator) (*REST, *StatusREST, *FinalizeREST) { func NewREST(opts generic.RESTOptions) (*REST, *StatusREST, *FinalizeREST) {
prefix := "/namespaces" prefix := "/namespaces"
newListFunc := func() runtime.Object { return &api.NamespaceList{} } newListFunc := func() runtime.Object { return &api.NamespaceList{} }
storageInterface := storageDecorator( storageInterface := opts.Decorator(
s, cachesize.GetWatchCacheSizeByResource(cachesize.Namespaces), &api.Namespace{}, prefix, namespace.Strategy, newListFunc) opts.Storage, cachesize.GetWatchCacheSizeByResource(cachesize.Namespaces), &api.Namespace{}, prefix, namespace.Strategy, newListFunc)
store := &etcdgeneric.Etcd{ store := &etcdgeneric.Etcd{
NewFunc: func() runtime.Object { return &api.Namespace{} }, NewFunc: func() runtime.Object { return &api.Namespace{} },
......
...@@ -31,7 +31,8 @@ import ( ...@@ -31,7 +31,8 @@ import (
func newStorage(t *testing.T) (*REST, *etcdtesting.EtcdTestServer) { func newStorage(t *testing.T) (*REST, *etcdtesting.EtcdTestServer) {
etcdStorage, server := registrytest.NewEtcdStorage(t, "") etcdStorage, server := registrytest.NewEtcdStorage(t, "")
namespaceStorage, _, _ := NewREST(etcdStorage, generic.UndecoratedStorage) restOptions := generic.RESTOptions{etcdStorage, generic.UndecoratedStorage}
namespaceStorage, _, _ := NewREST(restOptions)
return namespaceStorage, server return namespaceStorage, server
} }
......
...@@ -30,7 +30,6 @@ import ( ...@@ -30,7 +30,6 @@ import (
"k8s.io/kubernetes/pkg/registry/node" "k8s.io/kubernetes/pkg/registry/node"
noderest "k8s.io/kubernetes/pkg/registry/node/rest" noderest "k8s.io/kubernetes/pkg/registry/node/rest"
"k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/runtime"
"k8s.io/kubernetes/pkg/storage"
) )
// NodeStorage includes storage for nodes and all sub resources // NodeStorage includes storage for nodes and all sub resources
...@@ -61,12 +60,12 @@ func (r *StatusREST) Update(ctx api.Context, obj runtime.Object) (runtime.Object ...@@ -61,12 +60,12 @@ func (r *StatusREST) Update(ctx api.Context, obj runtime.Object) (runtime.Object
} }
// NewREST returns a RESTStorage object that will work against nodes. // NewREST returns a RESTStorage object that will work against nodes.
func NewStorage(s storage.Interface, storageDecorator generic.StorageDecorator, connection client.ConnectionInfoGetter, proxyTransport http.RoundTripper) NodeStorage { func NewStorage(opts generic.RESTOptions, connection client.ConnectionInfoGetter, proxyTransport http.RoundTripper) NodeStorage {
prefix := "/minions" prefix := "/minions"
newListFunc := func() runtime.Object { return &api.NodeList{} } newListFunc := func() runtime.Object { return &api.NodeList{} }
storageInterface := storageDecorator( storageInterface := opts.Decorator(
s, cachesize.GetWatchCacheSizeByResource(cachesize.Nodes), &api.Node{}, prefix, node.Strategy, newListFunc) opts.Storage, cachesize.GetWatchCacheSizeByResource(cachesize.Nodes), &api.Node{}, prefix, node.Strategy, newListFunc)
store := &etcdgeneric.Etcd{ store := &etcdgeneric.Etcd{
NewFunc: func() runtime.Object { return &api.Node{} }, NewFunc: func() runtime.Object { return &api.Node{} },
......
...@@ -39,7 +39,8 @@ func (fakeConnectionInfoGetter) GetConnectionInfo(ctx api.Context, nodeName stri ...@@ -39,7 +39,8 @@ func (fakeConnectionInfoGetter) GetConnectionInfo(ctx api.Context, nodeName stri
func newStorage(t *testing.T) (*REST, *etcdtesting.EtcdTestServer) { func newStorage(t *testing.T) (*REST, *etcdtesting.EtcdTestServer) {
etcdStorage, server := registrytest.NewEtcdStorage(t, "") etcdStorage, server := registrytest.NewEtcdStorage(t, "")
storage := NewStorage(etcdStorage, generic.UndecoratedStorage, fakeConnectionInfoGetter{}, nil) restOptions := generic.RESTOptions{etcdStorage, generic.UndecoratedStorage}
storage := NewStorage(restOptions, fakeConnectionInfoGetter{}, nil)
return storage.Node, server return storage.Node, server
} }
......
...@@ -25,7 +25,6 @@ import ( ...@@ -25,7 +25,6 @@ import (
etcdgeneric "k8s.io/kubernetes/pkg/registry/generic/etcd" etcdgeneric "k8s.io/kubernetes/pkg/registry/generic/etcd"
"k8s.io/kubernetes/pkg/registry/persistentvolume" "k8s.io/kubernetes/pkg/registry/persistentvolume"
"k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/runtime"
"k8s.io/kubernetes/pkg/storage"
) )
type REST struct { type REST struct {
...@@ -33,12 +32,12 @@ type REST struct { ...@@ -33,12 +32,12 @@ type REST struct {
} }
// NewREST returns a RESTStorage object that will work against persistent volumes. // NewREST returns a RESTStorage object that will work against persistent volumes.
func NewREST(s storage.Interface, storageDecorator generic.StorageDecorator) (*REST, *StatusREST) { func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
prefix := "/persistentvolumes" prefix := "/persistentvolumes"
newListFunc := func() runtime.Object { return &api.PersistentVolumeList{} } newListFunc := func() runtime.Object { return &api.PersistentVolumeList{} }
storageInterface := storageDecorator( storageInterface := opts.Decorator(
s, cachesize.GetWatchCacheSizeByResource(cachesize.PersistentVolumes), &api.PersistentVolume{}, prefix, persistentvolume.Strategy, newListFunc) opts.Storage, cachesize.GetWatchCacheSizeByResource(cachesize.PersistentVolumes), &api.PersistentVolume{}, prefix, persistentvolume.Strategy, newListFunc)
store := &etcdgeneric.Etcd{ store := &etcdgeneric.Etcd{
NewFunc: func() runtime.Object { return &api.PersistentVolume{} }, NewFunc: func() runtime.Object { return &api.PersistentVolume{} },
......
...@@ -33,7 +33,8 @@ import ( ...@@ -33,7 +33,8 @@ import (
func newStorage(t *testing.T) (*REST, *StatusREST, *etcdtesting.EtcdTestServer) { func newStorage(t *testing.T) (*REST, *StatusREST, *etcdtesting.EtcdTestServer) {
etcdStorage, server := registrytest.NewEtcdStorage(t, "") etcdStorage, server := registrytest.NewEtcdStorage(t, "")
persistentVolumeStorage, statusStorage := NewREST(etcdStorage, generic.UndecoratedStorage) restOptions := generic.RESTOptions{etcdStorage, generic.UndecoratedStorage}
persistentVolumeStorage, statusStorage := NewREST(restOptions)
return persistentVolumeStorage, statusStorage, server return persistentVolumeStorage, statusStorage, server
} }
......
...@@ -25,7 +25,6 @@ import ( ...@@ -25,7 +25,6 @@ import (
etcdgeneric "k8s.io/kubernetes/pkg/registry/generic/etcd" etcdgeneric "k8s.io/kubernetes/pkg/registry/generic/etcd"
"k8s.io/kubernetes/pkg/registry/persistentvolumeclaim" "k8s.io/kubernetes/pkg/registry/persistentvolumeclaim"
"k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/runtime"
"k8s.io/kubernetes/pkg/storage"
) )
type REST struct { type REST struct {
...@@ -33,12 +32,12 @@ type REST struct { ...@@ -33,12 +32,12 @@ type REST struct {
} }
// NewREST returns a RESTStorage object that will work against persistent volume claims. // NewREST returns a RESTStorage object that will work against persistent volume claims.
func NewREST(s storage.Interface, storageDecorator generic.StorageDecorator) (*REST, *StatusREST) { func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
prefix := "/persistentvolumeclaims" prefix := "/persistentvolumeclaims"
newListFunc := func() runtime.Object { return &api.PersistentVolumeClaimList{} } newListFunc := func() runtime.Object { return &api.PersistentVolumeClaimList{} }
storageInterface := storageDecorator( storageInterface := opts.Decorator(
s, cachesize.GetWatchCacheSizeByResource(cachesize.PersistentVolumeClaims), &api.PersistentVolumeClaim{}, prefix, persistentvolumeclaim.Strategy, newListFunc) opts.Storage, cachesize.GetWatchCacheSizeByResource(cachesize.PersistentVolumeClaims), &api.PersistentVolumeClaim{}, prefix, persistentvolumeclaim.Strategy, newListFunc)
store := &etcdgeneric.Etcd{ store := &etcdgeneric.Etcd{
NewFunc: func() runtime.Object { return &api.PersistentVolumeClaim{} }, NewFunc: func() runtime.Object { return &api.PersistentVolumeClaim{} },
......
...@@ -33,7 +33,8 @@ import ( ...@@ -33,7 +33,8 @@ import (
func newStorage(t *testing.T) (*REST, *StatusREST, *etcdtesting.EtcdTestServer) { func newStorage(t *testing.T) (*REST, *StatusREST, *etcdtesting.EtcdTestServer) {
etcdStorage, server := registrytest.NewEtcdStorage(t, "") etcdStorage, server := registrytest.NewEtcdStorage(t, "")
persistentVolumeClaimStorage, statusStorage := NewREST(etcdStorage, generic.UndecoratedStorage) restOptions := generic.RESTOptions{etcdStorage, generic.UndecoratedStorage}
persistentVolumeClaimStorage, statusStorage := NewREST(restOptions)
return persistentVolumeClaimStorage, statusStorage, server return persistentVolumeClaimStorage, statusStorage, server
} }
......
...@@ -58,17 +58,12 @@ type REST struct { ...@@ -58,17 +58,12 @@ type REST struct {
} }
// NewStorage returns a RESTStorage object that will work against pods. // NewStorage returns a RESTStorage object that will work against pods.
func NewStorage( func NewStorage(opts generic.RESTOptions, k client.ConnectionInfoGetter, proxyTransport http.RoundTripper) PodStorage {
s storage.Interface,
storageDecorator generic.StorageDecorator,
k client.ConnectionInfoGetter,
proxyTransport http.RoundTripper,
) PodStorage {
prefix := "/pods" prefix := "/pods"
newListFunc := func() runtime.Object { return &api.PodList{} } newListFunc := func() runtime.Object { return &api.PodList{} }
storageInterface := storageDecorator( storageInterface := opts.Decorator(
s, cachesize.GetWatchCacheSizeByResource(cachesize.Pods), &api.Pod{}, prefix, pod.Strategy, newListFunc) opts.Storage, cachesize.GetWatchCacheSizeByResource(cachesize.Pods), &api.Pod{}, prefix, pod.Strategy, newListFunc)
store := &etcdgeneric.Etcd{ store := &etcdgeneric.Etcd{
NewFunc: func() runtime.Object { return &api.Pod{} }, NewFunc: func() runtime.Object { return &api.Pod{} },
......
...@@ -37,7 +37,8 @@ import ( ...@@ -37,7 +37,8 @@ import (
func newStorage(t *testing.T) (*REST, *BindingREST, *StatusREST, *etcdtesting.EtcdTestServer) { func newStorage(t *testing.T) (*REST, *BindingREST, *StatusREST, *etcdtesting.EtcdTestServer) {
etcdStorage, server := registrytest.NewEtcdStorage(t, "") etcdStorage, server := registrytest.NewEtcdStorage(t, "")
storage := NewStorage(etcdStorage, generic.UndecoratedStorage, nil, nil) restOptions := generic.RESTOptions{etcdStorage, generic.UndecoratedStorage}
storage := NewStorage(restOptions, nil, nil)
return storage.Pod, storage.Binding, storage.Status, server return storage.Pod, storage.Binding, storage.Status, server
} }
......
...@@ -25,7 +25,6 @@ import ( ...@@ -25,7 +25,6 @@ import (
etcdgeneric "k8s.io/kubernetes/pkg/registry/generic/etcd" etcdgeneric "k8s.io/kubernetes/pkg/registry/generic/etcd"
"k8s.io/kubernetes/pkg/registry/podsecuritypolicy" "k8s.io/kubernetes/pkg/registry/podsecuritypolicy"
"k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/runtime"
"k8s.io/kubernetes/pkg/storage"
) )
// REST implements a RESTStorage for PodSecurityPolicies against etcd. // REST implements a RESTStorage for PodSecurityPolicies against etcd.
...@@ -36,10 +35,10 @@ type REST struct { ...@@ -36,10 +35,10 @@ type REST struct {
const Prefix = "/podsecuritypolicies" const Prefix = "/podsecuritypolicies"
// NewREST returns a RESTStorage object that will work against PodSecurityPolicy objects. // NewREST returns a RESTStorage object that will work against PodSecurityPolicy objects.
func NewREST(s storage.Interface, storageDecorator generic.StorageDecorator) *REST { func NewREST(opts generic.RESTOptions) *REST {
newListFunc := func() runtime.Object { return &extensions.PodSecurityPolicyList{} } newListFunc := func() runtime.Object { return &extensions.PodSecurityPolicyList{} }
storageInterface := storageDecorator( storageInterface := opts.Decorator(
s, 100, &extensions.PodSecurityPolicy{}, Prefix, podsecuritypolicy.Strategy, newListFunc) opts.Storage, 100, &extensions.PodSecurityPolicy{}, Prefix, podsecuritypolicy.Strategy, newListFunc)
store := &etcdgeneric.Etcd{ store := &etcdgeneric.Etcd{
NewFunc: func() runtime.Object { return &extensions.PodSecurityPolicy{} }, NewFunc: func() runtime.Object { return &extensions.PodSecurityPolicy{} },
......
...@@ -33,7 +33,8 @@ import ( ...@@ -33,7 +33,8 @@ import (
func newStorage(t *testing.T) (*REST, *etcdtesting.EtcdTestServer) { func newStorage(t *testing.T) (*REST, *etcdtesting.EtcdTestServer) {
etcdStorage, server := registrytest.NewEtcdStorage(t, "extensions") etcdStorage, server := registrytest.NewEtcdStorage(t, "extensions")
return NewREST(etcdStorage, generic.UndecoratedStorage), server restOptions := generic.RESTOptions{etcdStorage, generic.UndecoratedStorage}
return NewREST(restOptions), server
} }
func validNewPodSecurityPolicy() *extensions.PodSecurityPolicy { func validNewPodSecurityPolicy() *extensions.PodSecurityPolicy {
......
...@@ -25,7 +25,6 @@ import ( ...@@ -25,7 +25,6 @@ import (
etcdgeneric "k8s.io/kubernetes/pkg/registry/generic/etcd" etcdgeneric "k8s.io/kubernetes/pkg/registry/generic/etcd"
"k8s.io/kubernetes/pkg/registry/podtemplate" "k8s.io/kubernetes/pkg/registry/podtemplate"
"k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/runtime"
"k8s.io/kubernetes/pkg/storage"
) )
type REST struct { type REST struct {
...@@ -33,12 +32,12 @@ type REST struct { ...@@ -33,12 +32,12 @@ type REST struct {
} }
// NewREST returns a RESTStorage object that will work against pod templates. // NewREST returns a RESTStorage object that will work against pod templates.
func NewREST(s storage.Interface, storageDecorator generic.StorageDecorator) *REST { func NewREST(opts generic.RESTOptions) *REST {
prefix := "/podtemplates" prefix := "/podtemplates"
newListFunc := func() runtime.Object { return &api.PodTemplateList{} } newListFunc := func() runtime.Object { return &api.PodTemplateList{} }
storageInterface := storageDecorator( storageInterface := opts.Decorator(
s, cachesize.GetWatchCacheSizeByResource(cachesize.PodTemplates), &api.PodTemplate{}, prefix, podtemplate.Strategy, newListFunc) opts.Storage, cachesize.GetWatchCacheSizeByResource(cachesize.PodTemplates), &api.PodTemplate{}, prefix, podtemplate.Strategy, newListFunc)
store := &etcdgeneric.Etcd{ store := &etcdgeneric.Etcd{
NewFunc: func() runtime.Object { return &api.PodTemplate{} }, NewFunc: func() runtime.Object { return &api.PodTemplate{} },
......
...@@ -30,7 +30,8 @@ import ( ...@@ -30,7 +30,8 @@ import (
func newStorage(t *testing.T) (*REST, *etcdtesting.EtcdTestServer) { func newStorage(t *testing.T) (*REST, *etcdtesting.EtcdTestServer) {
etcdStorage, server := registrytest.NewEtcdStorage(t, "") etcdStorage, server := registrytest.NewEtcdStorage(t, "")
return NewREST(etcdStorage, generic.UndecoratedStorage), server restOptions := generic.RESTOptions{etcdStorage, generic.UndecoratedStorage}
return NewREST(restOptions), server
} }
func validNewPodTemplate(name string) *api.PodTemplate { func validNewPodTemplate(name string) *api.PodTemplate {
......
...@@ -28,7 +28,6 @@ import ( ...@@ -28,7 +28,6 @@ import (
etcdgeneric "k8s.io/kubernetes/pkg/registry/generic/etcd" etcdgeneric "k8s.io/kubernetes/pkg/registry/generic/etcd"
"k8s.io/kubernetes/pkg/registry/replicaset" "k8s.io/kubernetes/pkg/registry/replicaset"
"k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/runtime"
"k8s.io/kubernetes/pkg/storage"
) )
// ReplicaSetStorage includes dummy storage for ReplicaSets and for Scale subresource. // ReplicaSetStorage includes dummy storage for ReplicaSets and for Scale subresource.
...@@ -37,8 +36,8 @@ type ReplicaSetStorage struct { ...@@ -37,8 +36,8 @@ type ReplicaSetStorage struct {
Status *StatusREST Status *StatusREST
} }
func NewStorage(s storage.Interface, storageDecorator generic.StorageDecorator) ReplicaSetStorage { func NewStorage(opts generic.RESTOptions) ReplicaSetStorage {
replicaSetRest, replicaSetStatusRest := NewREST(s, storageDecorator) replicaSetRest, replicaSetStatusRest := NewREST(opts)
return ReplicaSetStorage{ return ReplicaSetStorage{
ReplicaSet: replicaSetRest, ReplicaSet: replicaSetRest,
...@@ -51,12 +50,12 @@ type REST struct { ...@@ -51,12 +50,12 @@ type REST struct {
} }
// NewREST returns a RESTStorage object that will work against ReplicaSet. // NewREST returns a RESTStorage object that will work against ReplicaSet.
func NewREST(s storage.Interface, storageDecorator generic.StorageDecorator) (*REST, *StatusREST) { func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
prefix := "/replicasets" prefix := "/replicasets"
newListFunc := func() runtime.Object { return &extensions.ReplicaSetList{} } newListFunc := func() runtime.Object { return &extensions.ReplicaSetList{} }
storageInterface := storageDecorator( storageInterface := opts.Decorator(
s, cachesize.GetWatchCacheSizeByResource(cachesize.Replicasets), &extensions.ReplicaSet{}, prefix, replicaset.Strategy, newListFunc) opts.Storage, cachesize.GetWatchCacheSizeByResource(cachesize.Replicasets), &extensions.ReplicaSet{}, prefix, replicaset.Strategy, newListFunc)
store := &etcdgeneric.Etcd{ store := &etcdgeneric.Etcd{
NewFunc: func() runtime.Object { return &extensions.ReplicaSet{} }, NewFunc: func() runtime.Object { return &extensions.ReplicaSet{} },
......
...@@ -32,7 +32,8 @@ import ( ...@@ -32,7 +32,8 @@ import (
func newStorage(t *testing.T) (*ReplicaSetStorage, *etcdtesting.EtcdTestServer) { func newStorage(t *testing.T) (*ReplicaSetStorage, *etcdtesting.EtcdTestServer) {
etcdStorage, server := registrytest.NewEtcdStorage(t, "extensions") etcdStorage, server := registrytest.NewEtcdStorage(t, "extensions")
replicaSetStorage := NewStorage(etcdStorage, generic.UndecoratedStorage) restOptions := generic.RESTOptions{etcdStorage, generic.UndecoratedStorage}
replicaSetStorage := NewStorage(restOptions)
return &replicaSetStorage, server return &replicaSetStorage, server
} }
......
...@@ -25,7 +25,6 @@ import ( ...@@ -25,7 +25,6 @@ import (
etcdgeneric "k8s.io/kubernetes/pkg/registry/generic/etcd" etcdgeneric "k8s.io/kubernetes/pkg/registry/generic/etcd"
"k8s.io/kubernetes/pkg/registry/resourcequota" "k8s.io/kubernetes/pkg/registry/resourcequota"
"k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/runtime"
"k8s.io/kubernetes/pkg/storage"
) )
type REST struct { type REST struct {
...@@ -33,12 +32,12 @@ type REST struct { ...@@ -33,12 +32,12 @@ type REST struct {
} }
// NewREST returns a RESTStorage object that will work against resource quotas. // NewREST returns a RESTStorage object that will work against resource quotas.
func NewREST(s storage.Interface, storageDecorator generic.StorageDecorator) (*REST, *StatusREST) { func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
prefix := "/resourcequotas" prefix := "/resourcequotas"
newListFunc := func() runtime.Object { return &api.ResourceQuotaList{} } newListFunc := func() runtime.Object { return &api.ResourceQuotaList{} }
storageInterface := storageDecorator( storageInterface := opts.Decorator(
s, cachesize.GetWatchCacheSizeByResource(cachesize.ResourceQuotas), &api.ResourceQuota{}, prefix, resourcequota.Strategy, newListFunc) opts.Storage, cachesize.GetWatchCacheSizeByResource(cachesize.ResourceQuotas), &api.ResourceQuota{}, prefix, resourcequota.Strategy, newListFunc)
store := &etcdgeneric.Etcd{ store := &etcdgeneric.Etcd{
NewFunc: func() runtime.Object { return &api.ResourceQuota{} }, NewFunc: func() runtime.Object { return &api.ResourceQuota{} },
......
...@@ -32,7 +32,8 @@ import ( ...@@ -32,7 +32,8 @@ import (
func newStorage(t *testing.T) (*REST, *StatusREST, *etcdtesting.EtcdTestServer) { func newStorage(t *testing.T) (*REST, *StatusREST, *etcdtesting.EtcdTestServer) {
etcdStorage, server := registrytest.NewEtcdStorage(t, "") etcdStorage, server := registrytest.NewEtcdStorage(t, "")
resourceQuotaStorage, statusStorage := NewREST(etcdStorage, generic.UndecoratedStorage) restOptions := generic.RESTOptions{etcdStorage, generic.UndecoratedStorage}
resourceQuotaStorage, statusStorage := NewREST(restOptions)
return resourceQuotaStorage, statusStorage, server return resourceQuotaStorage, statusStorage, server
} }
......
...@@ -25,7 +25,6 @@ import ( ...@@ -25,7 +25,6 @@ import (
etcdgeneric "k8s.io/kubernetes/pkg/registry/generic/etcd" etcdgeneric "k8s.io/kubernetes/pkg/registry/generic/etcd"
"k8s.io/kubernetes/pkg/registry/secret" "k8s.io/kubernetes/pkg/registry/secret"
"k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/runtime"
"k8s.io/kubernetes/pkg/storage"
) )
type REST struct { type REST struct {
...@@ -33,12 +32,12 @@ type REST struct { ...@@ -33,12 +32,12 @@ type REST struct {
} }
// NewREST returns a RESTStorage object that will work against secrets. // NewREST returns a RESTStorage object that will work against secrets.
func NewREST(s storage.Interface, storageDecorator generic.StorageDecorator) *REST { func NewREST(opts generic.RESTOptions) *REST {
prefix := "/secrets" prefix := "/secrets"
newListFunc := func() runtime.Object { return &api.SecretList{} } newListFunc := func() runtime.Object { return &api.SecretList{} }
storageInterface := storageDecorator( storageInterface := opts.Decorator(
s, cachesize.GetWatchCacheSizeByResource(cachesize.Secrets), &api.Secret{}, prefix, secret.Strategy, newListFunc) opts.Storage, cachesize.GetWatchCacheSizeByResource(cachesize.Secrets), &api.Secret{}, prefix, secret.Strategy, newListFunc)
store := &etcdgeneric.Etcd{ store := &etcdgeneric.Etcd{
NewFunc: func() runtime.Object { return &api.Secret{} }, NewFunc: func() runtime.Object { return &api.Secret{} },
......
...@@ -30,7 +30,8 @@ import ( ...@@ -30,7 +30,8 @@ import (
func newStorage(t *testing.T) (*REST, *etcdtesting.EtcdTestServer) { func newStorage(t *testing.T) (*REST, *etcdtesting.EtcdTestServer) {
etcdStorage, server := registrytest.NewEtcdStorage(t, "") etcdStorage, server := registrytest.NewEtcdStorage(t, "")
return NewREST(etcdStorage, generic.UndecoratedStorage), server restOptions := generic.RESTOptions{etcdStorage, generic.UndecoratedStorage}
return NewREST(restOptions), server
} }
func validNewSecret(name string) *api.Secret { func validNewSecret(name string) *api.Secret {
......
...@@ -25,7 +25,6 @@ import ( ...@@ -25,7 +25,6 @@ import (
etcdgeneric "k8s.io/kubernetes/pkg/registry/generic/etcd" etcdgeneric "k8s.io/kubernetes/pkg/registry/generic/etcd"
"k8s.io/kubernetes/pkg/registry/service" "k8s.io/kubernetes/pkg/registry/service"
"k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/runtime"
"k8s.io/kubernetes/pkg/storage"
) )
type REST struct { type REST struct {
...@@ -33,12 +32,12 @@ type REST struct { ...@@ -33,12 +32,12 @@ type REST struct {
} }
// NewREST returns a RESTStorage object that will work against services. // NewREST returns a RESTStorage object that will work against services.
func NewREST(s storage.Interface, storageDecorator generic.StorageDecorator) (*REST, *StatusREST) { func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) {
prefix := "/services/specs" prefix := "/services/specs"
newListFunc := func() runtime.Object { return &api.ServiceList{} } newListFunc := func() runtime.Object { return &api.ServiceList{} }
storageInterface := storageDecorator( storageInterface := opts.Decorator(
s, cachesize.GetWatchCacheSizeByResource(cachesize.Services), &api.Service{}, prefix, service.Strategy, newListFunc) opts.Storage, cachesize.GetWatchCacheSizeByResource(cachesize.Services), &api.Service{}, prefix, service.Strategy, newListFunc)
store := &etcdgeneric.Etcd{ store := &etcdgeneric.Etcd{
NewFunc: func() runtime.Object { return &api.Service{} }, NewFunc: func() runtime.Object { return &api.Service{} },
......
...@@ -31,7 +31,8 @@ import ( ...@@ -31,7 +31,8 @@ import (
func newStorage(t *testing.T) (*REST, *StatusREST, *etcdtesting.EtcdTestServer) { func newStorage(t *testing.T) (*REST, *StatusREST, *etcdtesting.EtcdTestServer) {
etcdStorage, server := registrytest.NewEtcdStorage(t, "") etcdStorage, server := registrytest.NewEtcdStorage(t, "")
serviceStorage, statusStorage := NewREST(etcdStorage, generic.UndecoratedStorage) restOptions := generic.RESTOptions{etcdStorage, generic.UndecoratedStorage}
serviceStorage, statusStorage := NewREST(restOptions)
return serviceStorage, statusStorage, server return serviceStorage, statusStorage, server
} }
......
...@@ -25,7 +25,6 @@ import ( ...@@ -25,7 +25,6 @@ import (
etcdgeneric "k8s.io/kubernetes/pkg/registry/generic/etcd" etcdgeneric "k8s.io/kubernetes/pkg/registry/generic/etcd"
"k8s.io/kubernetes/pkg/registry/serviceaccount" "k8s.io/kubernetes/pkg/registry/serviceaccount"
"k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/runtime"
"k8s.io/kubernetes/pkg/storage"
) )
type REST struct { type REST struct {
...@@ -33,12 +32,12 @@ type REST struct { ...@@ -33,12 +32,12 @@ type REST struct {
} }
// NewREST returns a RESTStorage object that will work against service accounts. // NewREST returns a RESTStorage object that will work against service accounts.
func NewREST(s storage.Interface, storageDecorator generic.StorageDecorator) *REST { func NewREST(opts generic.RESTOptions) *REST {
prefix := "/serviceaccounts" prefix := "/serviceaccounts"
newListFunc := func() runtime.Object { return &api.ServiceAccountList{} } newListFunc := func() runtime.Object { return &api.ServiceAccountList{} }
storageInterface := storageDecorator( storageInterface := opts.Decorator(
s, cachesize.GetWatchCacheSizeByResource(cachesize.ServiceAccounts), &api.ServiceAccount{}, prefix, serviceaccount.Strategy, newListFunc) opts.Storage, cachesize.GetWatchCacheSizeByResource(cachesize.ServiceAccounts), &api.ServiceAccount{}, prefix, serviceaccount.Strategy, newListFunc)
store := &etcdgeneric.Etcd{ store := &etcdgeneric.Etcd{
NewFunc: func() runtime.Object { return &api.ServiceAccount{} }, NewFunc: func() runtime.Object { return &api.ServiceAccount{} },
......
...@@ -30,7 +30,8 @@ import ( ...@@ -30,7 +30,8 @@ import (
func newStorage(t *testing.T) (*REST, *etcdtesting.EtcdTestServer) { func newStorage(t *testing.T) (*REST, *etcdtesting.EtcdTestServer) {
etcdStorage, server := registrytest.NewEtcdStorage(t, "") etcdStorage, server := registrytest.NewEtcdStorage(t, "")
return NewREST(etcdStorage, generic.UndecoratedStorage), server restOptions := generic.RESTOptions{etcdStorage, generic.UndecoratedStorage}
return NewREST(restOptions), server
} }
func validNewServiceAccount(name string) *api.ServiceAccount { func validNewServiceAccount(name string) *api.ServiceAccount {
......
...@@ -25,7 +25,6 @@ import ( ...@@ -25,7 +25,6 @@ import (
etcdgeneric "k8s.io/kubernetes/pkg/registry/generic/etcd" etcdgeneric "k8s.io/kubernetes/pkg/registry/generic/etcd"
"k8s.io/kubernetes/pkg/registry/thirdpartyresource" "k8s.io/kubernetes/pkg/registry/thirdpartyresource"
"k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/runtime"
"k8s.io/kubernetes/pkg/storage"
) )
// REST implements a RESTStorage for ThirdPartyResources against etcd // REST implements a RESTStorage for ThirdPartyResources against etcd
...@@ -34,11 +33,11 @@ type REST struct { ...@@ -34,11 +33,11 @@ type REST struct {
} }
// NewREST returns a registry which will store ThirdPartyResource in the given helper // NewREST returns a registry which will store ThirdPartyResource in the given helper
func NewREST(s storage.Interface, storageDecorator generic.StorageDecorator) *REST { func NewREST(opts generic.RESTOptions) *REST {
prefix := "/thirdpartyresources" prefix := "/thirdpartyresources"
// We explicitly do NOT do any decoration here yet. // We explicitly do NOT do any decoration here yet.
storageInterface := s storageInterface := opts.Storage
store := &etcdgeneric.Etcd{ store := &etcdgeneric.Etcd{
NewFunc: func() runtime.Object { return &extensions.ThirdPartyResource{} }, NewFunc: func() runtime.Object { return &extensions.ThirdPartyResource{} },
......
...@@ -33,7 +33,8 @@ import ( ...@@ -33,7 +33,8 @@ import (
func newStorage(t *testing.T) (*REST, *etcdtesting.EtcdTestServer) { func newStorage(t *testing.T) (*REST, *etcdtesting.EtcdTestServer) {
etcdStorage, server := registrytest.NewEtcdStorage(t, extensions.GroupName) etcdStorage, server := registrytest.NewEtcdStorage(t, extensions.GroupName)
return NewREST(etcdStorage, generic.UndecoratedStorage), server restOptions := generic.RESTOptions{etcdStorage, generic.UndecoratedStorage}
return NewREST(restOptions), server
} }
func validNewThirdPartyResource(name string) *extensions.ThirdPartyResource { func validNewThirdPartyResource(name string) *extensions.ThirdPartyResource {
......
...@@ -27,7 +27,6 @@ import ( ...@@ -27,7 +27,6 @@ import (
etcdgeneric "k8s.io/kubernetes/pkg/registry/generic/etcd" etcdgeneric "k8s.io/kubernetes/pkg/registry/generic/etcd"
"k8s.io/kubernetes/pkg/registry/thirdpartyresourcedata" "k8s.io/kubernetes/pkg/registry/thirdpartyresourcedata"
"k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/runtime"
"k8s.io/kubernetes/pkg/storage"
) )
// REST implements a RESTStorage for ThirdPartyResourceDatas against etcd // REST implements a RESTStorage for ThirdPartyResourceDatas against etcd
...@@ -37,11 +36,11 @@ type REST struct { ...@@ -37,11 +36,11 @@ type REST struct {
} }
// NewREST returns a registry which will store ThirdPartyResourceData in the given helper // NewREST returns a registry which will store ThirdPartyResourceData in the given helper
func NewREST(s storage.Interface, storageDecorator generic.StorageDecorator, group, kind string) *REST { func NewREST(opts generic.RESTOptions, group, kind string) *REST {
prefix := "/ThirdPartyResourceData/" + group + "/" + strings.ToLower(kind) + "s" prefix := "/ThirdPartyResourceData/" + group + "/" + strings.ToLower(kind) + "s"
// We explicitly do NOT do any decoration here yet. // We explicitly do NOT do any decoration here yet.
storageInterface := s storageInterface := opts.Storage
store := &etcdgeneric.Etcd{ store := &etcdgeneric.Etcd{
NewFunc: func() runtime.Object { return &extensions.ThirdPartyResourceData{} }, NewFunc: func() runtime.Object { return &extensions.ThirdPartyResourceData{} },
......
...@@ -33,7 +33,8 @@ import ( ...@@ -33,7 +33,8 @@ import (
func newStorage(t *testing.T) (*REST, *etcdtesting.EtcdTestServer) { func newStorage(t *testing.T) (*REST, *etcdtesting.EtcdTestServer) {
etcdStorage, server := registrytest.NewEtcdStorage(t, extensions.GroupName) etcdStorage, server := registrytest.NewEtcdStorage(t, extensions.GroupName)
return NewREST(etcdStorage, generic.UndecoratedStorage, "foo", "bar"), server restOptions := generic.RESTOptions{etcdStorage, generic.UndecoratedStorage}
return NewREST(restOptions, "foo", "bar"), server
} }
func validNewThirdPartyResourceData(name string) *extensions.ThirdPartyResourceData { func validNewThirdPartyResourceData(name string) *extensions.ThirdPartyResourceData {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment