v2http: put back /v2/machines and mark as non-deprecated
This reverts commit 2bb33181b6
. python-etcd
seems to depend on /v2/machines and the maintainer vanished. Plus, it is
prefixed with /v2/ so it probably can't be deprecated anyway.
release-3.3
parent
29911195de
commit
c2dadbd9f8
|
@ -46,15 +46,16 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
authPrefix = "/v2/auth"
|
authPrefix = "/v2/auth"
|
||||||
keysPrefix = "/v2/keys"
|
keysPrefix = "/v2/keys"
|
||||||
membersPrefix = "/v2/members"
|
machinesPrefix = "/v2/machines"
|
||||||
statsPrefix = "/v2/stats"
|
membersPrefix = "/v2/members"
|
||||||
varsPath = "/debug/vars"
|
statsPrefix = "/v2/stats"
|
||||||
metricsPath = "/metrics"
|
varsPath = "/debug/vars"
|
||||||
healthPath = "/health"
|
metricsPath = "/metrics"
|
||||||
versionPath = "/version"
|
healthPath = "/health"
|
||||||
configPath = "/config"
|
versionPath = "/version"
|
||||||
|
configPath = "/config"
|
||||||
)
|
)
|
||||||
|
|
||||||
// NewClientHandler generates a muxed http.Handler with the given parameters to serve etcd client requests.
|
// NewClientHandler generates a muxed http.Handler with the given parameters to serve etcd client requests.
|
||||||
|
@ -83,6 +84,8 @@ func NewClientHandler(server *etcdserver.EtcdServer, timeout time.Duration) http
|
||||||
clientCertAuthEnabled: server.Cfg.ClientCertAuthEnabled,
|
clientCertAuthEnabled: server.Cfg.ClientCertAuthEnabled,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mah := &machinesHandler{cluster: server.Cluster()}
|
||||||
|
|
||||||
sech := &authHandler{
|
sech := &authHandler{
|
||||||
sec: sec,
|
sec: sec,
|
||||||
cluster: server.Cluster(),
|
cluster: server.Cluster(),
|
||||||
|
@ -103,6 +106,7 @@ func NewClientHandler(server *etcdserver.EtcdServer, timeout time.Duration) http
|
||||||
mux.Handle(metricsPath, prometheus.Handler())
|
mux.Handle(metricsPath, prometheus.Handler())
|
||||||
mux.Handle(membersPrefix, mh)
|
mux.Handle(membersPrefix, mh)
|
||||||
mux.Handle(membersPrefix+"/", mh)
|
mux.Handle(membersPrefix+"/", mh)
|
||||||
|
mux.Handle(machinesPrefix, mah)
|
||||||
handleAuth(mux, sech)
|
handleAuth(mux, sech)
|
||||||
|
|
||||||
return requestLogger(mux)
|
return requestLogger(mux)
|
||||||
|
@ -164,6 +168,18 @@ func (h *keysHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type machinesHandler struct {
|
||||||
|
cluster api.Cluster
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h *machinesHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
|
if !allowMethod(w, r.Method, "GET", "HEAD") {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
endpoints := h.cluster.ClientURLs()
|
||||||
|
w.Write([]byte(strings.Join(endpoints, ", ")))
|
||||||
|
}
|
||||||
|
|
||||||
type membersHandler struct {
|
type membersHandler struct {
|
||||||
sec auth.Store
|
sec auth.Store
|
||||||
server etcdserver.Server
|
server etcdserver.Server
|
||||||
|
|
|
@ -1220,6 +1220,56 @@ func TestWriteEvent(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestV2DMachinesEndpoint(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
method string
|
||||||
|
wcode int
|
||||||
|
}{
|
||||||
|
{"GET", http.StatusOK},
|
||||||
|
{"HEAD", http.StatusOK},
|
||||||
|
{"POST", http.StatusMethodNotAllowed},
|
||||||
|
}
|
||||||
|
|
||||||
|
m := &machinesHandler{cluster: &fakeCluster{}}
|
||||||
|
s := httptest.NewServer(m)
|
||||||
|
defer s.Close()
|
||||||
|
|
||||||
|
for _, tt := range tests {
|
||||||
|
req, err := http.NewRequest(tt.method, s.URL+machinesPrefix, nil)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
resp, err := http.DefaultClient.Do(req)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if resp.StatusCode != tt.wcode {
|
||||||
|
t.Errorf("StatusCode = %d, expected %d", resp.StatusCode, tt.wcode)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestServeMachines(t *testing.T) {
|
||||||
|
cluster := &fakeCluster{
|
||||||
|
clientURLs: []string{"http://localhost:8080", "http://localhost:8081", "http://localhost:8082"},
|
||||||
|
}
|
||||||
|
writer := httptest.NewRecorder()
|
||||||
|
req, err := http.NewRequest("GET", "", nil)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
h := &machinesHandler{cluster: cluster}
|
||||||
|
h.ServeHTTP(writer, req)
|
||||||
|
w := "http://localhost:8080, http://localhost:8081, http://localhost:8082"
|
||||||
|
if g := writer.Body.String(); g != w {
|
||||||
|
t.Errorf("body = %s, want %s", g, w)
|
||||||
|
}
|
||||||
|
if writer.Code != http.StatusOK {
|
||||||
|
t.Errorf("code = %d, want %d", writer.Code, http.StatusOK)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestGetID(t *testing.T) {
|
func TestGetID(t *testing.T) {
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
path string
|
path string
|
||||||
|
|
Loading…
Reference in New Issue