From b4638519a9d82e2f92421f43dd2f881529c64864 Mon Sep 17 00:00:00 2001 From: mengyang02 Date: Sat, 7 Sep 2019 10:47:11 +0800 Subject: [PATCH] init check for cloud node controller --- cmd/cloud-controller-manager/app/core.go | 9 +++++++-- pkg/controller/cloud/node_controller.go | 15 ++++++++------- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/cmd/cloud-controller-manager/app/core.go b/cmd/cloud-controller-manager/app/core.go index a0295caec1e..3f9e9bba92a 100644 --- a/cmd/cloud-controller-manager/app/core.go +++ b/cmd/cloud-controller-manager/app/core.go @@ -40,12 +40,17 @@ import ( func startCloudNodeController(ctx *cloudcontrollerconfig.CompletedConfig, cloud cloudprovider.Interface, stopCh <-chan struct{}) (http.Handler, bool, error) { // Start the CloudNodeController - nodeController := cloudcontrollers.NewCloudNodeController( + nodeController, err := cloudcontrollers.NewCloudNodeController( ctx.SharedInformers.Core().V1().Nodes(), // cloud node controller uses existing cluster role from node-controller ctx.ClientBuilder.ClientOrDie("node-controller"), cloud, - ctx.ComponentConfig.NodeStatusUpdateFrequency.Duration) + ctx.ComponentConfig.NodeStatusUpdateFrequency.Duration, + ) + if err != nil { + klog.Warningf("failed to start cloud node controller: %s", err) + return nil, false, nil + } go nodeController.Run(stopCh) diff --git a/pkg/controller/cloud/node_controller.go b/pkg/controller/cloud/node_controller.go index 45ad7f0863d..8e7111cfafb 100644 --- a/pkg/controller/cloud/node_controller.go +++ b/pkg/controller/cloud/node_controller.go @@ -62,16 +62,17 @@ func NewCloudNodeController( nodeInformer coreinformers.NodeInformer, kubeClient clientset.Interface, cloud cloudprovider.Interface, - nodeStatusUpdateFrequency time.Duration) *CloudNodeController { + nodeStatusUpdateFrequency time.Duration) (*CloudNodeController, error) { eventBroadcaster := record.NewBroadcaster() recorder := eventBroadcaster.NewRecorder(scheme.Scheme, v1.EventSource{Component: "cloud-node-controller"}) eventBroadcaster.StartLogging(klog.Infof) - if kubeClient != nil { - klog.V(0).Infof("Sending events to api server.") - eventBroadcaster.StartRecordingToSink(&v1core.EventSinkImpl{Interface: kubeClient.CoreV1().Events("")}) - } else { - klog.V(0).Infof("No api server defined - no events will be sent to API server.") + + klog.Infof("Sending events to api server.") + eventBroadcaster.StartRecordingToSink(&v1core.EventSinkImpl{Interface: kubeClient.CoreV1().Events("")}) + + if _, ok := cloud.Instances(); !ok { + return nil, errors.New("cloud provider does not support instances") } cnc := &CloudNodeController{ @@ -89,7 +90,7 @@ func NewCloudNodeController( UpdateFunc: cnc.UpdateCloudNode, }) - return cnc + return cnc, nil } // This controller updates newly registered nodes with information