package app import ( "context" "fmt" "github.com/spf13/cobra" "k8s.io/apimachinery/pkg/util/errors" "k8s.io/apimachinery/pkg/util/runtime" cliflag "k8s.io/component-base/cli/flag" "k8s.io/component-base/term" "k8s.io/klog/v2" "sigs.k8s.io/controller-runtime/pkg/manager/signals" "code.gitea.io/gitea/modules/k8s/cmd/controller-manager/app/options" "code.gitea.io/gitea/modules/k8s/controller" "code.gitea.io/gitea/modules/k8s/controller/application" "code.gitea.io/gitea/modules/k8s/controller/devcontainer" ) func init() { // 在初始化时注册所有控制器 runtime.Must(controller.Register(&devcontainer.Controller{})) runtime.Must(controller.Register(&application.Controller{})) } // NewControllerManagerCommand 创建一个启动 controller manager 的命令 func NewControllerManagerCommand() *cobra.Command { s := options.NewControllerManagerOptions() cmd := &cobra.Command{ Use: "controller-manager", Long: `DevStar controller manager is a daemon that embeds the control loops shipped with DevStar.`, RunE: func(cmd *cobra.Command, args []string) error { if errs := s.Validate(); len(errs) != 0 { return errors.NewAggregate(errs) } return Run(signals.SetupSignalHandler(), s) }, } fs := cmd.Flags() namedFlagSets := s.Flags() for _, f := range namedFlagSets.FlagSets { fs.AddFlagSet(f) } usageFmt := "Usage:\n %s\n" cols, _, _ := term.TerminalSize(cmd.OutOrStdout()) cmd.SetUsageFunc(func(cmd *cobra.Command) error { _, _ = fmt.Fprintf(cmd.OutOrStderr(), usageFmt, cmd.UseLine()) cliflag.PrintSections(cmd.OutOrStderr(), namedFlagSets, cols) return nil }) return cmd } // Run 启动控制器管理器 func Run(ctx context.Context, s *options.ControllerManagerOptions) error { klog.InfoS("Starting DevStar controller manager") cm, err := s.NewControllerManager() if err != nil { return err } // 启动控制器管理器 return cm.Start(ctx) }