From b94ae1e0177dc62b3426d48204e7442a7a7aab88 Mon Sep 17 00:00:00 2001 From: Christopher Ramey Date: Sat, 29 Aug 2020 06:42:18 -0800 Subject: [PATCH] Started on simplifying command line arguments --- alias.go | 113 ++++++++++++++++++++++++++++++------------------------ config.go | 3 +- index.go | 94 ++++++++++++++++++++++++++------------------- 3 files changed, 118 insertions(+), 92 deletions(-) diff --git a/alias.go b/alias.go index 32a5838..d33fb8f 100644 --- a/alias.go +++ b/alias.go @@ -17,13 +17,15 @@ func handleAliasCommand() { subcmd := strings.ToLower(os.Args[2]) switch subcmd { + case "ls": + fallthrough case "list": - listcmd := flag.NewFlagSet("alias list", flag.ExitOnError) - listcmd.SetOutput(os.Stdout) - cfgpath := listcmd.String("config", "", "path to configuration") - server := listcmd.String("server", "", "server name to use") - aname := listcmd.String("name", "", "filter list to named alias") - listcmd.Parse(os.Args[3:]) + cmd := flag.NewFlagSet("alias list", flag.ExitOnError) + cmd.SetOutput(os.Stdout) + cfgpath := cmd.String("config", "", "path to configuration") + server := cmd.String("server", "", "server name to use") + aname := cmd.String("name", "", "filter list to named alias") + cmd.Parse(os.Args[3:]) cfg := LoadConfig(*cfgpath) es := cfg.GetClient(*server) @@ -44,87 +46,96 @@ func handleAliasCommand() { } } - case "create": - createcmd := flag.NewFlagSet("alias create", flag.ExitOnError) - createcmd.SetOutput(os.Stdout) - cfgpath := createcmd.String("config", "", "path to configuration") - server := createcmd.String("server", "", "server name to use") - aname := createcmd.String("name", "", "(required) name of alias") - iname := createcmd.String("index", "", "(required) name of index") - createcmd.Parse(os.Args[3:]) - - if *aname == "" { - fmt.Fprintf(os.Stderr, "name parameter is required for alias create\n") - createcmd.PrintDefaults() - os.Exit(1) + case "add": + cmd := flag.NewFlagSet("alias add", flag.ExitOnError) + cmd.SetOutput(os.Stdout) + cmd.Usage = func() { + fmt.Printf("Usage: %s alias %s [args] ...\n", + os.Args[0], subcmd) + cmd.PrintDefaults() } + cfgpath := cmd.String("config", "", "path to configuration") + server := cmd.String("server", "", "server name to use") + cmd.Parse(os.Args[3:]) - if *iname == "" { - fmt.Fprintf(os.Stderr, "index parameter is required for alias create\n") - createcmd.PrintDefaults() + if len(cmd.Args()) < 2 { + fmt.Fprintf(os.Stderr, "alias and index required for alias add\n") + cmd.Usage() os.Exit(1) } + aname := cmd.Arg(0) + indexes := cmd.Args()[1:] cfg := LoadConfig(*cfgpath) es := cfg.GetClient(*server) - _, err := es.Alias().Add(*iname, *aname).Do(context.Background()) + alias := es.Alias() + for _, index := range indexes { + alias.Add(index, aname) + } + _, err := alias.Do(context.Background()) if err != nil { fmt.Fprintf(os.Stderr, "elastic error: %s\n", err.Error()) os.Exit(1) } + case "del": + fallthrough case "delete": - deletecmd := flag.NewFlagSet("alias delete", flag.ExitOnError) - deletecmd.SetOutput(os.Stdout) - cfgpath := deletecmd.String("config", "", "path to configuration") - server := deletecmd.String("server", "", "server name to use") - aname := deletecmd.String("name", "", "(required) name of alias") - iname := deletecmd.String("index", "", "(required) name of index") - deletecmd.Parse(os.Args[3:]) - - if *aname == "" { - fmt.Fprintf(os.Stderr, "name parameter is required for alias delete\n") - deletecmd.PrintDefaults() - os.Exit(1) + cmd := flag.NewFlagSet("alias delete", flag.ExitOnError) + cmd.SetOutput(os.Stdout) + cmd.Usage = func() { + fmt.Printf("Usage: %s alias %s [args] ...\n", + os.Args[0], subcmd) + cmd.PrintDefaults() } + cfgpath := cmd.String("config", "", "path to configuration") + server := cmd.String("server", "", "server name to use") + cmd.Parse(os.Args[3:]) - if *iname == "" { - fmt.Fprintf(os.Stderr, "index parameter is required for alias delete\n") - deletecmd.PrintDefaults() + if len(cmd.Args()) < 2 { + fmt.Fprintf(os.Stderr, "alias and index required for alias delete\n") + cmd.Usage() os.Exit(1) } + aname := cmd.Arg(0) + indexes := cmd.Args()[1:] + cfg := LoadConfig(*cfgpath) es := cfg.GetClient(*server) - _, err := es.Alias().Remove(*iname, *aname).Do(context.Background()) + alias := es.Alias() + for _, index := range indexes { + alias.Remove(index, aname) + } + _, err := alias.Do(context.Background()) if err != nil { fmt.Fprintf(os.Stderr, "elastic error: %s\n", err.Error()) os.Exit(1) } case "replace": - replacecmd := flag.NewFlagSet("alias replace", flag.ExitOnError) - replacecmd.SetOutput(os.Stdout) - cfgpath := replacecmd.String("config", "", "path to configuration") - server := replacecmd.String("server", "", "server name to use") - aname := replacecmd.String("name", "", "(required) name of alias") - oiname := replacecmd.String("oldindex", "", "name of the old index") - niname := replacecmd.String("newindex", "", + cmd := flag.NewFlagSet("alias replace", flag.ExitOnError) + cmd.SetOutput(os.Stdout) + cfgpath := cmd.String("config", "", "path to configuration") + server := cmd.String("server", "", "server name to use") + aname := cmd.String("name", "", "(required) name of alias") + oiname := cmd.String("oldindex", "", "name of the old index") + niname := cmd.String("newindex", "", "(required) name of the new index") - replacecmd.Parse(os.Args[3:]) + cmd.Parse(os.Args[3:]) if *aname == "" { fmt.Fprintf(os.Stderr, "name parameter is required for alias replace\n") - replacecmd.PrintDefaults() + cmd.PrintDefaults() os.Exit(1) } if *niname == "" { fmt.Fprintf(os.Stderr, "newindex parameter is required for alias replace\n") - replacecmd.PrintDefaults() + cmd.PrintDefaults() os.Exit(1) } @@ -177,7 +188,7 @@ func printAliasUsage() { fmt.Printf(" on a specific command\n") fmt.Printf("valid subcommands:\n") fmt.Printf(" list list aliases\n") - fmt.Printf(" create create alias\n") + fmt.Printf(" add add alias\n") fmt.Printf(" delete delete alias\n") - fmt.Printf(" replace replace alias (single step add/remove)\n") + fmt.Printf(" replace replace alias (single step add/delete)\n") } diff --git a/config.go b/config.go index 064ffa5..f0b3236 100644 --- a/config.go +++ b/config.go @@ -2,8 +2,8 @@ package main import ( "fmt" - toml "github.com/pelletier/go-toml" elastic "github.com/olivere/elastic/v7" + toml "github.com/pelletier/go-toml" "io/ioutil" "os" ) @@ -59,7 +59,6 @@ func (ec *ElasticConfig) GetClient(name string) *elastic.Client { return es } - func LoadConfig(cfgpath string) *ElasticConfig { cfg := ElasticConfig{} if cfgpath != "" { diff --git a/index.go b/index.go index 5ea333c..9dfd1b6 100644 --- a/index.go +++ b/index.go @@ -18,6 +18,8 @@ func handleIndexCommand() { subcmd := strings.ToLower(os.Args[2]) switch subcmd { + case "ls": + fallthrough case "list": listcmd := flag.NewFlagSet("index list", flag.ExitOnError) listcmd.SetOutput(os.Stdout) @@ -38,44 +40,54 @@ func handleIndexCommand() { fmt.Printf("%s\n", index) } + case "del": + fallthrough case "delete": - deletecmd := flag.NewFlagSet("index delete", flag.ExitOnError) - deletecmd.SetOutput(os.Stdout) - cfgpath := deletecmd.String("config", "", "path to configuration") - server := deletecmd.String("server", "", "server name to use") - iname := deletecmd.String("name", "", "(required) index name to delete") - deletecmd.Parse(os.Args[3:]) - - if *iname == "" { - fmt.Fprintf(os.Stderr, "name parameter is required for index delete\n") - deletecmd.PrintDefaults() + cmd := flag.NewFlagSet("index delete", flag.ExitOnError) + cmd.SetOutput(os.Stdout) + cmd.Usage = func() { + fmt.Printf("Usage: %s index %s [args] ...\n", + os.Args[0], subcmd) + cmd.PrintDefaults() + } + cfgpath := cmd.String("config", "", "path to configuration") + server := cmd.String("server", "", "server name to use") + cmd.Parse(os.Args[3:]) + + if len(cmd.Args()) < 1 { + fmt.Fprintf(os.Stderr, "index name required for index delete\n") + cmd.Usage() os.Exit(1) } cfg := LoadConfig(*cfgpath) es := cfg.GetClient(*server) - _, err := es.DeleteIndex(*iname).Do(context.Background()) + _, err := es.DeleteIndex(cmd.Args()...).Do(context.Background()) if err != nil { fmt.Fprintf(os.Stderr, "elastic error: %s\n", err.Error()) os.Exit(1) } - case "create": - createcmd := flag.NewFlagSet("index create", flag.ExitOnError) - createcmd.SetOutput(os.Stdout) - cfgpath := createcmd.String("config", "", "path to configuration") - server := createcmd.String("server", "", "server name to use") - iname := createcmd.String("name", "", "(required) index name to create") - bodystr := createcmd.String("body", "", - "json string to use as body options during create") - bodyfile := createcmd.String("bodyfile", "", - "json file to use as body options during create") - createcmd.Parse(os.Args[3:]) - - if *iname == "" { - fmt.Fprintf(os.Stderr, "name parameter is required for index create\n") - createcmd.PrintDefaults() + case "add": + cmd := flag.NewFlagSet("index add", flag.ExitOnError) + cmd.SetOutput(os.Stdout) + cmd.Usage = func() { + fmt.Printf("Usage: %s index %s [args] \n", + os.Args[0], subcmd) + cmd.PrintDefaults() + } + cfgpath := cmd.String("config", "", "path to configuration") + server := cmd.String("server", "", "server name to use") + bodystr := cmd.String("body", "", + "json string to use as body options during add") + bodyfile := cmd.String("bodyfile", "", + "json file to use as body options during add") + cmd.Parse(os.Args[3:]) + + if len(cmd.Args()) < 1 { + fmt.Fprintf(os.Stderr, "index name required for index add\n") + cmd.PrintDefaults() os.Exit(1) } @@ -98,7 +110,7 @@ func handleIndexCommand() { cfg := LoadConfig(*cfgpath) es := cfg.GetClient(*server) - ics := es.CreateIndex(*iname) + ics := es.CreateIndex(cmd.Arg(0)) if body != "" { ics.Body(body) } @@ -109,23 +121,27 @@ func handleIndexCommand() { } case "refresh": - refreshcmd := flag.NewFlagSet("index refresh", flag.ExitOnError) - refreshcmd.SetOutput(os.Stdout) - cfgpath := refreshcmd.String("config", "", "path to configuration") - server := refreshcmd.String("server", "", "server name to use") - iname := refreshcmd.String("name", "", "(required) index name to refresh") - refreshcmd.Parse(os.Args[3:]) - - if *iname == "" { - fmt.Fprintf(os.Stderr, "name parameter is required for index refresh\n") - refreshcmd.PrintDefaults() + cmd := flag.NewFlagSet("index refresh", flag.ExitOnError) + cmd.SetOutput(os.Stdout) + cmd.Usage = func() { + fmt.Printf("Usage: %s index %s [args] ...\n", + os.Args[0], subcmd) + cmd.PrintDefaults() + } + cfgpath := cmd.String("config", "", "path to configuration") + server := cmd.String("server", "", "server name to use") + cmd.Parse(os.Args[3:]) + + if len(cmd.Args()) < 1 { + fmt.Fprintf(os.Stderr, "index name required for index refresh\n") + cmd.Usage() os.Exit(1) } cfg := LoadConfig(*cfgpath) es := cfg.GetClient(*server) - _, err := es.Refresh(*iname).Do(context.Background()) + _, err := es.Refresh(cmd.Args()...).Do(context.Background()) if err != nil { fmt.Fprintf(os.Stderr, "elastic error: %s\n", err.Error()) os.Exit(1) @@ -149,7 +165,7 @@ func printIndexUsage() { fmt.Printf(" on a specific command\n") fmt.Printf("valid subcommands:\n") fmt.Printf(" list list indexes\n") + fmt.Printf(" add add index\n") fmt.Printf(" delete delete index\n") - fmt.Printf(" create create index\n") fmt.Printf(" refresh refresh index\n") }