a command line interface for elastic (work in progress)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

166 lines
4.5 KiB

  1. package main
  2. import (
  3. "context"
  4. "flag"
  5. "fmt"
  6. "os"
  7. "strings"
  8. )
  9. func handleAliasCommand() {
  10. if len(os.Args) < 3 {
  11. fmt.Fprintf(os.Stderr, "%s alias: subcommand missing\n", os.Args[0])
  12. printAliasUsage()
  13. os.Exit(1)
  14. }
  15. subcmd := strings.ToLower(os.Args[2])
  16. switch subcmd {
  17. case "list":
  18. listcmd := flag.NewFlagSet("alias list", flag.ExitOnError)
  19. listcmd.SetOutput(os.Stdout)
  20. cfgpath := listcmd.String("config", "", "path to configuration")
  21. aname := listcmd.String("name", "", "filter list to named alias")
  22. listcmd.Parse(os.Args[3:])
  23. cfg := LoadConfig(*cfgpath)
  24. es := ClientFromConfig(cfg.Elastic)
  25. aliases, err := es.CatAliases().Do(context.Background())
  26. if err != nil {
  27. fmt.Fprintf(os.Stderr, "elastic error: %s\n", err.Error())
  28. os.Exit(1)
  29. }
  30. for _, alias := range aliases {
  31. if *aname != "" {
  32. if alias.Alias == *aname {
  33. fmt.Printf("%s\n", alias.Index)
  34. }
  35. } else {
  36. fmt.Printf("%s %s\n", alias.Alias, alias.Index)
  37. }
  38. }
  39. case "create":
  40. createcmd := flag.NewFlagSet("alias create", flag.ExitOnError)
  41. createcmd.SetOutput(os.Stdout)
  42. cfgpath := createcmd.String("config", "", "path to configuration")
  43. aname := createcmd.String("name", "", "(required) name of alias")
  44. iname := createcmd.String("index", "", "(required) name of index")
  45. createcmd.Parse(os.Args[3:])
  46. if *aname == "" {
  47. fmt.Fprintf(os.Stderr, "name parameter is required for alias create\n")
  48. createcmd.PrintDefaults()
  49. os.Exit(1)
  50. }
  51. if *iname == "" {
  52. fmt.Fprintf(os.Stderr, "index parameter is required for alias create\n")
  53. createcmd.PrintDefaults()
  54. os.Exit(1)
  55. }
  56. cfg := LoadConfig(*cfgpath)
  57. es := ClientFromConfig(cfg.Elastic)
  58. _, err := es.Alias().Add(*iname, *aname).Do(context.Background())
  59. if err != nil {
  60. fmt.Fprintf(os.Stderr, "elastic error: %s\n", err.Error())
  61. os.Exit(1)
  62. }
  63. case "delete":
  64. deletecmd := flag.NewFlagSet("alias delete", flag.ExitOnError)
  65. deletecmd.SetOutput(os.Stdout)
  66. cfgpath := deletecmd.String("config", "", "path to configuration")
  67. aname := deletecmd.String("name", "", "(required) name of alias")
  68. iname := deletecmd.String("index", "", "(required) name of index")
  69. deletecmd.Parse(os.Args[3:])
  70. if *aname == "" {
  71. fmt.Fprintf(os.Stderr, "name parameter is required for alias delete\n")
  72. deletecmd.PrintDefaults()
  73. os.Exit(1)
  74. }
  75. if *iname == "" {
  76. fmt.Fprintf(os.Stderr, "index parameter is required for alias delete\n")
  77. deletecmd.PrintDefaults()
  78. os.Exit(1)
  79. }
  80. cfg := LoadConfig(*cfgpath)
  81. es := ClientFromConfig(cfg.Elastic)
  82. _, err := es.Alias().Remove(*iname, *aname).Do(context.Background())
  83. if err != nil {
  84. fmt.Fprintf(os.Stderr, "elastic error: %s\n", err.Error())
  85. os.Exit(1)
  86. }
  87. case "replace":
  88. replacecmd := flag.NewFlagSet("alias replace", flag.ExitOnError)
  89. replacecmd.SetOutput(os.Stdout)
  90. cfgpath := replacecmd.String("config", "", "path to configuration")
  91. aname := replacecmd.String("name", "", "(required) name of alias")
  92. oiname := replacecmd.String("oldindex", "",
  93. "(required) name of the old index")
  94. niname := replacecmd.String("newindex", "",
  95. "(required) name of the new index")
  96. replacecmd.Parse(os.Args[3:])
  97. if *aname == "" {
  98. fmt.Fprintf(os.Stderr, "name parameter is required for alias replace\n")
  99. replacecmd.PrintDefaults()
  100. os.Exit(1)
  101. }
  102. if *oiname == "" {
  103. fmt.Fprintf(os.Stderr,
  104. "oldindex parameter is required for alias replace\n")
  105. replacecmd.PrintDefaults()
  106. os.Exit(1)
  107. }
  108. if *niname == "" {
  109. fmt.Fprintf(os.Stderr,
  110. "newindex parameter is required for alias replace\n")
  111. replacecmd.PrintDefaults()
  112. os.Exit(1)
  113. }
  114. cfg := LoadConfig(*cfgpath)
  115. es := ClientFromConfig(cfg.Elastic)
  116. _, err := es.Alias().
  117. Remove(*oiname, *aname).
  118. Add(*niname, *aname).
  119. Do(context.Background())
  120. if err != nil {
  121. fmt.Fprintf(os.Stderr, "elastic error: %s\n", err.Error())
  122. os.Exit(1)
  123. }
  124. case "--help":
  125. printAliasUsage()
  126. os.Exit(0)
  127. default:
  128. fmt.Fprintf(os.Stderr, "%s: alias '%s' is not a recognized subcommand\n",
  129. os.Args[0], os.Args[2])
  130. printAliasUsage()
  131. os.Exit(1)
  132. }
  133. }
  134. func printAliasUsage() {
  135. fmt.Printf("Usage: %s alias <subcommand> ... \n", os.Args[0])
  136. fmt.Printf("See '%s alias <subcommand> --help' for information", os.Args[0])
  137. fmt.Printf(" on a specific command\n")
  138. fmt.Printf("valid subcommands:\n")
  139. fmt.Printf(" list list aliases\n")
  140. fmt.Printf(" create create alias\n")
  141. fmt.Printf(" delete delete alias\n")
  142. fmt.Printf(" replace replace alias (single step add/remove)\n")
  143. }