// NewREST returns a registry which will store ThirdPartyResourceData in the given helper func NewREST(opts generic.RESTOptions, group, kind string) *REST { prefix := "/ThirdPartyResourceData/" + group + "/" + strings.ToLower(kind) + "s" // We explicitly do NOT do any decoration here yet. storageInterface := opts.Storage store := ®istry.Store{ NewFunc: func() runtime.Object { return &extensions.ThirdPartyResourceData{} }, NewListFunc: func() runtime.Object { return &extensions.ThirdPartyResourceDataList{} }, KeyRootFunc: func(ctx api.Context) string { return registry.NamespaceKeyRootFunc(ctx, prefix) }, KeyFunc: func(ctx api.Context, id string) (string, error) { return registry.NamespaceKeyFunc(ctx, prefix, id) }, ObjectNameFunc: func(obj runtime.Object) (string, error) { return obj.(*extensions.ThirdPartyResourceData).Name, nil }, PredicateFunc: func(label labels.Selector, field fields.Selector) generic.Matcher { return thirdpartyresourcedata.Matcher(label, field) }, QualifiedResource: extensions.Resource("thirdpartyresourcedatas"), DeleteCollectionWorkers: opts.DeleteCollectionWorkers, CreateStrategy: thirdpartyresourcedata.Strategy, UpdateStrategy: thirdpartyresourcedata.Strategy, DeleteStrategy: thirdpartyresourcedata.Strategy, Storage: storageInterface, } return &REST{ Store: store, kind: kind, } }
// NewREST returns a RESTStorage object that will work against secrets. func NewREST(opts generic.RESTOptions) *REST { prefix := "/secrets" newListFunc := func() runtime.Object { return &api.SecretList{} } storageInterface := opts.Decorator( opts.Storage, cachesize.GetWatchCacheSizeByResource(cachesize.Secrets), &api.Secret{}, prefix, secret.Strategy, newListFunc) store := ®istry.Store{ NewFunc: func() runtime.Object { return &api.Secret{} }, NewListFunc: newListFunc, KeyRootFunc: func(ctx api.Context) string { return registry.NamespaceKeyRootFunc(ctx, prefix) }, KeyFunc: func(ctx api.Context, id string) (string, error) { return registry.NamespaceKeyFunc(ctx, prefix, id) }, ObjectNameFunc: func(obj runtime.Object) (string, error) { return obj.(*api.Secret).Name, nil }, PredicateFunc: func(label labels.Selector, field fields.Selector) generic.Matcher { return secret.Matcher(label, field) }, QualifiedResource: api.Resource("secrets"), DeleteCollectionWorkers: opts.DeleteCollectionWorkers, CreateStrategy: secret.Strategy, UpdateStrategy: secret.Strategy, DeleteStrategy: secret.Strategy, Storage: storageInterface, } return &REST{store} }
// NewREST returns a RESTStorage object that will work against Jobs. func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) { prefix := "/jobs" newListFunc := func() runtime.Object { return &batch.JobList{} } storageInterface := opts.Decorator( opts.Storage, cachesize.GetWatchCacheSizeByResource(cachesize.Jobs), &batch.Job{}, prefix, job.Strategy, newListFunc) store := ®istry.Store{ NewFunc: func() runtime.Object { return &batch.Job{} }, // NewListFunc returns an object capable of storing results of an etcd list. NewListFunc: newListFunc, // Produces a path that etcd understands, to the root of the resource // by combining the namespace in the context with the given prefix KeyRootFunc: func(ctx api.Context) string { return registry.NamespaceKeyRootFunc(ctx, prefix) }, // Produces a path that etcd understands, to the resource by combining // the namespace in the context with the given prefix KeyFunc: func(ctx api.Context, name string) (string, error) { return registry.NamespaceKeyFunc(ctx, prefix, name) }, // Retrieve the name field of a job ObjectNameFunc: func(obj runtime.Object) (string, error) { return obj.(*batch.Job).Name, nil }, // Used to match objects based on labels/fields for list and watch PredicateFunc: func(label labels.Selector, field fields.Selector) generic.Matcher { return job.MatchJob(label, field) }, QualifiedResource: batch.Resource("jobs"), DeleteCollectionWorkers: opts.DeleteCollectionWorkers, // Used to validate job creation CreateStrategy: job.Strategy, // Used to validate job updates UpdateStrategy: job.Strategy, DeleteStrategy: job.Strategy, Storage: storageInterface, } statusStore := *store statusStore.UpdateStrategy = job.StatusStrategy return &REST{store}, &StatusREST{store: &statusStore} }
// NewREST returns a RESTStorage object that will work with ConfigMap objects. func NewREST(opts generic.RESTOptions) *REST { prefix := "/configmaps" newListFunc := func() runtime.Object { return &api.ConfigMapList{} } storageInterface := opts.Decorator( opts.Storage, 100, &api.ConfigMap{}, prefix, configmap.Strategy, newListFunc) store := ®istry.Store{ NewFunc: func() runtime.Object { return &api.ConfigMap{} }, // NewListFunc returns an object to store results of an etcd list. NewListFunc: newListFunc, // Produces a path that etcd understands, to the root of the resource // by combining the namespace in the context with the given prefix. KeyRootFunc: func(ctx api.Context) string { return registry.NamespaceKeyRootFunc(ctx, prefix) }, // Produces a path that etcd understands, to the resource by combining // the namespace in the context with the given prefix KeyFunc: func(ctx api.Context, name string) (string, error) { return registry.NamespaceKeyFunc(ctx, prefix, name) }, // Retrieves the name field of a ConfigMap object. ObjectNameFunc: func(obj runtime.Object) (string, error) { return obj.(*api.ConfigMap).Name, nil }, // Matches objects based on labels/fields for list and watch PredicateFunc: configmap.MatchConfigMap, QualifiedResource: api.Resource("configmaps"), DeleteCollectionWorkers: opts.DeleteCollectionWorkers, CreateStrategy: configmap.Strategy, UpdateStrategy: configmap.Strategy, DeleteStrategy: configmap.Strategy, Storage: storageInterface, } return &REST{store} }
// NewREST returns a RESTStorage object that will work against network policies. func NewREST(opts generic.RESTOptions) *REST { prefix := "/networkpolicies" newListFunc := func() runtime.Object { return &extensionsapi.NetworkPolicyList{} } storageInterface := opts.Decorator( opts.Storage, cachesize.GetWatchCacheSizeByResource(cachesize.NetworkPolicys), &extensionsapi.NetworkPolicy{}, prefix, networkpolicy.Strategy, newListFunc) store := ®istry.Store{ NewFunc: func() runtime.Object { return &extensionsapi.NetworkPolicy{} }, // NewListFunc returns an object capable of storing results of an etcd list. NewListFunc: newListFunc, // Produces a NetworkPolicy that etcd understands, to the root of the resource // by combining the namespace in the context with the given prefix KeyRootFunc: func(ctx api.Context) string { return registry.NamespaceKeyRootFunc(ctx, prefix) }, // Produces a NetworkPolicy that etcd understands, to the resource by combining // the namespace in the context with the given prefix KeyFunc: func(ctx api.Context, name string) (string, error) { return registry.NamespaceKeyFunc(ctx, prefix, name) }, // Retrieve the name field of a network policy ObjectNameFunc: func(obj runtime.Object) (string, error) { return obj.(*extensionsapi.NetworkPolicy).Name, nil }, // Used to match objects based on labels/fields for list and watch PredicateFunc: func(label labels.Selector, field fields.Selector) generic.Matcher { return networkpolicy.MatchNetworkPolicy(label, field) }, QualifiedResource: extensionsapi.Resource("networkpolicies"), DeleteCollectionWorkers: opts.DeleteCollectionWorkers, // Used to validate controller creation CreateStrategy: networkpolicy.Strategy, // Used to validate controller updates UpdateStrategy: networkpolicy.Strategy, DeleteStrategy: networkpolicy.Strategy, Storage: storageInterface, } return &REST{store} }
// NewREST returns a RESTStorage object that will work against services. func NewREST(opts generic.RESTOptions) (*REST, *StatusREST) { prefix := "/services/specs" newListFunc := func() runtime.Object { return &api.ServiceList{} } storageInterface := opts.Decorator( opts.Storage, cachesize.GetWatchCacheSizeByResource(cachesize.Services), &api.Service{}, prefix, service.Strategy, newListFunc) store := ®istry.Store{ NewFunc: func() runtime.Object { return &api.Service{} }, NewListFunc: newListFunc, KeyRootFunc: func(ctx api.Context) string { return registry.NamespaceKeyRootFunc(ctx, prefix) }, KeyFunc: func(ctx api.Context, name string) (string, error) { return registry.NamespaceKeyFunc(ctx, prefix, name) }, ObjectNameFunc: func(obj runtime.Object) (string, error) { return obj.(*api.Service).Name, nil }, PredicateFunc: func(label labels.Selector, field fields.Selector) generic.Matcher { return service.MatchServices(label, field) }, QualifiedResource: api.Resource("services"), DeleteCollectionWorkers: opts.DeleteCollectionWorkers, CreateStrategy: service.Strategy, UpdateStrategy: service.Strategy, DeleteStrategy: service.Strategy, ExportStrategy: service.Strategy, Storage: storageInterface, } statusStore := *store statusStore.UpdateStrategy = service.StatusStrategy return &REST{store}, &StatusREST{store: &statusStore} }
// NewREST returns a RESTStorage object that will work against events. func NewREST(opts generic.RESTOptions, ttl uint64) *REST { prefix := "/events" // We explicitly do NOT do any decoration here - switching on Cacher // for events will lead to too high memory consumption. storageInterface := opts.Storage store := ®istry.Store{ NewFunc: func() runtime.Object { return &api.Event{} }, NewListFunc: func() runtime.Object { return &api.EventList{} }, KeyRootFunc: func(ctx api.Context) string { return registry.NamespaceKeyRootFunc(ctx, prefix) }, KeyFunc: func(ctx api.Context, id string) (string, error) { return registry.NamespaceKeyFunc(ctx, prefix, id) }, ObjectNameFunc: func(obj runtime.Object) (string, error) { return obj.(*api.Event).Name, nil }, PredicateFunc: func(label labels.Selector, field fields.Selector) generic.Matcher { return event.MatchEvent(label, field) }, TTLFunc: func(runtime.Object, uint64, bool) (uint64, error) { return ttl, nil }, QualifiedResource: api.Resource("events"), DeleteCollectionWorkers: opts.DeleteCollectionWorkers, CreateStrategy: event.Strategy, UpdateStrategy: event.Strategy, DeleteStrategy: event.Strategy, Storage: storageInterface, } return &REST{store} }