github.com/jingruilea/kubeedge@v1.2.0-beta.0.0.20200410162146-4bb8902b3879/cloud/pkg/devicecontroller/manager/device.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 // DeviceManager is a manager watch device change event 16 type DeviceManager struct { 17 // events from watch kubernetes api server 18 events chan watch.Event 19 20 // Device, key is device.Name, value is *v1alpha1.Device{} 21 Device sync.Map 22 } 23 24 // Events return a channel, can receive all device event 25 func (dmm *DeviceManager) Events() chan watch.Event { 26 return dmm.events 27 } 28 29 // NewDeviceManager create DeviceManager from config 30 func NewDeviceManager(crdClient *rest.RESTClient, namespace string) (*DeviceManager, error) { 31 lw := cache.NewListWatchFromClient(crdClient, "devices", namespace, fields.Everything()) 32 events := make(chan watch.Event, config.Config.Buffer.DeviceEvent) 33 rh := NewCommonResourceEventHandler(events) 34 si := cache.NewSharedInformer(lw, &v1alpha1.Device{}, 0) 35 si.AddEventHandler(rh) 36 37 pm := &DeviceManager{events: events} 38 39 stopNever := make(chan struct{}) 40 go si.Run(stopNever) 41 42 return pm, nil 43 }