mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
etcd: support v2/machines endpoint
This commit is contained in:
parent
5e486dd912
commit
ac44e56ea0
@ -21,6 +21,7 @@ const (
|
|||||||
|
|
||||||
v2machineKVPrefix = "/_etcd/machines"
|
v2machineKVPrefix = "/_etcd/machines"
|
||||||
v2Prefix = "/v2/keys"
|
v2Prefix = "/v2/keys"
|
||||||
|
v2machinePrefix = "/v2/machines"
|
||||||
|
|
||||||
raftPrefix = "/raft"
|
raftPrefix = "/raft"
|
||||||
)
|
)
|
||||||
@ -73,8 +74,9 @@ func New(c *config.Config, id int) *Server {
|
|||||||
|
|
||||||
m := http.NewServeMux()
|
m := http.NewServeMux()
|
||||||
//m.Handle("/HEAD", handlerErr(s.serveHead))
|
//m.Handle("/HEAD", handlerErr(s.serveHead))
|
||||||
m.Handle("/", handlerErr(s.serveValue))
|
m.Handle(v2Prefix+"/", handlerErr(s.serveValue))
|
||||||
m.Handle("/raft", s.t)
|
m.Handle("/raft", s.t)
|
||||||
|
m.Handle(v2machinePrefix, handlerErr(s.serveMachines))
|
||||||
s.Handler = m
|
s.Handler = m
|
||||||
return s
|
return s
|
||||||
}
|
}
|
||||||
|
@ -27,6 +27,22 @@ func (s *Server) serveValue(w http.ResponseWriter, r *http.Request) error {
|
|||||||
return allow(w, "GET", "PUT", "POST", "DELETE", "HEAD")
|
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
|
type handlerErr func(w http.ResponseWriter, r *http.Request) error
|
||||||
|
|
||||||
func (eh handlerErr) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
func (eh handlerErr) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
|
44
etcd/v2_http_endpoint_test.go
Normal file
44
etcd/v2_http_endpoint_test.go
Normal 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)
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user