package cli import ( initcmd "sunhpc/internal/cli/init" "sunhpc/pkg/config" "sunhpc/pkg/logger" "github.com/spf13/cobra" "github.com/spf13/viper" ) var ( cfgFile string verbose bool noColor bool ) func NewRootCmd() *cobra.Command { cmd := &cobra.Command{ Use: "sunhpc", Short: "SunHPC - HPC集群一体化运维工具", PersistentPreRun: func(cmd *cobra.Command, args []string) { // 加载全局配置(只加载一次) cfg, err := config.LoadConfig() if err != nil { // 配置加载失败,使用默认日志配置初始化 logger.Warnf("加载配置失败,使用默认日志配置: %v", err) logger.Init(logger.LogConfig{}) return } // 3. 初始化全局日志(全局只执行一次) logger.Init(logger.LogConfig{ Verbose: cfg.Log.Verbose, ShowColor: !cfg.Log.ShowColor, LogFile: cfg.Log.LogFile, }) }, Run: func(cmd *cobra.Command, args []string) { cmd.Help() }, } cmd.PersistentFlags().StringVarP( &config.CLIParams.Config, "config", "c", "", "配置文件路径 (默认:/etc/sunhpc/config.yaml)") cmd.PersistentFlags().BoolVarP( &config.CLIParams.Verbose, "verbose", "v", false, "启用详细日志输出") cmd.PersistentFlags().BoolVar( &config.CLIParams.NoColor, "no-color", false, "禁用彩色输出") // 如果指定了 --config 参数,优先使用该配置文件 if config.CLIParams.Config != "" { viper.SetConfigFile(config.CLIParams.Config) } cmd.AddCommand(initcmd.NewInitCmd()) return cmd } func Execute() error { return NewRootCmd().Execute() }