diff --git a/alias.go b/alias.go index 9b300f5..32a5838 100644 --- a/alias.go +++ b/alias.go @@ -21,11 +21,12 @@ func handleAliasCommand() { 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:]) cfg := LoadConfig(*cfgpath) - es := ClientFromConfig(cfg.GetServer("")) + es := cfg.GetClient(*server) aliases, err := es.CatAliases().Do(context.Background()) if err != nil { @@ -47,6 +48,7 @@ func handleAliasCommand() { 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:]) @@ -64,7 +66,7 @@ func handleAliasCommand() { } cfg := LoadConfig(*cfgpath) - es := ClientFromConfig(cfg.GetServer("")) + es := cfg.GetClient(*server) _, err := es.Alias().Add(*iname, *aname).Do(context.Background()) if err != nil { @@ -76,6 +78,7 @@ func handleAliasCommand() { 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:]) @@ -93,7 +96,7 @@ func handleAliasCommand() { } cfg := LoadConfig(*cfgpath) - es := ClientFromConfig(cfg.GetServer("")) + es := cfg.GetClient(*server) _, err := es.Alias().Remove(*iname, *aname).Do(context.Background()) if err != nil { @@ -105,6 +108,7 @@ func handleAliasCommand() { 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", "", @@ -125,7 +129,7 @@ func handleAliasCommand() { } cfg := LoadConfig(*cfgpath) - es := ClientFromConfig(cfg.GetServer("")) + es := cfg.GetClient(*server) oinames := make([]string, 0, 10) if *oiname != "" { diff --git a/config.go b/config.go index baaa140..064ffa5 100644 --- a/config.go +++ b/config.go @@ -3,6 +3,7 @@ package main import ( "fmt" toml "github.com/pelletier/go-toml" + elastic "github.com/olivere/elastic/v7" "io/ioutil" "os" ) @@ -22,17 +23,43 @@ type ElasticServer struct { Pass string } -func (ec *ElasticConfig) GetServer(name string) *ElasticServer { +func (ec *ElasticConfig) GetClient(name string) *elastic.Client { if name == "" { + if ec.Elastic.DefaultServer == "" { + fmt.Fprintf(os.Stderr, "no server name provided\n") + os.Exit(1) + } name = ec.Elastic.DefaultServer } - if serv, ok := ec.Servers[name]; ok { - return &serv + if _, ok := ec.Servers[name]; !ok { + fmt.Fprintf(os.Stderr, "no configuration found for server \"%s\"\n", name) + os.Exit(1) } - return nil + + server := ec.Servers[name] + + opts := []elastic.ClientOptionFunc{ + elastic.SetURL(server.URL), + elastic.SetSniff(false), + elastic.SetGzip(true), + } + if server.User != "" && server.Pass != "" { + opts = append(opts, elastic.SetBasicAuth( + server.User, server.Pass, + )) + } + + es, err := elastic.NewClient(opts...) + if err != nil { + fmt.Fprintf(os.Stderr, "elastic connection error: %s\n", err.Error()) + os.Exit(1) + } + + return es } + func LoadConfig(cfgpath string) *ElasticConfig { cfg := ElasticConfig{} if cfgpath != "" { diff --git a/elastic.go b/elastic.go deleted file mode 100644 index 53d9320..0000000 --- a/elastic.go +++ /dev/null @@ -1,28 +0,0 @@ -package main - -import ( - "fmt" - elastic "github.com/olivere/elastic/v7" - "os" -) - -func ClientFromConfig(server *ElasticServer) *elastic.Client { - opts := []elastic.ClientOptionFunc{ - elastic.SetURL(server.URL), - elastic.SetSniff(false), - elastic.SetGzip(true), - } - if server.User != "" && server.Pass != "" { - opts = append(opts, elastic.SetBasicAuth( - server.User, server.Pass, - )) - } - - es, err := elastic.NewClient(opts...) - if err != nil { - fmt.Fprintf(os.Stderr, "Elastic connection error: %s\n", err.Error()) - os.Exit(1) - } - - return es -} diff --git a/index.go b/index.go index d7ea097..5ea333c 100644 --- a/index.go +++ b/index.go @@ -22,10 +22,11 @@ func handleIndexCommand() { listcmd := flag.NewFlagSet("index list", flag.ExitOnError) listcmd.SetOutput(os.Stdout) cfgpath := listcmd.String("config", "", "path to configuration") + server := listcmd.String("server", "", "server name to use") listcmd.Parse(os.Args[3:]) cfg := LoadConfig(*cfgpath) - es := ClientFromConfig(cfg.GetServer("")) + es := cfg.GetClient(*server) indexes, err := es.IndexNames() if err != nil { @@ -41,6 +42,7 @@ func handleIndexCommand() { 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:]) @@ -51,7 +53,7 @@ func handleIndexCommand() { } cfg := LoadConfig(*cfgpath) - es := ClientFromConfig(cfg.GetServer("")) + es := cfg.GetClient(*server) _, err := es.DeleteIndex(*iname).Do(context.Background()) if err != nil { @@ -63,6 +65,7 @@ func handleIndexCommand() { 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") @@ -93,7 +96,8 @@ func handleIndexCommand() { } cfg := LoadConfig(*cfgpath) - es := ClientFromConfig(cfg.GetServer("")) + es := cfg.GetClient(*server) + ics := es.CreateIndex(*iname) if body != "" { ics.Body(body) @@ -108,6 +112,7 @@ func handleIndexCommand() { 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:]) @@ -118,7 +123,8 @@ func handleIndexCommand() { } cfg := LoadConfig(*cfgpath) - es := ClientFromConfig(cfg.GetServer("")) + es := cfg.GetClient(*server) + _, err := es.Refresh(*iname).Do(context.Background()) if err != nil { fmt.Fprintf(os.Stderr, "elastic error: %s\n", err.Error())