package main import ( "context" "flag" "fmt" "os" "io/ioutil" "strings" ) func handleIndexCommand() { if len(os.Args) < 3 { fmt.Fprintf(os.Stderr, "%s index: subcommand missing\n", os.Args[0]) printIndexUsage() os.Exit(1) } subcmd := strings.ToLower(os.Args[2]) switch subcmd { case "list": listcmd := flag.NewFlagSet("index list", flag.ExitOnError) listcmd.SetOutput(os.Stdout) cfgpath := listcmd.String("config", "", "path to configuration") listcmd.Parse(os.Args[3:]) cfg := LoadConfig(*cfgpath) es := ClientFromConfig(cfg.Elastic) indexes, err := es.IndexNames() if err != nil { fmt.Fprintf(os.Stderr, "elastic error: %s\n", err.Error()) os.Exit(1) } for _, index := range indexes { fmt.Printf("%s\n", index) } case "delete": deletecmd := flag.NewFlagSet("index delete", flag.ExitOnError) deletecmd.SetOutput(os.Stdout) cfgpath := deletecmd.String("config", "", "path to configuration") 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() os.Exit(1) } cfg := LoadConfig(*cfgpath) es := ClientFromConfig(cfg.Elastic) _, err := es.DeleteIndex(*iname).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") 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() os.Exit(1) } if *bodystr != "" && *bodyfile != "" { fmt.Fprintf(os.Stderr, "body parameter cannot be used with bodyfile parameter\n") os.Exit(1) } body := *bodystr if *bodyfile != "" { raw, err := ioutil.ReadFile(*bodyfile) if err != nil { fmt.Fprintf(os.Stderr, "read error: %s\n", err.Error()) os.Exit(1) } body = string(raw) } cfg := LoadConfig(*cfgpath) es := ClientFromConfig(cfg.Elastic) ics := es.CreateIndex(*iname) if body != "" { ics.Body(body) } _, err := ics.Do(context.Background()) if err != nil { fmt.Fprintf(os.Stderr, "elastic error: %s\n", err.Error()) os.Exit(1) } case "--help": printIndexUsage() os.Exit(0) default: fmt.Fprintf(os.Stderr, "%s: index '%s' is not a recognized subcommand\n", os.Args[0], os.Args[2]) printDefaultUsage() os.Exit(1) } } func printIndexUsage() { fmt.Printf("Usage: %s index ... \n", os.Args[0]) fmt.Printf("See '%s index --help' for information", os.Args[0]) fmt.Printf(" on a specific command\n") fmt.Printf("valid subcommands:\n") fmt.Printf(" list list indexes\n") fmt.Printf(" delete delete index\n") fmt.Printf(" create create index\n") }