member_commands.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. package command
  2. import (
  3. "fmt"
  4. "net/http"
  5. "os"
  6. "strings"
  7. "github.com/coreos/etcd/Godeps/_workspace/src/github.com/codegangsta/cli"
  8. "github.com/coreos/etcd/client"
  9. )
  10. func NewMemberCommand() cli.Command {
  11. return cli.Command{
  12. Name: "member",
  13. Subcommands: []cli.Command{
  14. cli.Command{
  15. Name: "list",
  16. Usage: "enumerate existing cluster members",
  17. Action: actionMemberList,
  18. },
  19. cli.Command{
  20. Name: "add",
  21. Usage: "add a new member to the etcd cluster",
  22. Action: actionMemberAdd,
  23. },
  24. cli.Command{
  25. Name: "remove",
  26. Usage: "remove an existing member from the etcd cluster",
  27. Action: actionMemberRemove,
  28. },
  29. },
  30. }
  31. }
  32. func actionMemberList(c *cli.Context) {
  33. if len(c.Args()) != 0 {
  34. fmt.Fprintln(os.Stderr, "No arguments accepted")
  35. os.Exit(1)
  36. }
  37. mAPI, err := client.NewMembersAPI(&http.Transport{}, "http://127.0.0.1:4001", client.DefaultRequestTimeout)
  38. if err != nil {
  39. fmt.Fprintln(os.Stderr, err.Error())
  40. os.Exit(1)
  41. }
  42. members, err := mAPI.List()
  43. if err != nil {
  44. fmt.Fprintln(os.Stderr, err.Error())
  45. os.Exit(1)
  46. }
  47. for _, m := range members {
  48. fmt.Printf("%s: name=%s peerURLs=%s clientURLs=%s\n", m.ID, m.Name, strings.Join(m.PeerURLs, ","), strings.Join(m.ClientURLs, ","))
  49. }
  50. }
  51. func actionMemberAdd(c *cli.Context) {
  52. args := c.Args()
  53. if len(args) != 1 {
  54. fmt.Fprintln(os.Stderr, "Provide a single member peerURL")
  55. os.Exit(1)
  56. }
  57. mAPI, err := client.NewMembersAPI(&http.Transport{}, "http://127.0.0.1:4001", client.DefaultRequestTimeout)
  58. if err != nil {
  59. fmt.Fprintln(os.Stderr, err.Error())
  60. os.Exit(1)
  61. }
  62. url := args[0]
  63. m, err := mAPI.Add(url)
  64. if err != nil {
  65. fmt.Fprintln(os.Stderr, err.Error())
  66. os.Exit(1)
  67. }
  68. fmt.Printf("Added member to cluster with ID %s", m.ID)
  69. }
  70. func actionMemberRemove(c *cli.Context) {
  71. args := c.Args()
  72. if len(args) != 1 {
  73. fmt.Fprintln(os.Stderr, "Provide a single member ID")
  74. os.Exit(1)
  75. }
  76. mAPI, err := client.NewMembersAPI(&http.Transport{}, "http://127.0.0.1:4001", client.DefaultRequestTimeout)
  77. if err != nil {
  78. fmt.Fprintln(os.Stderr, err.Error())
  79. os.Exit(1)
  80. }
  81. mID := args[0]
  82. if err := mAPI.Remove(mID); err != nil {
  83. fmt.Fprintln(os.Stderr, err.Error())
  84. os.Exit(1)
  85. }
  86. fmt.Printf("Removed member %s from cluster\n", mID)
  87. }