feat: kubesphere 4.0 (#6115)
* feat: kubesphere 4.0 Signed-off-by: ci-bot <ci-bot@kubesphere.io> * feat: kubesphere 4.0 Signed-off-by: ci-bot <ci-bot@kubesphere.io> --------- Signed-off-by: ci-bot <ci-bot@kubesphere.io> Co-authored-by: ks-ci-bot <ks-ci-bot@example.com> Co-authored-by: joyceliu <joyceliu@yunify.com>
This commit is contained in:
committed by
GitHub
parent
b5015ec7b9
commit
447a51f08b
98
pkg/controller/manager.go
Normal file
98
pkg/controller/manager.go
Normal file
@@ -0,0 +1,98 @@
|
||||
/*
|
||||
* Please refer to the LICENSE file in the root directory of the project.
|
||||
* https://github.com/kubesphere/kubesphere/blob/master/LICENSE
|
||||
*/
|
||||
|
||||
package controller
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"sort"
|
||||
|
||||
"github.com/Masterminds/semver/v3"
|
||||
"k8s.io/klog/v2"
|
||||
"sigs.k8s.io/controller-runtime/pkg/manager"
|
||||
|
||||
"kubesphere.io/kubesphere/pkg/controller/options"
|
||||
"kubesphere.io/kubesphere/pkg/simple/client/k8s"
|
||||
"kubesphere.io/kubesphere/pkg/utils/clusterclient"
|
||||
)
|
||||
|
||||
const (
|
||||
SyncFailed = "SyncFailed"
|
||||
Synced = "Synced"
|
||||
MessageResourceSynced = "Synced successfully"
|
||||
)
|
||||
|
||||
type Controller interface {
|
||||
Name() string
|
||||
SetupWithManager(mgr *Manager) error
|
||||
}
|
||||
|
||||
type Hideable interface {
|
||||
Hidden() bool
|
||||
}
|
||||
|
||||
type ClusterSelector interface {
|
||||
Enabled(clusterRole string) bool
|
||||
}
|
||||
|
||||
type Manager struct {
|
||||
options.Options
|
||||
manager.Manager
|
||||
K8sClient k8s.Client
|
||||
IsControllerEnabled
|
||||
ClusterClient clusterclient.Interface
|
||||
K8sVersion *semver.Version
|
||||
}
|
||||
|
||||
type IsControllerEnabled func(controllerName string) bool
|
||||
|
||||
func (mgr *Manager) Run(ctx context.Context, registry Registry) error {
|
||||
for name, ctr := range registry {
|
||||
if mgr.IsControllerEnabled(name) {
|
||||
if clusterSelector, ok := ctr.(ClusterSelector); ok &&
|
||||
!clusterSelector.Enabled(mgr.MultiClusterOptions.ClusterRole) {
|
||||
klog.Infof("%s controller is enabled but is not going to run due to its dependent component being disabled.", name)
|
||||
continue
|
||||
}
|
||||
if err := ctr.SetupWithManager(mgr); err != nil {
|
||||
return fmt.Errorf("unable to setup %s controller: %v", name, err)
|
||||
} else {
|
||||
klog.Infof("%s controller is enabled and added successfully.", name)
|
||||
}
|
||||
} else {
|
||||
klog.Infof("%s controller is disabled by controller selectors.", name)
|
||||
}
|
||||
}
|
||||
klog.V(0).Info("Starting the controllers.")
|
||||
if err := mgr.Manager.Start(ctx); err != nil {
|
||||
return fmt.Errorf("unable to start the controller manager: %v", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func Register(controller Controller) error {
|
||||
if _, exist := Controllers[controller.Name()]; exist {
|
||||
return fmt.Errorf("controller %s already exists", controller.Name())
|
||||
}
|
||||
Controllers[controller.Name()] = controller
|
||||
return nil
|
||||
}
|
||||
|
||||
var Controllers = make(Registry)
|
||||
|
||||
type Registry map[string]Controller
|
||||
|
||||
func (r Registry) Keys() []string {
|
||||
var keys []string
|
||||
for k, v := range r {
|
||||
if hidden, ok := v.(Hideable); ok && hidden.Hidden() {
|
||||
continue
|
||||
}
|
||||
keys = append(keys, k)
|
||||
}
|
||||
sort.Strings(keys)
|
||||
return keys
|
||||
}
|
||||
Reference in New Issue
Block a user