kubeedge/cloud/pkg/devicecontroller/devicecontroller.go
WillardHu abc4d847c6 Enhance the error handling of beehive modules
Signed-off-by: WillardHu <wei.hu@daocloud.io>
2025-10-24 19:08:17 +08:00

79 lines
2.1 KiB
Go

package devicecontroller
import (
"time"
"k8s.io/klog/v2"
"github.com/kubeedge/api/apis/componentconfig/cloudcore/v1alpha1"
"github.com/kubeedge/beehive/pkg/core"
"github.com/kubeedge/kubeedge/cloud/pkg/common/informers"
"github.com/kubeedge/kubeedge/cloud/pkg/common/modules"
"github.com/kubeedge/kubeedge/cloud/pkg/devicecontroller/config"
"github.com/kubeedge/kubeedge/cloud/pkg/devicecontroller/controller"
)
// DeviceController use beehive context message layer
type DeviceController struct {
downstream *controller.DownstreamController
upstream *controller.UpstreamController
enable bool
}
var _ core.Module = (*DeviceController)(nil)
func newDeviceController(enable bool) *DeviceController {
if !enable {
return &DeviceController{enable: enable}
}
downstream, err := controller.NewDownstreamController(informers.GetInformersManager().GetKubeEdgeInformerFactory())
if err != nil {
klog.Exitf("New downstream controller failed with error: %s", err)
}
upstream, err := controller.NewUpstreamController(downstream)
if err != nil {
klog.Exitf("New upstream controller failed with error: %s", err)
}
return &DeviceController{
downstream: downstream,
upstream: upstream,
enable: enable,
}
}
func Register(dc *v1alpha1.DeviceController) {
config.InitConfigure(dc)
core.Register(newDeviceController(dc.Enable))
}
// Name of controller
func (dc *DeviceController) Name() string {
return modules.DeviceControllerModuleName
}
// Group of controller
func (dc *DeviceController) Group() string {
return modules.DeviceControllerModuleGroup
}
// Enable indicates whether enable this module
func (dc *DeviceController) Enable() bool {
return dc.enable
}
func (dc *DeviceController) RestartPolicy() *core.ModuleRestartPolicy {
return nil
}
// Start controller
func (dc *DeviceController) Start() {
if err := dc.downstream.Start(); err != nil {
klog.Exitf("Start downstream failed with error: %s", err)
}
// wait for downstream controller to start and load deviceModels and devices
// TODO think about sync
time.Sleep(1 * time.Second)
if err := dc.upstream.Start(); err != nil {
klog.Exitf("Start upstream failed with error: %s", err)
}
}