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 }