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

@ -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()

Wyświetl plik

@ -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
}