Introduce RESTOptions to configure per-resource storage
This commit is contained in:
		@@ -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) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
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) {
 | 
				
			|||||||
	})
 | 
						})
 | 
				
			||||||
	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)
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
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 {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
		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 {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	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 {
 | 
				
			|||||||
		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
 | 
				
			|||||||
	// 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
 | 
				
			|||||||
	// 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 (
 | 
				
			|||||||
	"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 {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 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 (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
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 (
 | 
				
			|||||||
	"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 {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 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 (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
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 (
 | 
				
			|||||||
	"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 {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 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 (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
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 {
 | 
				
			|||||||
	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 {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 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 (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
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 (
 | 
				
			|||||||
	"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 {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 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 (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
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 (
 | 
				
			|||||||
	"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 {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 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
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
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 (
 | 
				
			|||||||
	"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 {
 | 
				
			|||||||
	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 (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
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{
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										27
									
								
								pkg/registry/generic/options.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								pkg/registry/generic/options.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,27 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					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 (
 | 
				
			|||||||
	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 {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 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 (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
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 (
 | 
				
			|||||||
	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 {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 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 (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
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 (
 | 
				
			|||||||
	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 {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 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 (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
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 (
 | 
				
			|||||||
	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 {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 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 (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
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 (
 | 
				
			|||||||
	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 {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 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 (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
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 (
 | 
				
			|||||||
	"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
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 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
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
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 (
 | 
				
			|||||||
	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 {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 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 (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
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 (
 | 
				
			|||||||
	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 {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 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 (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
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 {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 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 (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
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 (
 | 
				
			|||||||
	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 {
 | 
				
			|||||||
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 (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
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 (
 | 
				
			|||||||
	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 {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 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 (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
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 (
 | 
				
			|||||||
	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 {
 | 
				
			|||||||
	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 {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 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 (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
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 (
 | 
				
			|||||||
	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 {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 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 (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
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 (
 | 
				
			|||||||
	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 {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 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 (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
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 (
 | 
				
			|||||||
	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 {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 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 (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
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 (
 | 
				
			|||||||
	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 {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 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 (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
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 (
 | 
				
			|||||||
	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 {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 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 (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
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 (
 | 
				
			|||||||
	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 {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 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 (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
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 {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user