package etcd import ( kapi "k8s.io/kubernetes/pkg/api" kapirest "k8s.io/kubernetes/pkg/api/rest" "k8s.io/kubernetes/pkg/fields" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/registry/generic" "k8s.io/kubernetes/pkg/registry/generic/registry" "k8s.io/kubernetes/pkg/runtime" "github.com/openshift/origin/pkg/route" "github.com/openshift/origin/pkg/route/api" rest "github.com/openshift/origin/pkg/route/registry/route" "github.com/openshift/origin/pkg/util/restoptions" ) type REST struct { *registry.Store } // NewREST returns a RESTStorage object that will work against routes. func NewREST(optsGetter restoptions.Getter, allocator route.RouteAllocator) (*REST, *StatusREST, error) { strategy := rest.NewStrategy(allocator) prefix := "/routes" store := ®istry.Store{ NewFunc: func() runtime.Object { return &api.Route{} }, NewListFunc: func() runtime.Object { return &api.RouteList{} }, KeyRootFunc: func(ctx kapi.Context) string { return registry.NamespaceKeyRootFunc(ctx, prefix) }, KeyFunc: func(ctx kapi.Context, id string) (string, error) { return registry.NamespaceKeyFunc(ctx, prefix, id) }, ObjectNameFunc: func(obj runtime.Object) (string, error) { return obj.(*api.Route).Name, nil }, PredicateFunc: func(label labels.Selector, field fields.Selector) generic.Matcher { return rest.Matcher(label, field) }, QualifiedResource: api.Resource("routes"), CreateStrategy: strategy, UpdateStrategy: strategy, } if err := restoptions.ApplyOptions(optsGetter, store, prefix); err != nil { return nil, nil, err } statusStore := *store statusStore.UpdateStrategy = rest.StatusStrategy return &REST{store}, &StatusREST{&statusStore}, nil } // StatusREST implements the REST endpoint for changing the status of a route. type StatusREST struct { store *registry.Store } // New creates a new route resource func (r *StatusREST) New() runtime.Object { return &api.Route{} } // Update alters the status subset of an object. func (r *StatusREST) Update(ctx kapi.Context, name string, objInfo kapirest.UpdatedObjectInfo) (runtime.Object, bool, error) { return r.store.Update(ctx, name, objInfo) }