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

     1  package manager
     2  
     3  import (
     4  	"k8s.io/api/core/v1"
     5  	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
     6  	"k8s.io/apimachinery/pkg/labels"
     7  	"k8s.io/apimachinery/pkg/watch"
     8  	"k8s.io/client-go/kubernetes"
     9  	"k8s.io/client-go/tools/cache"
    10  )
    11  
    12  const (
    13  	NodeRoleKey   = "node-role.kubernetes.io/edge"
    14  	NodeRoleValue = ""
    15  )
    16  
    17  // NodesManager manage all events of nodes by SharedInformer
    18  type NodesManager struct {
    19  	events chan watch.Event
    20  }
    21  
    22  // Events return the channel save events from watch nodes change
    23  func (nm *NodesManager) Events() chan watch.Event {
    24  	return nm.events
    25  }
    26  
    27  // NewNodesManager create NodesManager by kube clientset and namespace
    28  func NewNodesManager(kubeClient *kubernetes.Clientset, namespace string) (*NodesManager, error) {
    29  	set := labels.Set{NodeRoleKey: NodeRoleValue}
    30  	selector := labels.SelectorFromSet(set)
    31  	optionModifier := func(options *metav1.ListOptions) {
    32  		options.LabelSelector = selector.String()
    33  	}
    34  	lw := cache.NewFilteredListWatchFromClient(kubeClient.CoreV1().RESTClient(), "nodes", namespace, optionModifier)
    35  	events := make(chan watch.Event)
    36  	rh := NewCommonResourceEventHandler(events)
    37  	si := cache.NewSharedInformer(lw, &v1.Node{}, 0)
    38  	si.AddEventHandler(rh)
    39  	stopNever := make(chan struct{})
    40  	go si.Run(stopNever)
    41  
    42  	return &NodesManager{events: events}, nil
    43  }