Merge pull request #1123 from iawia002/cleanup-controller-manager

controller-manager: automatically generate all controllers list in flag
This commit is contained in:
karmada-bot 2021-12-18 11:25:25 +08:00 committed by GitHub
commit bbcc95cce2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 31 additions and 48 deletions

View File

@ -8,6 +8,7 @@ import (
"strconv"
"github.com/spf13/cobra"
"k8s.io/apimachinery/pkg/util/sets"
"k8s.io/client-go/discovery"
"k8s.io/client-go/dynamic"
kubeclientset "k8s.io/client-go/kubernetes"
@ -60,7 +61,7 @@ func NewControllerManagerCommand(ctx context.Context) *cobra.Command {
cmd.Flags().AddGoFlagSet(flag.CommandLine)
cmd.AddCommand(sharedcommand.NewCmdVersion(os.Stdout, "karmada-controller-manager"))
opts.AddFlags(cmd.Flags())
opts.AddFlags(cmd.Flags(), KnownControllers())
return cmd
}
@ -114,6 +115,23 @@ type ControllerContext struct {
ControlPlaneInformerManager informermanager.SingleClusterInformerManager
}
// IsControllerEnabled check if a specified controller enabled or not.
func (c ControllerContext) IsControllerEnabled(name string) bool {
hasStar := false
for _, ctrl := range c.Opts.Controllers {
if ctrl == name {
return true
}
if ctrl == "-"+name {
return false
}
if ctrl == "*" {
hasStar = true
}
}
return hasStar
}
// InitFunc is used to launch a particular controller.
// Any error returned will cause the controller process to `Fatal`
// The bool indicates whether the controller was enabled.
@ -135,6 +153,11 @@ func NewControllerInitializers() map[string]InitFunc {
return controllers
}
// KnownControllers returns all known controllers's name
func KnownControllers() []string {
return sets.StringKeySet(NewControllerInitializers()).List()
}
func startClusterController(ctx ControllerContext) (enabled bool, err error) {
mgr := ctx.Mgr
opts := ctx.Opts
@ -146,7 +169,6 @@ func startClusterController(ctx ControllerContext) (enabled bool, err error) {
ClusterStartupGracePeriod: opts.ClusterStartupGracePeriod.Duration,
}
if err := clusterController.SetupWithManager(mgr); err != nil {
klog.Fatalf("Failed to setup cluster controller: %v", err)
return false, err
}
return true, nil
@ -189,7 +211,6 @@ func startClusterStatusController(ctx ControllerContext) (enabled bool, err erro
ClusterCacheSyncTimeout: opts.ClusterCacheSyncTimeout,
}
if err := clusterStatusController.SetupWithManager(mgr); err != nil {
klog.Fatalf("Failed to setup cluster status controller: %v", err)
return false, err
}
return true, nil
@ -204,7 +225,6 @@ func startHpaController(ctx ControllerContext) (enabled bool, err error) {
InformerManager: ctx.ControlPlaneInformerManager,
}
if err := hpaController.SetupWithManager(ctx.Mgr); err != nil {
klog.Fatalf("Failed to setup hpa controller: %v", err)
return false, err
}
return true, nil
@ -220,7 +240,6 @@ func startBindingController(ctx ControllerContext) (enabled bool, err error) {
InformerManager: ctx.ControlPlaneInformerManager,
}
if err := bindingController.SetupWithManager(ctx.Mgr); err != nil {
klog.Fatalf("Failed to setup binding controller: %v", err)
return false, err
}
@ -233,7 +252,6 @@ func startBindingController(ctx ControllerContext) (enabled bool, err error) {
InformerManager: ctx.ControlPlaneInformerManager,
}
if err := clusterResourceBindingController.SetupWithManager(ctx.Mgr); err != nil {
klog.Fatalf("Failed to setup cluster resource binding controller: %v", err)
return false, err
}
return true, nil
@ -249,7 +267,6 @@ func startExecutionController(ctx ControllerContext) (enabled bool, err error) {
InformerManager: informermanager.GetInstance(),
}
if err := executionController.SetupWithManager(ctx.Mgr); err != nil {
klog.Fatalf("Failed to setup execution controller: %v", err)
return false, err
}
return true, nil
@ -271,7 +288,6 @@ func startWorkStatusController(ctx ControllerContext) (enabled bool, err error)
}
workStatusController.RunWorkQueue()
if err := workStatusController.SetupWithManager(ctx.Mgr); err != nil {
klog.Fatalf("Failed to setup work status controller: %v", err)
return false, err
}
return true, nil
@ -288,7 +304,6 @@ func startNamespaceController(ctx ControllerContext) (enabled bool, err error) {
SkippedPropagatingNamespaces: skippedPropagatingNamespaces,
}
if err := namespaceSyncController.SetupWithManager(ctx.Mgr); err != nil {
klog.Fatalf("Failed to setup namespace sync controller: %v", err)
return false, err
}
return true, nil
@ -309,7 +324,6 @@ func startServiceExportController(ctx ControllerContext) (enabled bool, err erro
}
serviceExportController.RunWorkQueue()
if err := serviceExportController.SetupWithManager(ctx.Mgr); err != nil {
klog.Fatalf("Failed to setup ServiceExport controller: %v", err)
return false, err
}
return true, nil
@ -321,7 +335,6 @@ func startEndpointSliceController(ctx ControllerContext) (enabled bool, err erro
EventRecorder: ctx.Mgr.GetEventRecorderFor(mcs.EndpointSliceControllerName),
}
if err := endpointSliceController.SetupWithManager(ctx.Mgr); err != nil {
klog.Fatalf("Failed to setup EndpointSlice controller: %v", err)
return false, err
}
return true, nil
@ -333,7 +346,6 @@ func startServiceImportController(ctx ControllerContext) (enabled bool, err erro
EventRecorder: ctx.Mgr.GetEventRecorderFor(mcs.ServiceImportControllerName),
}
if err := serviceImportController.SetupWithManager(ctx.Mgr); err != nil {
klog.Fatalf("Failed to setup ServiceImport controller: %v", err)
return false, err
}
return true, nil
@ -457,20 +469,3 @@ func setupClusterAPIClusterDetector(mgr controllerruntime.Manager, opts *options
klog.Infof("Success to setup cluster-api cluster detector")
}
// IsControllerEnabled check if a specified controller enabled or not.
func (c ControllerContext) IsControllerEnabled(name string) bool {
hasStar := false
for _, ctrl := range c.Opts.Controllers {
if ctrl == name {
return true
}
if ctrl == "-"+name {
return false
}
if ctrl == "*" {
hasStar = true
}
}
return hasStar
}

View File

@ -1,6 +1,8 @@
package options
import (
"fmt"
"strings"
"time"
"github.com/spf13/pflag"
@ -79,8 +81,11 @@ func NewOptions() *Options {
}
// AddFlags adds flags to the specified FlagSet.
func (o *Options) AddFlags(flags *pflag.FlagSet) {
flags.StringSliceVar(&o.Controllers, "controllers", []string{"*"}, "A list of controllers to enable. '*' enables all on-by-default controllers, 'foo' enables the controller named 'foo', '-foo' disables the controller named 'foo'. All controllers: cluster, clusterStatus, hpa, binding, execution, workStatus, namespace, serviceExport, endpointSlice, serviceImport.")
func (o *Options) AddFlags(flags *pflag.FlagSet, allControllers []string) {
flags.StringSliceVar(&o.Controllers, "controllers", []string{"*"}, fmt.Sprintf(
"A list of controllers to enable. '*' enables all on-by-default controllers, 'foo' enables the controller named 'foo', '-foo' disables the controller named 'foo'. All controllers: %s.",
strings.Join(allControllers, ", "),
))
flags.StringVar(&o.BindAddress, "bind-address", defaultBindAddress,
"The IP address on which to listen for the --secure-port port.")
flags.IntVar(&o.SecurePort, "secure-port", defaultPort,
@ -113,20 +118,3 @@ func (o *Options) AddFlags(flags *pflag.FlagSet) {
flags.IntVar(&o.KubeAPIBurst, "kube-api-burst", 60, "Burst to use while talking with karmada-apiserver. Doesn't cover events and node heartbeat apis which rate limiting is controlled by a different set of flags.")
flags.DurationVar(&o.ClusterCacheSyncTimeout.Duration, "cluster-cache-sync-timeout", util.CacheSyncTimeout, "Timeout period waiting for cluster cache to sync.")
}
// IsControllerEnabled check if a specified controller enabled or not.
func (o *Options) IsControllerEnabled(name string) bool {
hasStar := false
for _, ctrl := range o.Controllers {
if ctrl == name {
return true
}
if ctrl == "-"+name {
return false
}
if ctrl == "*" {
hasStar = true
}
}
return hasStar
}