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

     1  package manager
     2  
     3  import (
     4  	"sync"
     5  
     6  	"k8s.io/apimachinery/pkg/fields"
     7  	"k8s.io/apimachinery/pkg/watch"
     8  	"k8s.io/client-go/rest"
     9  	"k8s.io/client-go/tools/cache"
    10  
    11  	"github.com/kubeedge/kubeedge/cloud/pkg/apis/devices/v1alpha1"
    12  	"github.com/kubeedge/kubeedge/cloud/pkg/devicecontroller/config"
    13  )
    14  
    15  // DeviceModelManager is a manager watch DeviceModel change event
    16  type DeviceModelManager struct {
    17  	// events from watch kubernetes api server
    18  	events chan watch.Event
    19  
    20  	// DeviceModel, key is DeviceModel.Name, value is *v1alpha1.DeviceModel{}
    21  	DeviceModel sync.Map
    22  }
    23  
    24  // Events return a channel, can receive all DeviceModel event
    25  func (dmm *DeviceModelManager) Events() chan watch.Event {
    26  	return dmm.events
    27  }
    28  
    29  // NewDeviceModelManager create DeviceModelManager from config
    30  func NewDeviceModelManager(crdClient *rest.RESTClient, namespace string) (*DeviceModelManager, error) {
    31  	lw := cache.NewListWatchFromClient(crdClient, "devicemodels", namespace, fields.Everything())
    32  	events := make(chan watch.Event, config.Config.Buffer.DeviceModelEvent)
    33  	rh := NewCommonResourceEventHandler(events)
    34  	si := cache.NewSharedInformer(lw, &v1alpha1.DeviceModel{}, 0)
    35  	si.AddEventHandler(rh)
    36  
    37  	pm := &DeviceModelManager{events: events}
    38  
    39  	stopNever := make(chan struct{})
    40  	go si.Run(stopNever)
    41  
    42  	return pm, nil
    43  }