Files
ayatori/internal/bootstrap/run.go
T
panxiao81 7834cab97f
Verify / test (pull_request) Successful in 13m29s
Verify / lint (pull_request) Successful in 14m13s
Verify / database-integration (pull_request) Successful in 15m48s
refactor: 集中显式注入并归位凭据领域规则
2026-09-27 19:16:48 +00:00

43 lines
1.2 KiB
Go

// Package bootstrap 负责 controller-manager 的参数解析、依赖装配与启动。
package bootstrap
import (
"context"
"flag"
"fmt"
ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/log/zap"
)
var setupLog = ctrl.Log.WithName("setup")
// Run 只编排启动顺序;命令行参数与信号处理在进程中初始化一次。
func Run() error {
var options options
options.bindFlags(flag.CommandLine)
flag.Parse()
ctrl.SetLogger(zap.New(zap.UseFlagOptions(&options.logging)))
manager, err := newManager(options)
if err != nil {
return err
}
baoClient, err := setupOpenBaoAuthentication(manager, options.openBao)
if err != nil {
return fmt.Errorf("set up OpenBao authentication: %w", err)
}
closeDatabaseConnections, err := registerDatabaseControllers(context.Background(), manager, options.database, baoClient)
if err != nil {
return err
}
// manager 的 worker 完全停止后才释放组件持有的资源。
defer closeDatabaseConnections()
setupLog.Info("Starting manager")
if err := manager.Start(ctrl.SetupSignalHandler()); err != nil {
return fmt.Errorf("run controller manager: %w", err)
}
return nil
}