Updated default config generation

pull/637/head
kompotkot 2022-07-11 13:53:03 +00:00
rodzic ea706c09b1
commit bf1f33e683
2 zmienionych plików z 85 dodań i 30 usunięć

Wyświetl plik

@ -34,6 +34,7 @@ func (i *flagSlice) Set(value string) error {
// Command Line Interface state // Command Line Interface state
type StateCLI struct { type StateCLI struct {
addAccessCmd *flag.FlagSet addAccessCmd *flag.FlagSet
generateConfigCmd *flag.FlagSet
deleteAccessCmd *flag.FlagSet deleteAccessCmd *flag.FlagSet
serverCmd *flag.FlagSet serverCmd *flag.FlagSet
usersCmd *flag.FlagSet usersCmd *flag.FlagSet
@ -63,15 +64,15 @@ type StateCLI struct {
} }
func (s *StateCLI) usage() { 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 Moonstream node balancer CLI
optional arguments: optional arguments:
-h, --help show this help message and exit -h, --help show this help message and exit
subcommands: subcommands:
{%[1]s,%[2]s,%[3]s,%[4]s,%[5]s} {%[1]s,%[2]s,%[3]s,%[4]s,%[5]s,%[6]s}
`, s.addAccessCmd.Name(), s.deleteAccessCmd.Name(), s.serverCmd.Name(), s.usersCmd.Name(), s.versionCmd.Name()) `, s.addAccessCmd.Name(), s.generateConfigCmd.Name(), s.deleteAccessCmd.Name(), s.serverCmd.Name(), s.usersCmd.Name(), s.versionCmd.Name())
} }
// Check if required flags are set // Check if required flags are set
@ -82,6 +83,10 @@ func (s *StateCLI) checkRequirements() {
fmt.Printf("Add new user access token\n\n") fmt.Printf("Add new user access token\n\n")
s.addAccessCmd.PrintDefaults() s.addAccessCmd.PrintDefaults()
os.Exit(0) os.Exit(0)
case s.generateConfigCmd.Parsed():
fmt.Printf("Generate new configuration\n\n")
s.generateConfigCmd.PrintDefaults()
os.Exit(0)
case s.deleteAccessCmd.Parsed(): case s.deleteAccessCmd.Parsed():
fmt.Printf("Delete user access token\n\n") fmt.Printf("Delete user access token\n\n")
s.deleteAccessCmd.PrintDefaults() s.deleteAccessCmd.PrintDefaults()
@ -133,22 +138,25 @@ func (s *StateCLI) checkRequirements() {
} }
} }
if s.configPathFlag == "" { config := configs.GetConfigPath(s.configPathFlag)
configPath := configs.GenerateDefaultConfig() fmt.Println(config)
s.configPathFlag = configPath if !configs.CheckPathExists(config.ConfigPath) {
configs.GenerateDefaultConfig(config)
} }
s.configPathFlag = config.ConfigPath
} }
func (s *StateCLI) populateCLI() { func (s *StateCLI) populateCLI() {
// Subcommands setup // Subcommands setup
s.addAccessCmd = flag.NewFlagSet("add-access", flag.ExitOnError) 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.deleteAccessCmd = flag.NewFlagSet("delete-access", flag.ExitOnError)
s.serverCmd = flag.NewFlagSet("server", flag.ExitOnError) s.serverCmd = flag.NewFlagSet("server", flag.ExitOnError)
s.usersCmd = flag.NewFlagSet("users", flag.ExitOnError) s.usersCmd = flag.NewFlagSet("users", flag.ExitOnError)
s.versionCmd = flag.NewFlagSet("version", flag.ExitOnError) s.versionCmd = flag.NewFlagSet("version", flag.ExitOnError)
// Common flag pointers // 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.BoolVar(&s.helpFlag, "help", false, "Show help message")
fs.StringVar(&s.configPathFlag, "config", "", "Path to configuration file (default: ~/.nodebalancer/config.txt)") fs.StringVar(&s.configPathFlag, "config", "", "Path to configuration file (default: ~/.nodebalancer/config.txt)")
} }
@ -228,6 +236,10 @@ func CLI() {
} }
fmt.Println(string(resource_data)) fmt.Println(string(resource_data))
case "generate-config":
stateCLI.generateConfigCmd.Parse(os.Args[2:])
stateCLI.checkRequirements()
case "delete-access": case "delete-access":
stateCLI.deleteAccessCmd.Parse(os.Args[2:]) stateCLI.deleteAccessCmd.Parse(os.Args[2:])
stateCLI.checkRequirements() stateCLI.checkRequirements()

Wyświetl plik

@ -7,6 +7,8 @@ import (
"fmt" "fmt"
"log" "log"
"os" "os"
"path/filepath"
"strings"
"time" "time"
) )
@ -57,32 +59,73 @@ func CheckEnvVarSet() {
} }
} }
func GenerateDefaultConfig() string { 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 {
if os.IsNotExist(err) {
exists = false
} else {
fmt.Println(err)
os.Exit(1)
}
}
return exists
}
func GetConfigPath(providedPath string) *Config {
var configDirPath, configPath string
if providedPath == "" {
homeDir, err := os.UserHomeDir() homeDir, err := os.UserHomeDir()
if err != nil { if err != nil {
fmt.Printf("Unable to find user home directory, %v", err) fmt.Printf("Unable to find user home directory, %v", err)
os.Exit(1) os.Exit(1)
} }
configDirPath = fmt.Sprintf("%s/.nodebalancer", homeDir)
configDirPath := fmt.Sprintf("%s/.nodebalancer", homeDir) configPath = fmt.Sprintf("%s/config.txt", configDirPath)
configPath := fmt.Sprintf("%s/config.txt", configDirPath) } else {
configPath = strings.TrimSuffix(providedPath, "/")
err = os.MkdirAll(configDirPath, os.ModePerm) configDirPath = filepath.Dir(configPath)
if err != nil {
fmt.Printf("Unable to create directory, %v", err)
os.Exit(1)
} }
_, err = os.Stat(configPath) defaultConfig := &Config{
if err != nil { ConfigDirPath: configDirPath,
tempConfigB := []byte("ethereum,127.0.0.1,8545") ConfigDirExists: CheckPathExists(configDirPath),
err = os.WriteFile(configPath, tempConfigB, 0644)
if err != nil { ConfigPath: configPath,
fmt.Printf("Unable to create directory, %v", err) ConfigExists: CheckPathExists(configPath),
os.Exit(1)
}
log.Printf("Config directory were not found, created default configuration at %s", configPath)
} }
return 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 created at: %s", config.ConfigDirPath)
}
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
} }