cmd/agent.go (84 lines of code) (raw):

package cmd import ( "encoding/json" "fmt" "github.com/aliyun/alibabacloud-kms-agent/internal/cache" "github.com/aliyun/alibabacloud-kms-agent/internal/conf" "github.com/aliyun/alibabacloud-kms-agent/internal/kms" "github.com/aliyun/alibabacloud-kms-agent/internal/logger" "github.com/aliyun/alibabacloud-kms-agent/internal/service" "github.com/spf13/cobra" "os" "path/filepath" ) var agentCmd = &cobra.Command{ Use: "agent", Short: "run the alibabacloud-kms-agent", Run: func(cmd *cobra.Command, args []string) { var configPath string // Specify configuration file if len(args) > 0 { configPath = args[0] } // Find configuration files in the same directory exePath, err := os.Executable() if err != nil { _, _ = fmt.Fprintf(os.Stderr, "cat get execute opath: %v\n", err) os.Exit(1) } exeDir := filepath.Dir(exePath) if fileExists(exeDir + "/" + "config.toml") { configPath = exeDir + "/" + "config.toml" } startAgent(configPath) }, } func startAgent(configPath string) { var cfg conf.Config var err error if configPath == "" { cfg = conf.DefaultConfig() } else { cfg, err = conf.LoadConfigFormFile(configPath) if err != nil { _, _ = fmt.Fprintf(os.Stderr, "failed to load config from file: %v\n", err) os.Exit(1) } } { b, _ := json.Marshal(cfg) _, _ = fmt.Fprintf(os.Stderr, "success load config: %s\n", string(b)) } lw, err := logger.NewLogger(cfg.Log) if err != nil { _, _ = fmt.Fprintf(os.Stderr, "failed to initialize logger: %v\n", err) os.Exit(1) } cacheStore, err := cache.NewCacheStore(cfg.Cache) if err != nil { _, _ = fmt.Fprintf(os.Stderr, "failed to initialize cache store: %v\n", err) os.Exit(1) } kmsClient, err := kms.NewKeyManagementService(cfg.Kms) if err != nil { _, _ = fmt.Fprintf(os.Stderr, "failed to initialize kms: %v\n", err) os.Exit(1) } _, _ = fmt.Fprintf(os.Stdout, "initialize kms with crendentials: %v\n", kmsClient.GetCredentialType()) err = kmsClient.SelfCheck() if err != nil { _, _ = fmt.Fprintf(os.Stderr, "kms self check failed: %v\n", err) os.Exit(1) } server, err := service.NewServer(cfg.Server, cacheStore, kmsClient, lw) if err != nil { _, _ = fmt.Fprintf(os.Stderr, "failed to initialize http server: %v\n", err) os.Exit(1) } // start server server.Serve() } func fileExists(filename string) bool { info, err := os.Stat(filename) if os.IsNotExist(err) { return false } return err == nil && !info.IsDir() }