v2_admin.go 735 B

123456789101112131415161718192021222324252627282930313233343536
  1. package etcd
  2. import (
  3. "encoding/json"
  4. "net/http"
  5. "github.com/coreos/etcd/store"
  6. )
  7. func (s *Server) serveAdminConfig(w http.ResponseWriter, r *http.Request) error {
  8. switch r.Method {
  9. case "GET":
  10. case "PUT":
  11. if !s.node.IsLeader() {
  12. return s.redirect(w, r, s.node.Leader())
  13. }
  14. c := s.ClusterConfig()
  15. if err := json.NewDecoder(r.Body).Decode(c); err != nil {
  16. return err
  17. }
  18. c.Sanitize()
  19. b, err := json.Marshal(c)
  20. if err != nil {
  21. return err
  22. }
  23. if _, err := s.Set(v2configKVPrefix, false, string(b), store.Permanent); err != nil {
  24. return err
  25. }
  26. default:
  27. return allow(w, "GET", "PUT")
  28. }
  29. w.Header().Set("Content-Type", "application/json")
  30. json.NewEncoder(w).Encode(s.ClusterConfig())
  31. return nil
  32. }