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  }