package shared import ( "reflect" kapi "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/client/cache" "k8s.io/kubernetes/pkg/controller/framework" "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/watch" authorizationapi "github.com/openshift/origin/pkg/authorization/api" "github.com/openshift/origin/pkg/client" ocache "github.com/openshift/origin/pkg/client/cache" ) type ClusterPolicyInformer interface { Informer() framework.SharedIndexInformer // still use an indexer, no telling what someone will want to index on someday Indexer() cache.Indexer Lister() client.SyncedClusterPoliciesListerInterface } type clusterPolicyInformer struct { *sharedInformerFactory } func (f *clusterPolicyInformer) Informer() framework.SharedIndexInformer { f.lock.Lock() defer f.lock.Unlock() informerObj := &authorizationapi.ClusterPolicy{} informerType := reflect.TypeOf(informerObj) informer, exists := f.coreInformers[informerType] if exists { return informer } lw := f.customListerWatchers.GetListerWatcher(kapi.Resource("clusterpolicies")) if lw == nil { lw = &cache.ListWatch{ ListFunc: func(options kapi.ListOptions) (runtime.Object, error) { return f.originClient.ClusterPolicies().List(options) }, WatchFunc: func(options kapi.ListOptions) (watch.Interface, error) { return f.originClient.ClusterPolicies().Watch(options) }, } } informer = framework.NewSharedIndexInformer( lw, informerObj, f.defaultResync, cache.Indexers{}, ) f.coreInformers[informerType] = informer return informer } func (f *clusterPolicyInformer) Indexer() cache.Indexer { informer := f.Informer() return informer.GetIndexer() } func (f *clusterPolicyInformer) Lister() client.SyncedClusterPoliciesListerInterface { return &ocache.InformerToClusterPolicyLister{SharedIndexInformer: f.Informer()} } type ClusterPolicyBindingInformer interface { Informer() framework.SharedIndexInformer // still use an indexer, no telling what someone will want to index on someday Indexer() cache.Indexer Lister() client.SyncedClusterPolicyBindingsListerInterface } type clusterPolicyBindingInformer struct { *sharedInformerFactory } func (f *clusterPolicyBindingInformer) Informer() framework.SharedIndexInformer { f.lock.Lock() defer f.lock.Unlock() informerObj := &authorizationapi.ClusterPolicyBinding{} informerType := reflect.TypeOf(informerObj) informer, exists := f.coreInformers[informerType] if exists { return informer } lw := f.customListerWatchers.GetListerWatcher(kapi.Resource("clusterpolicybindings")) if lw == nil { lw = &cache.ListWatch{ ListFunc: func(options kapi.ListOptions) (runtime.Object, error) { return f.originClient.ClusterPolicyBindings().List(options) }, WatchFunc: func(options kapi.ListOptions) (watch.Interface, error) { return f.originClient.ClusterPolicyBindings().Watch(options) }, } } informer = framework.NewSharedIndexInformer( lw, informerObj, f.defaultResync, cache.Indexers{}, ) f.coreInformers[informerType] = informer return informer } func (f *clusterPolicyBindingInformer) Indexer() cache.Indexer { informer := f.Informer() return informer.GetIndexer() } func (f *clusterPolicyBindingInformer) Lister() client.SyncedClusterPolicyBindingsListerInterface { return &ocache.InformerToClusterPolicyBindingLister{SharedIndexInformer: f.Informer()} } type PolicyInformer interface { Informer() framework.SharedIndexInformer // still use an indexer, no telling what someone will want to index on someday Indexer() cache.Indexer Lister() client.SyncedPoliciesListerNamespacer } type policyInformer struct { *sharedInformerFactory } func (f *policyInformer) Informer() framework.SharedIndexInformer { f.lock.Lock() defer f.lock.Unlock() informerObj := &authorizationapi.Policy{} informerType := reflect.TypeOf(informerObj) informer, exists := f.coreInformers[informerType] if exists { return informer } lw := f.customListerWatchers.GetListerWatcher(kapi.Resource("policies")) if lw == nil { lw = &cache.ListWatch{ ListFunc: func(options kapi.ListOptions) (runtime.Object, error) { return f.originClient.Policies(kapi.NamespaceAll).List(options) }, WatchFunc: func(options kapi.ListOptions) (watch.Interface, error) { return f.originClient.Policies(kapi.NamespaceAll).Watch(options) }, } } informer = framework.NewSharedIndexInformer( lw, informerObj, f.defaultResync, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, ) f.coreInformers[informerType] = informer return informer } func (f *policyInformer) Indexer() cache.Indexer { informer := f.Informer() return informer.GetIndexer() } func (f *policyInformer) Lister() client.SyncedPoliciesListerNamespacer { return &ocache.InformerToPolicyNamespacer{SharedIndexInformer: f.Informer()} } type PolicyBindingInformer interface { Informer() framework.SharedIndexInformer // still use an indexer, no telling what someone will want to index on someday Indexer() cache.Indexer Lister() client.SyncedPolicyBindingsListerNamespacer } type policyBindingInformer struct { *sharedInformerFactory } func (f *policyBindingInformer) Informer() framework.SharedIndexInformer { f.lock.Lock() defer f.lock.Unlock() informerObj := &authorizationapi.PolicyBinding{} informerType := reflect.TypeOf(informerObj) informer, exists := f.coreInformers[informerType] if exists { return informer } lw := f.customListerWatchers.GetListerWatcher(kapi.Resource("policybindings")) if lw == nil { lw = &cache.ListWatch{ ListFunc: func(options kapi.ListOptions) (runtime.Object, error) { return f.originClient.PolicyBindings(kapi.NamespaceAll).List(options) }, WatchFunc: func(options kapi.ListOptions) (watch.Interface, error) { return f.originClient.PolicyBindings(kapi.NamespaceAll).Watch(options) }, } } informer = framework.NewSharedIndexInformer( lw, informerObj, f.defaultResync, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, ) f.coreInformers[informerType] = informer return informer } func (f *policyBindingInformer) Indexer() cache.Indexer { informer := f.Informer() return informer.GetIndexer() } func (f *policyBindingInformer) Lister() client.SyncedPolicyBindingsListerNamespacer { return &ocache.InformerToPolicyBindingNamespacer{SharedIndexInformer: f.Informer()} }