diff --git a/cmd/cloud-controller-manager/nodeipamcontroller.go b/cmd/cloud-controller-manager/nodeipamcontroller.go index c90a632c6f8..f91f97eaf55 100644 --- a/cmd/cloud-controller-manager/nodeipamcontroller.go +++ b/cmd/cloud-controller-manager/nodeipamcontroller.go @@ -23,7 +23,6 @@ import ( "errors" "fmt" "net" - "net/http" "strings" utilfeature "k8s.io/apiserver/pkg/util/feature" @@ -31,6 +30,7 @@ import ( "k8s.io/cloud-provider/app" cloudcontrollerconfig "k8s.io/cloud-provider/app/config" genericcontrollermanager "k8s.io/controller-manager/app" + "k8s.io/controller-manager/controller" "k8s.io/controller-manager/pkg/features" "k8s.io/klog/v2" nodeipamcontrolleroptions "k8s.io/kubernetes/cmd/kube-controller-manager/app/options" @@ -59,12 +59,12 @@ func (nodeIpamController *nodeIPAMController) StartNodeIpamControllerWrapper(ini } nodeIpamController.nodeIPAMControllerOptions.ApplyTo(&nodeIpamController.nodeIPAMControllerConfiguration) - return func(ctx genericcontrollermanager.ControllerContext) (http.Handler, bool, error) { + return func(ctx genericcontrollermanager.ControllerContext) (controller.Interface, bool, error) { return startNodeIpamController(initContext, completedConfig, nodeIpamController.nodeIPAMControllerConfiguration, ctx, cloud) } } -func startNodeIpamController(initContext app.ControllerInitContext, ccmConfig *cloudcontrollerconfig.CompletedConfig, nodeIPAMConfig nodeipamconfig.NodeIPAMControllerConfiguration, ctx genericcontrollermanager.ControllerContext, cloud cloudprovider.Interface) (http.Handler, bool, error) { +func startNodeIpamController(initContext app.ControllerInitContext, ccmConfig *cloudcontrollerconfig.CompletedConfig, nodeIPAMConfig nodeipamconfig.NodeIPAMControllerConfiguration, ctx genericcontrollermanager.ControllerContext, cloud cloudprovider.Interface) (controller.Interface, bool, error) { var serviceCIDR *net.IPNet var secondaryServiceCIDR *net.IPNet diff --git a/staging/src/k8s.io/cloud-provider/app/controllermanager.go b/staging/src/k8s.io/cloud-provider/app/controllermanager.go index 9730f1179ba..4c9d0075a52 100644 --- a/staging/src/k8s.io/cloud-provider/app/controllermanager.go +++ b/staging/src/k8s.io/cloud-provider/app/controllermanager.go @@ -21,7 +21,6 @@ import ( "flag" "fmt" "math/rand" - "net/http" "os" "time" @@ -50,6 +49,7 @@ import ( "k8s.io/component-base/version" "k8s.io/component-base/version/verflag" genericcontrollermanager "k8s.io/controller-manager/app" + "k8s.io/controller-manager/controller" "k8s.io/controller-manager/pkg/clientbuilder" "k8s.io/controller-manager/pkg/informerfactory" "k8s.io/controller-manager/pkg/leadermigration" @@ -302,10 +302,14 @@ func startControllers(cloud cloudprovider.Interface, ctx genericcontrollermanage // InitCloudFunc is used to initialize cloud type InitCloudFunc func(config *cloudcontrollerconfig.CompletedConfig) cloudprovider.Interface -// InitFunc is used to launch a particular controller. It may run additional "should I activate checks". +// InitFunc is used to launch a particular controller. It returns a controller +// that can optionally implement other interfaces so that the controller manager +// can support the requested features. +// The returned controller may be nil, which will be considered an anonymous controller +// that requests no additional features from the controller manager. // Any error returned will cause the controller process to `Fatal` // The bool indicates whether the controller was enabled. -type InitFunc func(ctx genericcontrollermanager.ControllerContext) (debuggingHandler http.Handler, enabled bool, err error) +type InitFunc func(ctx genericcontrollermanager.ControllerContext) (controller controller.Interface, enabled bool, err error) // InitFuncConstructor is used to construct InitFunc type InitFuncConstructor func(initcontext ControllerInitContext, completedConfig *cloudcontrollerconfig.CompletedConfig, cloud cloudprovider.Interface) InitFunc @@ -340,28 +344,28 @@ type ControllerInitContext struct { // StartCloudNodeControllerWrapper is used to take cloud cofig as input and start cloud node controller func StartCloudNodeControllerWrapper(initContext ControllerInitContext, completedConfig *cloudcontrollerconfig.CompletedConfig, cloud cloudprovider.Interface) InitFunc { - return func(ctx genericcontrollermanager.ControllerContext) (http.Handler, bool, error) { + return func(ctx genericcontrollermanager.ControllerContext) (controller.Interface, bool, error) { return startCloudNodeController(initContext, completedConfig, cloud, ctx.Stop) } } // StartCloudNodeLifecycleControllerWrapper is used to take cloud cofig as input and start cloud node lifecycle controller func StartCloudNodeLifecycleControllerWrapper(initContext ControllerInitContext, completedConfig *cloudcontrollerconfig.CompletedConfig, cloud cloudprovider.Interface) InitFunc { - return func(ctx genericcontrollermanager.ControllerContext) (http.Handler, bool, error) { + return func(ctx genericcontrollermanager.ControllerContext) (controller.Interface, bool, error) { return startCloudNodeLifecycleController(initContext, completedConfig, cloud, ctx.Stop) } } // StartServiceControllerWrapper is used to take cloud cofig as input and start service controller func StartServiceControllerWrapper(initContext ControllerInitContext, completedConfig *cloudcontrollerconfig.CompletedConfig, cloud cloudprovider.Interface) InitFunc { - return func(ctx genericcontrollermanager.ControllerContext) (http.Handler, bool, error) { + return func(ctx genericcontrollermanager.ControllerContext) (controller.Interface, bool, error) { return startServiceController(initContext, completedConfig, cloud, ctx.Stop) } } // StartRouteControllerWrapper is used to take cloud cofig as input and start route controller func StartRouteControllerWrapper(initContext ControllerInitContext, completedConfig *cloudcontrollerconfig.CompletedConfig, cloud cloudprovider.Interface) InitFunc { - return func(ctx genericcontrollermanager.ControllerContext) (http.Handler, bool, error) { + return func(ctx genericcontrollermanager.ControllerContext) (controller.Interface, bool, error) { return startRouteController(initContext, completedConfig, cloud, ctx.Stop) } } diff --git a/staging/src/k8s.io/cloud-provider/app/core.go b/staging/src/k8s.io/cloud-provider/app/core.go index c18b64d0af9..586a250f64e 100644 --- a/staging/src/k8s.io/cloud-provider/app/core.go +++ b/staging/src/k8s.io/cloud-provider/app/core.go @@ -23,7 +23,6 @@ package app import ( "fmt" "net" - "net/http" "strings" cloudprovider "k8s.io/cloud-provider" @@ -32,6 +31,7 @@ import ( cloudnodelifecyclecontroller "k8s.io/cloud-provider/controllers/nodelifecycle" routecontroller "k8s.io/cloud-provider/controllers/route" servicecontroller "k8s.io/cloud-provider/controllers/service" + "k8s.io/controller-manager/controller" "k8s.io/controller-manager/pkg/features" "k8s.io/klog/v2" netutils "k8s.io/utils/net" @@ -39,7 +39,7 @@ import ( utilfeature "k8s.io/apiserver/pkg/util/feature" ) -func startCloudNodeController(initContext ControllerInitContext, ctx *config.CompletedConfig, cloud cloudprovider.Interface, stopCh <-chan struct{}) (http.Handler, bool, error) { +func startCloudNodeController(initContext ControllerInitContext, ctx *config.CompletedConfig, cloud cloudprovider.Interface, stopCh <-chan struct{}) (controller.Interface, bool, error) { // Start the CloudNodeController nodeController, err := cloudnodecontroller.NewCloudNodeController( ctx.SharedInformers.Core().V1().Nodes(), @@ -58,7 +58,7 @@ func startCloudNodeController(initContext ControllerInitContext, ctx *config.Com return nil, true, nil } -func startCloudNodeLifecycleController(initContext ControllerInitContext, ctx *config.CompletedConfig, cloud cloudprovider.Interface, stopCh <-chan struct{}) (http.Handler, bool, error) { +func startCloudNodeLifecycleController(initContext ControllerInitContext, ctx *config.CompletedConfig, cloud cloudprovider.Interface, stopCh <-chan struct{}) (controller.Interface, bool, error) { // Start the cloudNodeLifecycleController cloudNodeLifecycleController, err := cloudnodelifecyclecontroller.NewCloudNodeLifecycleController( ctx.SharedInformers.Core().V1().Nodes(), @@ -77,7 +77,7 @@ func startCloudNodeLifecycleController(initContext ControllerInitContext, ctx *c return nil, true, nil } -func startServiceController(initContext ControllerInitContext, ctx *config.CompletedConfig, cloud cloudprovider.Interface, stopCh <-chan struct{}) (http.Handler, bool, error) { +func startServiceController(initContext ControllerInitContext, ctx *config.CompletedConfig, cloud cloudprovider.Interface, stopCh <-chan struct{}) (controller.Interface, bool, error) { // Start the service controller serviceController, err := servicecontroller.New( cloud, @@ -98,7 +98,7 @@ func startServiceController(initContext ControllerInitContext, ctx *config.Compl return nil, true, nil } -func startRouteController(initContext ControllerInitContext, ctx *config.CompletedConfig, cloud cloudprovider.Interface, stopCh <-chan struct{}) (http.Handler, bool, error) { +func startRouteController(initContext ControllerInitContext, ctx *config.CompletedConfig, cloud cloudprovider.Interface, stopCh <-chan struct{}) (controller.Interface, bool, error) { if !ctx.ComponentConfig.KubeCloudShared.ConfigureCloudRoutes { klog.Infof("Will not configure cloud provider routes, --configure-cloud-routes: %v", ctx.ComponentConfig.KubeCloudShared.ConfigureCloudRoutes) return nil, false, nil