package etcd import ( kapi "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/fields" "k8s.io/kubernetes/pkg/labels" etcdgeneric "k8s.io/kubernetes/pkg/registry/generic/etcd" "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/storage" "k8s.io/kubernetes/pkg/watch" "github.com/openshift/origin/pkg/template/api" "github.com/openshift/origin/pkg/template/registry" ) const prefix = "/templates" // REST implements a RESTStorage for templates against etcd type REST struct { *etcdgeneric.Etcd } // NewREST returns a RESTStorage object that will work against templates. func NewREST(s storage.Interface) *REST { store := &etcdgeneric.Etcd{ NewFunc: func() runtime.Object { return &api.Template{} }, NewListFunc: func() runtime.Object { return &api.TemplateList{} }, KeyRootFunc: func(ctx kapi.Context) string { return etcdgeneric.NamespaceKeyRootFunc(ctx, prefix) }, KeyFunc: func(ctx kapi.Context, name string) (string, error) { return etcdgeneric.NamespaceKeyFunc(ctx, prefix, name) }, ObjectNameFunc: func(obj runtime.Object) (string, error) { return obj.(*api.Template).Name, nil }, EndpointName: "templates", CreateStrategy: registry.Strategy, UpdateStrategy: registry.Strategy, ReturnDeletedObject: true, Storage: s, } return &REST{store} } // New returns a new object func (r *REST) New() runtime.Object { return r.NewFunc() } // NewList returns a new list object func (r *REST) NewList() runtime.Object { return r.NewListFunc() } // List obtains a list of templates with labels that match selector. func (r *REST) List(ctx kapi.Context, label labels.Selector, field fields.Selector) (runtime.Object, error) { return r.Etcd.ListPredicate(ctx, registry.MatchTemplate(label, field)) } // Watch begins watching for new, changed, or deleted templates. func (r *REST) Watch(ctx kapi.Context, label labels.Selector, field fields.Selector, resourceVersion string) (watch.Interface, error) { return r.WatchPredicate(ctx, registry.MatchTemplate(label, field), resourceVersion) }