Files
sunhpc-go/cmd/root.go
2026-02-14 05:36:00 +08:00

74 lines
1.5 KiB
Go

package cmd
import (
initcmd "sunhpc/cmd/init"
"sunhpc/cmd/soft"
"sunhpc/internal/log"
"github.com/spf13/cobra"
"github.com/spf13/viper"
)
var (
cfgFile string
verbose bool
noColor bool
)
var rootCmd = &cobra.Command{
Use: "sunhpc",
Short: "SunHPC - HPC集群一体化运维工具",
PersistentPreRun: func(cmd *cobra.Command, args []string) {
// 初始化日志
log.Init(verbose)
// 是否禁用颜色
if noColor {
log.EnableColor(false)
}
log.Debugf("命令: %s", cmd.Name())
log.Debugf("详细模式: %v", verbose)
},
PersistentPostRun: func(cmd *cobra.Command, args []string) {
// 同步日志
log.Sync()
log.Close()
},
}
func Execute() error {
return rootCmd.Execute()
}
func init() {
cobra.OnInitialize(initConfig)
rootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", "配置文件路径 (默认为 /etc/sunhpc/sunhpc.yaml)")
rootCmd.PersistentFlags().BoolVarP(&verbose, "verbose", "v", false, "启用详细日志输出")
rootCmd.PersistentFlags().BoolVar(&noColor, "no-color", false, "禁用彩色输出")
// 注册一级子命令
rootCmd.AddCommand(initcmd.Cmd)
rootCmd.AddCommand(soft.Cmd)
rootCmd.AddCommand(nodeCmd)
}
func initConfig() {
if cfgFile != "" {
viper.SetConfigFile(cfgFile)
} else {
viper.AddConfigPath("/etc/sunhpc")
viper.SetConfigType("yaml")
viper.SetConfigName("sunhpc")
}
viper.AutomaticEnv()
if err := viper.ReadInConfig(); err == nil {
log.Infof("使用配置文件: %s", viper.ConfigFileUsed())
} else {
log.Debugf("未找到配置文件: %v", err)
}
}