From bf1f33e68363e4315ebad5d483a9c23b4a84e1cf Mon Sep 17 00:00:00 2001 From: kompotkot Date: Mon, 11 Jul 2022 13:53:03 +0000 Subject: [PATCH] Updated default config generation --- nodes/node_balancer/cmd/cli.go | 36 +++++++---- nodes/node_balancer/configs/settings.go | 79 +++++++++++++++++++------ 2 files changed, 85 insertions(+), 30 deletions(-) diff --git a/nodes/node_balancer/cmd/cli.go b/nodes/node_balancer/cmd/cli.go index 878f28e8..bd9fbe80 100644 --- a/nodes/node_balancer/cmd/cli.go +++ b/nodes/node_balancer/cmd/cli.go @@ -33,11 +33,12 @@ func (i *flagSlice) Set(value string) error { // Command Line Interface state type StateCLI struct { - addAccessCmd *flag.FlagSet - deleteAccessCmd *flag.FlagSet - serverCmd *flag.FlagSet - usersCmd *flag.FlagSet - versionCmd *flag.FlagSet + addAccessCmd *flag.FlagSet + generateConfigCmd *flag.FlagSet + deleteAccessCmd *flag.FlagSet + serverCmd *flag.FlagSet + usersCmd *flag.FlagSet + versionCmd *flag.FlagSet // Common flags configPathFlag string @@ -63,15 +64,15 @@ type StateCLI struct { } func (s *StateCLI) usage() { - fmt.Printf(`usage: nodebalancer [-h] {%[1]s,%[2]s,%[3]s,%[4]s,%[5]s} ... + fmt.Printf(`usage: nodebalancer [-h] {%[1]s,%[2]s,%[3]s,%[4]s,%[5]s,%[6]s} ... Moonstream node balancer CLI optional arguments: -h, --help show this help message and exit subcommands: - {%[1]s,%[2]s,%[3]s,%[4]s,%[5]s} -`, s.addAccessCmd.Name(), s.deleteAccessCmd.Name(), s.serverCmd.Name(), s.usersCmd.Name(), s.versionCmd.Name()) + {%[1]s,%[2]s,%[3]s,%[4]s,%[5]s,%[6]s} +`, s.addAccessCmd.Name(), s.generateConfigCmd.Name(), s.deleteAccessCmd.Name(), s.serverCmd.Name(), s.usersCmd.Name(), s.versionCmd.Name()) } // Check if required flags are set @@ -82,6 +83,10 @@ func (s *StateCLI) checkRequirements() { fmt.Printf("Add new user access token\n\n") s.addAccessCmd.PrintDefaults() os.Exit(0) + case s.generateConfigCmd.Parsed(): + fmt.Printf("Generate new configuration\n\n") + s.generateConfigCmd.PrintDefaults() + os.Exit(0) case s.deleteAccessCmd.Parsed(): fmt.Printf("Delete user access token\n\n") s.deleteAccessCmd.PrintDefaults() @@ -133,22 +138,25 @@ func (s *StateCLI) checkRequirements() { } } - if s.configPathFlag == "" { - configPath := configs.GenerateDefaultConfig() - s.configPathFlag = configPath + config := configs.GetConfigPath(s.configPathFlag) + fmt.Println(config) + if !configs.CheckPathExists(config.ConfigPath) { + configs.GenerateDefaultConfig(config) } + s.configPathFlag = config.ConfigPath } func (s *StateCLI) populateCLI() { // Subcommands setup s.addAccessCmd = flag.NewFlagSet("add-access", flag.ExitOnError) + s.generateConfigCmd = flag.NewFlagSet("generate-config", flag.ExitOnError) s.deleteAccessCmd = flag.NewFlagSet("delete-access", flag.ExitOnError) s.serverCmd = flag.NewFlagSet("server", flag.ExitOnError) s.usersCmd = flag.NewFlagSet("users", flag.ExitOnError) s.versionCmd = flag.NewFlagSet("version", flag.ExitOnError) // Common flag pointers - for _, fs := range []*flag.FlagSet{s.addAccessCmd, s.deleteAccessCmd, s.serverCmd, s.usersCmd, s.versionCmd} { + for _, fs := range []*flag.FlagSet{s.addAccessCmd, s.generateConfigCmd, s.deleteAccessCmd, s.serverCmd, s.usersCmd, s.versionCmd} { fs.BoolVar(&s.helpFlag, "help", false, "Show help message") fs.StringVar(&s.configPathFlag, "config", "", "Path to configuration file (default: ~/.nodebalancer/config.txt)") } @@ -228,6 +236,10 @@ func CLI() { } fmt.Println(string(resource_data)) + case "generate-config": + stateCLI.generateConfigCmd.Parse(os.Args[2:]) + stateCLI.checkRequirements() + case "delete-access": stateCLI.deleteAccessCmd.Parse(os.Args[2:]) stateCLI.checkRequirements() diff --git a/nodes/node_balancer/configs/settings.go b/nodes/node_balancer/configs/settings.go index 6bb13b40..03b39d72 100644 --- a/nodes/node_balancer/configs/settings.go +++ b/nodes/node_balancer/configs/settings.go @@ -7,6 +7,8 @@ import ( "fmt" "log" "os" + "path/filepath" + "strings" "time" ) @@ -57,32 +59,73 @@ func CheckEnvVarSet() { } } -func GenerateDefaultConfig() string { - homeDir, err := os.UserHomeDir() +type Config struct { + ConfigDirPath string + ConfigDirExists bool + + ConfigPath string + ConfigExists bool +} + +func CheckPathExists(path string) bool { + var exists = true + _, err := os.Stat(path) if err != nil { - fmt.Printf("Unable to find user home directory, %v", err) - os.Exit(1) + if os.IsNotExist(err) { + exists = false + } else { + fmt.Println(err) + os.Exit(1) + } } - configDirPath := fmt.Sprintf("%s/.nodebalancer", homeDir) - configPath := fmt.Sprintf("%s/config.txt", configDirPath) + return exists +} - err = os.MkdirAll(configDirPath, os.ModePerm) - if err != nil { - fmt.Printf("Unable to create directory, %v", err) - os.Exit(1) - } - - _, err = os.Stat(configPath) - if err != nil { - tempConfigB := []byte("ethereum,127.0.0.1,8545") - err = os.WriteFile(configPath, tempConfigB, 0644) +func GetConfigPath(providedPath string) *Config { + var configDirPath, configPath string + if providedPath == "" { + homeDir, err := os.UserHomeDir() if err != nil { + fmt.Printf("Unable to find user home directory, %v", err) + os.Exit(1) + } + configDirPath = fmt.Sprintf("%s/.nodebalancer", homeDir) + configPath = fmt.Sprintf("%s/config.txt", configDirPath) + } else { + configPath = strings.TrimSuffix(providedPath, "/") + configDirPath = filepath.Dir(configPath) + } + + defaultConfig := &Config{ + ConfigDirPath: configDirPath, + ConfigDirExists: CheckPathExists(configDirPath), + + ConfigPath: configPath, + ConfigExists: CheckPathExists(configPath), + } + + return defaultConfig +} + +func GenerateDefaultConfig(config *Config) string { + if !config.ConfigDirExists { + if err := os.MkdirAll(config.ConfigDirPath, os.ModePerm); err != nil { fmt.Printf("Unable to create directory, %v", err) os.Exit(1) } - log.Printf("Config directory were not found, created default configuration at %s", configPath) + log.Printf("Config directory created at: %s", config.ConfigDirPath) } - return configPath + if !config.ConfigExists { + tempConfigB := []byte("ethereum,127.0.0.1,8545") + err := os.WriteFile(config.ConfigPath, tempConfigB, 0644) + if err != nil { + fmt.Printf("Unable to create temp config file, %v", err) + os.Exit(1) + } + log.Printf("Created default configuration at %s", config.ConfigPath) + } + + return config.ConfigPath }