You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by su...@apache.org on 2023/02/22 05:09:11 UTC

[shardingsphere-on-cloud] branch main updated: refactor: update FeatureGate handlers (#219)

This is an automated email from the ASF dual-hosted git repository.

sunnianjun pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/shardingsphere-on-cloud.git


The following commit(s) were added to refs/heads/main by this push:
     new c2573bb  refactor: update FeatureGate handlers (#219)
c2573bb is described below

commit c2573bbf34d3a801f05e24dd01718e226cee591b
Author: liyao <ma...@126.com>
AuthorDate: Wed Feb 22 13:09:06 2023 +0800

    refactor: update FeatureGate handlers (#219)
    
    Signed-off-by: mlycore <ma...@126.com>
---
 .../cmd/shardingsphere-operator/manager/manager.go | 18 +++-----
 .../cmd/shardingsphere-operator/manager/option.go  | 52 +++++++++++++++++++---
 2 files changed, 50 insertions(+), 20 deletions(-)

diff --git a/shardingsphere-operator/cmd/shardingsphere-operator/manager/manager.go b/shardingsphere-operator/cmd/shardingsphere-operator/manager/manager.go
index c9063d8..254cb95 100644
--- a/shardingsphere-operator/cmd/shardingsphere-operator/manager/manager.go
+++ b/shardingsphere-operator/cmd/shardingsphere-operator/manager/manager.go
@@ -21,9 +21,6 @@ import (
 	"context"
 	"os"
 
-	"github.com/apache/shardingsphere-on-cloud/shardingsphere-operator/pkg/kubernetes/configmap"
-	"github.com/apache/shardingsphere-on-cloud/shardingsphere-operator/pkg/kubernetes/deployment"
-	"github.com/apache/shardingsphere-on-cloud/shardingsphere-operator/pkg/kubernetes/service"
 	"github.com/apache/shardingsphere-on-cloud/shardingsphere-operator/pkg/metrics"
 
 	"github.com/apache/shardingsphere-on-cloud/shardingsphere-operator/pkg/controllers"
@@ -67,16 +64,11 @@ func SetupWithOptions(opts *Options) *Manager {
 		os.Exit(1)
 	}
 
-	if opts.ComputeNode {
-		if err = (&controllers.ComputeNodeReconciler{
-			Client:     mgr.GetClient(),
-			Scheme:     mgr.GetScheme(),
-			Log:        mgr.GetLogger(),
-			Deployment: deployment.NewDeployment(mgr.GetClient()),
-			Service:    service.NewService(mgr.GetClient()),
-			ConfigMap:  configmap.NewConfigMap(mgr.GetClient()),
-		}).SetupWithManager(mgr); err != nil {
-			logger.Error(err, "unable to create controller", "controller", "ComputeNode")
+	// feature gates handling
+	handlers := opts.ParseFeatureGates()
+	for _, h := range handlers {
+		//FIXME: this will cause panic if there is no handler found
+		if err := h(mgr); err != nil {
 			os.Exit(1)
 		}
 	}
diff --git a/shardingsphere-operator/cmd/shardingsphere-operator/manager/option.go b/shardingsphere-operator/cmd/shardingsphere-operator/manager/option.go
index 62cd0db..48216e1 100644
--- a/shardingsphere-operator/cmd/shardingsphere-operator/manager/option.go
+++ b/shardingsphere-operator/cmd/shardingsphere-operator/manager/option.go
@@ -19,14 +19,20 @@ package manager
 
 import (
 	"flag"
+	"strings"
 
 	"github.com/apache/shardingsphere-on-cloud/shardingsphere-operator/api/v1alpha1"
+	"github.com/apache/shardingsphere-on-cloud/shardingsphere-operator/pkg/controllers"
+	"github.com/apache/shardingsphere-on-cloud/shardingsphere-operator/pkg/kubernetes/configmap"
+	"github.com/apache/shardingsphere-on-cloud/shardingsphere-operator/pkg/kubernetes/deployment"
+	"github.com/apache/shardingsphere-on-cloud/shardingsphere-operator/pkg/kubernetes/service"
 	"go.uber.org/zap/zapcore"
 	"k8s.io/apimachinery/pkg/runtime"
 	utilruntime "k8s.io/apimachinery/pkg/util/runtime"
 	clientgoscheme "k8s.io/client-go/kubernetes/scheme"
 	ctrl "sigs.k8s.io/controller-runtime"
 	"sigs.k8s.io/controller-runtime/pkg/log/zap"
+	"sigs.k8s.io/controller-runtime/pkg/manager"
 )
 
 var (
@@ -40,12 +46,8 @@ func init() {
 
 type Options struct {
 	ctrl.Options
-	FeatureGateOptions
-	ZapOptions zap.Options
-}
-
-type FeatureGateOptions struct {
-	ComputeNode bool
+	FeatureGates string
+	ZapOptions   zap.Options
 }
 
 func ParseOptionsFromCmdFlags() *Options {
@@ -66,7 +68,7 @@ func ParseOptionsFromCmdFlags() *Options {
 	flag.BoolVar(&opt.LeaderElection, "leader-elect", false,
 		"Enable leader election for controller manager. "+
 			"Enabling this will ensure there is only one active controller manager.")
-	flag.BoolVar(&opt.ComputeNode, "feature-gate-compute-node", false, "Enable support for CustomResourceDefinition ComputeNode.")
+	flag.StringVar(&opt.FeatureGates, "feature-gates", "", "A set of key=value pairs that describe feature gates for alpha/experimental features.")
 
 	opt.ZapOptions.BindFlags(flag.CommandLine)
 
@@ -74,3 +76,39 @@ func ParseOptionsFromCmdFlags() *Options {
 
 	return opt
 }
+
+func (opts *Options) ParseFeatureGates() []FeatureGateHandler {
+	handlers := []FeatureGateHandler{}
+	if gatesVal := strings.Split(opts.FeatureGates, ","); len(gatesVal) > 0 {
+		for i := range gatesVal {
+			gate, enable := func() (string, bool) {
+				gval := strings.Split(gatesVal[i], "=")
+				return gval[0], gval[1] == "true"
+			}()
+
+			if h, ok := featureGatesHandlers[gate]; ok && enable {
+				handlers = append(handlers, h)
+			}
+		}
+	}
+	return handlers
+}
+
+type FeatureGateHandler func(mgr manager.Manager) error
+
+var featureGatesHandlers = map[string]FeatureGateHandler{
+	"ComputeNode": func(mgr manager.Manager) error {
+		if err := (&controllers.ComputeNodeReconciler{
+			Client:     mgr.GetClient(),
+			Scheme:     mgr.GetScheme(),
+			Log:        mgr.GetLogger(),
+			Deployment: deployment.NewDeployment(mgr.GetClient()),
+			Service:    service.NewService(mgr.GetClient()),
+			ConfigMap:  configmap.NewConfigMap(mgr.GetClient()),
+		}).SetupWithManager(mgr); err != nil {
+			logger.Error(err, "unable to create controller", "controller", "ComputeNode")
+			return err
+		}
+		return nil
+	},
+}