github.com/AliyunContainerService/cli@v0.0.0-20181009023821-814ced4b30d0/kubernetes/client/informers/generic.go (about) 1 package informers 2 3 import ( 4 "fmt" 5 6 "github.com/docker/cli/kubernetes/compose/v1beta2" 7 "k8s.io/apimachinery/pkg/runtime/schema" 8 "k8s.io/client-go/tools/cache" 9 ) 10 11 // GenericInformer is type of SharedIndexInformer which will locate and delegate to other 12 // sharedInformers based on type 13 type GenericInformer interface { 14 Informer() cache.SharedIndexInformer 15 Lister() cache.GenericLister 16 } 17 18 type genericInformer struct { 19 informer cache.SharedIndexInformer 20 resource schema.GroupResource 21 } 22 23 // Informer returns the SharedIndexInformer. 24 func (f *genericInformer) Informer() cache.SharedIndexInformer { 25 return f.informer 26 } 27 28 // Lister returns the GenericLister. 29 func (f *genericInformer) Lister() cache.GenericLister { 30 return cache.NewGenericLister(f.Informer().GetIndexer(), f.resource) 31 } 32 33 // ForResource gives generic access to a shared informer of the matching type 34 // TODO extend this to unknown resources with a client pool 35 func (f *sharedInformerFactory) ForResource(resource schema.GroupVersionResource) (GenericInformer, error) { 36 switch resource { 37 // Group=Compose, Version=V1beta1 38 case v1beta2.SchemeGroupVersion.WithResource("stacks"): 39 return &genericInformer{resource: resource.GroupResource(), informer: f.Compose().V1beta2().Stacks().Informer()}, nil 40 41 } 42 43 return nil, fmt.Errorf("no informer found for %v", resource) 44 }