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

     1  package devicecontroller
     2  
     3  import (
     4  	"os"
     5  	"time"
     6  
     7  	"k8s.io/klog"
     8  
     9  	"github.com/kubeedge/beehive/pkg/core"
    10  	"github.com/kubeedge/kubeedge/cloud/pkg/devicecontroller/config"
    11  	"github.com/kubeedge/kubeedge/cloud/pkg/devicecontroller/constants"
    12  	"github.com/kubeedge/kubeedge/cloud/pkg/devicecontroller/controller"
    13  	"github.com/kubeedge/kubeedge/pkg/apis/componentconfig/cloudcore/v1alpha1"
    14  )
    15  
    16  // DeviceController use beehive context message layer
    17  type DeviceController struct {
    18  	enable bool
    19  }
    20  
    21  func newDeviceController(enable bool) *DeviceController {
    22  	return &DeviceController{
    23  		enable: enable,
    24  	}
    25  }
    26  
    27  func Register(dc *v1alpha1.DeviceController, kubeAPIConfig *v1alpha1.KubeAPIConfig) {
    28  	config.InitConfigure(dc, kubeAPIConfig)
    29  	core.Register(newDeviceController(dc.Enable))
    30  }
    31  
    32  // Name of controller
    33  func (dc *DeviceController) Name() string {
    34  	return constants.DeviceControllerModuleName
    35  }
    36  
    37  // Group of controller
    38  func (dc *DeviceController) Group() string {
    39  	return constants.DeviceControllerModuleGroup
    40  }
    41  
    42  // Enable indicates whether enable this module
    43  func (dc *DeviceController) Enable() bool {
    44  	return dc.enable
    45  }
    46  
    47  // Start controller
    48  func (dc *DeviceController) Start() {
    49  	downstream, err := controller.NewDownstreamController()
    50  	if err != nil {
    51  		klog.Errorf("New downstream controller failed with error: %s", err)
    52  		os.Exit(1)
    53  	}
    54  	upstream, err := controller.NewUpstreamController(downstream)
    55  	if err != nil {
    56  		klog.Errorf("new upstream controller failed with error: %s", err)
    57  		os.Exit(1)
    58  	}
    59  
    60  	downstream.Start()
    61  	// wait for downstream controller to start and load deviceModels and devices
    62  	// TODO think about sync
    63  	time.Sleep(1 * time.Second)
    64  	upstream.Start()
    65  }