member_commands.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  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 mustNewMembersAPI(c *cli.Context) client.MembersAPI {
  33. mAPI, err := client.NewMembersAPI(&http.Transport{}, []string{"http://127.0.0.1:4001"}, client.DefaultRequestTimeout)
  34. if err != nil {
  35. fmt.Fprintln(os.Stderr, err.Error())
  36. os.Exit(1)
  37. }
  38. return mAPI
  39. }
  40. func actionMemberList(c *cli.Context) {
  41. if len(c.Args()) != 0 {
  42. fmt.Fprintln(os.Stderr, "No arguments accepted")
  43. os.Exit(1)
  44. }
  45. mAPI := mustNewMembersAPI(c)
  46. members, err := mAPI.List()
  47. if err != nil {
  48. fmt.Fprintln(os.Stderr, err.Error())
  49. os.Exit(1)
  50. }
  51. for _, m := range members {
  52. fmt.Printf("%s: name=%s peerURLs=%s clientURLs=%s\n", m.ID, m.Name, strings.Join(m.PeerURLs, ","), strings.Join(m.ClientURLs, ","))
  53. }
  54. }
  55. func actionMemberAdd(c *cli.Context) {
  56. args := c.Args()
  57. if len(args) != 1 {
  58. fmt.Fprintln(os.Stderr, "Provide a single member peerURL")
  59. os.Exit(1)
  60. }
  61. mAPI := mustNewMembersAPI(c)
  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 := mustNewMembersAPI(c)
  77. mID := args[0]
  78. if err := mAPI.Remove(mID); err != nil {
  79. fmt.Fprintln(os.Stderr, err.Error())
  80. os.Exit(1)
  81. }
  82. fmt.Printf("Removed member %s from cluster\n", mID)
  83. }