etcd: support v2/machines endpoint

release-2.0
Xiang Li 2014-07-07 12:08:49 -07:00 committed by Yicheng Qin
parent 5e486dd912
commit ac44e56ea0
4 changed files with 63 additions and 1 deletions

View File

@ -21,6 +21,7 @@ const (
v2machineKVPrefix = "/_etcd/machines"
v2Prefix = "/v2/keys"
v2machinePrefix = "/v2/machines"
raftPrefix = "/raft"
)
@ -73,8 +74,9 @@ func New(c *config.Config, id int) *Server {
m := http.NewServeMux()
//m.Handle("/HEAD", handlerErr(s.serveHead))
m.Handle("/", handlerErr(s.serveValue))
m.Handle(v2Prefix+"/", handlerErr(s.serveValue))
m.Handle("/raft", s.t)
m.Handle(v2machinePrefix, handlerErr(s.serveMachines))
s.Handler = m
return s
}

View File

@ -27,6 +27,22 @@ func (s *Server) serveValue(w http.ResponseWriter, r *http.Request) error {
return allow(w, "GET", "PUT", "POST", "DELETE", "HEAD")
}
func (s *Server) serveMachines(w http.ResponseWriter, r *http.Request) error {
if r.Method != "GET" {
return allow(w, "GET")
}
v, err := s.Store.Get(v2machineKVPrefix, false, false)
if err != nil {
panic(err)
}
ns := make([]string, len(v.Node.Nodes))
for i, n := range v.Node.Nodes {
ns[i] = *n.Value
}
w.Write([]byte(strings.Join(ns, ",")))
return nil
}
type handlerErr func(w http.ResponseWriter, r *http.Request) error
func (eh handlerErr) ServeHTTP(w http.ResponseWriter, r *http.Request) {

View File

@ -0,0 +1,44 @@
package etcd
import (
"io/ioutil"
"net/http"
"strings"
"testing"
)
func TestMachinesEndPoint(t *testing.T) {
es, hs := buildCluster(3)
waitCluster(t, es)
us := make([]string, len(hs))
for i := range hs {
us[i] = hs[i].URL
}
w := strings.Join(us, ",")
for i := range hs {
r, err := http.Get(hs[i].URL + v2machinePrefix)
if err != nil {
t.Errorf("%v", err)
break
}
b, err := ioutil.ReadAll(r.Body)
r.Body.Close()
if err != nil {
t.Errorf("%v", err)
break
}
if string(b) != w {
t.Errorf("machines = %v, want %v", string(b), w)
}
}
for i := range es {
es[len(es)-i-1].Stop()
}
for i := range hs {
hs[len(hs)-i-1].Close()
}
afterTest(t)
}