etcd_server.go 885 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. package main
  2. import (
  3. "net/http"
  4. "net/url"
  5. )
  6. type etcdServer struct {
  7. http.Server
  8. name string
  9. url string
  10. tlsConf *TLSConfig
  11. tlsInfo *TLSInfo
  12. }
  13. var e *etcdServer
  14. func newEtcdServer(name string, urlStr string, tlsConf *TLSConfig, tlsInfo *TLSInfo) *etcdServer {
  15. u, err := url.Parse(urlStr)
  16. if err != nil {
  17. fatalf("invalid url '%s': %s", e.url, err)
  18. }
  19. return &etcdServer{
  20. Server: http.Server{
  21. Handler: NewEtcdMuxer(),
  22. TLSConfig: &tlsConf.Server,
  23. Addr: u.Host,
  24. },
  25. name: name,
  26. url: urlStr,
  27. tlsConf: tlsConf,
  28. tlsInfo: tlsInfo,
  29. }
  30. }
  31. // Start to listen and response etcd client command
  32. func (e *etcdServer) ListenAndServe() {
  33. infof("etcd server [%s:%s]", e.name, e.url)
  34. if e.tlsConf.Scheme == "http" {
  35. fatal(e.Server.ListenAndServe())
  36. } else {
  37. fatal(e.Server.ListenAndServeTLS(e.tlsInfo.CertFile, e.tlsInfo.KeyFile))
  38. }
  39. }