github.com/jingruilea/kubeedge@v1.2.0-beta.0.0.20200410162146-4bb8902b3879/cloud/pkg/edgecontroller/manager/endpoint.go (about)

     1  package manager
     2  
     3  import (
     4  	"k8s.io/api/core/v1"
     5  	"k8s.io/apimachinery/pkg/fields"
     6  	"k8s.io/apimachinery/pkg/watch"
     7  	"k8s.io/client-go/kubernetes"
     8  	"k8s.io/client-go/tools/cache"
     9  
    10  	"github.com/kubeedge/kubeedge/cloud/pkg/edgecontroller/config"
    11  )
    12  
    13  // EndpointsManager manage all events of endpoints by SharedInformer
    14  type EndpointsManager struct {
    15  	events chan watch.Event
    16  }
    17  
    18  // Events return the channel save events from watch endpoints change
    19  func (sm *EndpointsManager) Events() chan watch.Event {
    20  	return sm.events
    21  }
    22  
    23  // NewEndpointsManager create EndpointsManager by kube clientset and namespace
    24  func NewEndpointsManager(kubeClient *kubernetes.Clientset, namespace string) (*EndpointsManager, error) {
    25  	lw := cache.NewListWatchFromClient(kubeClient.CoreV1().RESTClient(), "endpoints", namespace, fields.Everything())
    26  	events := make(chan watch.Event, config.Config.Buffer.EndpointsEvent)
    27  	rh := NewCommonResourceEventHandler(events)
    28  	si := cache.NewSharedInformer(lw, &v1.Endpoints{}, 0)
    29  	si.AddEventHandler(rh)
    30  	stopNever := make(chan struct{})
    31  	go si.Run(stopNever)
    32  
    33  	return &EndpointsManager{events: events}, nil
    34  }