package cache import ( kapi "k8s.io/kubernetes/pkg/api" kapierrors "k8s.io/kubernetes/pkg/api/errors" "k8s.io/kubernetes/pkg/client/cache" "k8s.io/kubernetes/pkg/controller/framework" oapi "github.com/openshift/origin/pkg/api" authorizationapi "github.com/openshift/origin/pkg/authorization/api" policybindingregistry "github.com/openshift/origin/pkg/authorization/registry/policybinding" "github.com/openshift/origin/pkg/client" ) type InformerToPolicyBindingNamespacer struct { framework.SharedIndexInformer } // LastSyncResourceVersion exposes the LastSyncResourceVersion of the internal reflector func (i *InformerToPolicyBindingNamespacer) LastSyncResourceVersion() string { return i.SharedIndexInformer.LastSyncResourceVersion() } func (i *InformerToPolicyBindingNamespacer) PolicyBindings(namespace string) client.PolicyBindingLister { return &indexerToPolicyBindingLister{Indexer: i.GetIndexer(), namespace: namespace} } type indexerToPolicyBindingLister struct { cache.Indexer namespace string } func (i *indexerToPolicyBindingLister) List(options kapi.ListOptions) (*authorizationapi.PolicyBindingList, error) { policyBindingList := &authorizationapi.PolicyBindingList{} matcher := policybindingregistry.Matcher(oapi.ListOptionsToSelectors(&options)) if i.namespace == kapi.NamespaceAll { returnedList := i.Indexer.List() for i := range returnedList { policyBinding := returnedList[i].(*authorizationapi.PolicyBinding) if matches, err := matcher.Matches(policyBinding); err == nil && matches { policyBindingList.Items = append(policyBindingList.Items, *policyBinding) } } return policyBindingList, nil } key := &authorizationapi.PolicyBinding{ObjectMeta: kapi.ObjectMeta{Namespace: i.namespace}} items, err := i.Indexer.Index(cache.NamespaceIndex, key) if err != nil { return policyBindingList, err } for i := range items { policyBinding := items[i].(*authorizationapi.PolicyBinding) if matches, err := matcher.Matches(policyBinding); err == nil && matches { policyBindingList.Items = append(policyBindingList.Items, *policyBinding) } } return policyBindingList, nil } func (i *indexerToPolicyBindingLister) Get(name string) (*authorizationapi.PolicyBinding, error) { keyObj := &authorizationapi.PolicyBinding{ObjectMeta: kapi.ObjectMeta{Namespace: i.namespace, Name: name}} key, _ := framework.DeletionHandlingMetaNamespaceKeyFunc(keyObj) item, exists, getErr := i.Indexer.GetByKey(key) if getErr != nil { return nil, getErr } if !exists { existsErr := kapierrors.NewNotFound(authorizationapi.Resource("policyBinding"), name) return nil, existsErr } return item.(*authorizationapi.PolicyBinding), nil }