wip: service registration
Signed-off-by: Evan Hazlett <ejhazlett@gmail.com>
This commit is contained in:
parent
a89aa40dda
commit
1dd748e3f2
461 changed files with 51962 additions and 76 deletions
|
@ -1,24 +0,0 @@
|
|||
package server
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"net/http"
|
||||
|
||||
"github.com/ehazlett/element/proxy"
|
||||
)
|
||||
|
||||
func (s *Server) addFrontend(w http.ResponseWriter, r *http.Request) {
|
||||
var frontend *proxy.Frontend
|
||||
if err := json.NewDecoder(r.Body).Decode(&frontend); err != nil {
|
||||
http.Error(w, fmt.Sprintf("invalid fronend: %s", err), http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
if err := s.proxy.AddFrontend(frontend); err != nil {
|
||||
http.Error(w, fmt.Sprintf("error adding frontend: %s", err), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
w.WriteHeader(http.StatusOK)
|
||||
}
|
51
server/frontend.go
Normal file
51
server/frontend.go
Normal file
|
@ -0,0 +1,51 @@
|
|||
package server
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"net/http"
|
||||
|
||||
"github.com/ehazlett/element/proxy"
|
||||
"github.com/gorilla/mux"
|
||||
)
|
||||
|
||||
func (s *Server) addFrontend(w http.ResponseWriter, r *http.Request) {
|
||||
var frontend *proxy.Frontend
|
||||
if err := json.NewDecoder(r.Body).Decode(&frontend); err != nil {
|
||||
http.Error(w, fmt.Sprintf("invalid fronend: %s", err), http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
if err := s.proxy.AddFrontend(frontend); err != nil {
|
||||
http.Error(w, fmt.Sprintf("error adding frontend: %s", err), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
w.WriteHeader(http.StatusOK)
|
||||
}
|
||||
|
||||
func (s *Server) removeFrontend(w http.ResponseWriter, r *http.Request) {
|
||||
vars := mux.Vars(r)
|
||||
name := vars["name"]
|
||||
if err := s.proxy.RemoveFrontend(name); err != nil {
|
||||
http.Error(w, fmt.Sprintf("error removing frontend: %s", err), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
w.WriteHeader(http.StatusOK)
|
||||
}
|
||||
|
||||
func (s *Server) updateFrontend(w http.ResponseWriter, r *http.Request) {
|
||||
var frontend *proxy.Frontend
|
||||
if err := json.NewDecoder(r.Body).Decode(&frontend); err != nil {
|
||||
http.Error(w, fmt.Sprintf("invalid fronend: %s", err), http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
if err := s.proxy.UpdateFrontend(frontend); err != nil {
|
||||
http.Error(w, fmt.Sprintf("error adding frontend: %s", err), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
w.WriteHeader(http.StatusOK)
|
||||
}
|
|
@ -11,7 +11,7 @@ func (s *Server) genericHandler(w http.ResponseWriter, r *http.Request) {
|
|||
logrus.WithFields(logrus.Fields{
|
||||
"host": r.Host,
|
||||
"uri": r.RequestURI,
|
||||
}).Debug("new domain request")
|
||||
}).Debug("request")
|
||||
|
||||
// TODO: check and / or configure backend container
|
||||
time.Sleep(time.Millisecond * 1000)
|
||||
|
|
|
@ -1,19 +0,0 @@
|
|||
package server
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
|
||||
"github.com/gorilla/mux"
|
||||
)
|
||||
|
||||
func (s *Server) removeFrontend(w http.ResponseWriter, r *http.Request) {
|
||||
vars := mux.Vars(r)
|
||||
name := vars["name"]
|
||||
if err := s.proxy.RemoveFrontend(name); err != nil {
|
||||
http.Error(w, fmt.Sprintf("error removing frontend: %s", err), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
w.WriteHeader(http.StatusOK)
|
||||
}
|
|
@ -10,6 +10,8 @@ func (s *Server) router() *mux.Router {
|
|||
r.HandleFunc("/frontends", s.addFrontend).Methods("POST")
|
||||
r.HandleFunc("/frontends", s.updateFrontend).Methods("PUT")
|
||||
r.HandleFunc("/frontends/{name}", s.removeFrontend).Methods("DELETE")
|
||||
r.HandleFunc("/services", s.registerService).Methods("POST")
|
||||
r.HandleFunc("/services", s.getServices).Methods("GET")
|
||||
r.HandleFunc("/reload", s.reload).Methods("POST")
|
||||
|
||||
return r
|
||||
|
|
31
server/runtime.go
Normal file
31
server/runtime.go
Normal file
|
@ -0,0 +1,31 @@
|
|||
package server
|
||||
|
||||
import (
|
||||
"errors"
|
||||
|
||||
"github.com/ehazlett/element/config"
|
||||
"github.com/ehazlett/element/runtime"
|
||||
"github.com/ehazlett/element/runtime/docker"
|
||||
)
|
||||
|
||||
var (
|
||||
ErrInvalidRuntime = errors.New("invalid runtime specified")
|
||||
)
|
||||
|
||||
// loadRuntime loads a runtime from the specified configuration
|
||||
func loadRuntime(cfg *config.Runtime) (runtime.Runtime, error) {
|
||||
var rt runtime.Runtime
|
||||
|
||||
switch cfg.Name {
|
||||
case "docker":
|
||||
r, err := docker.New()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
rt = r
|
||||
default:
|
||||
return nil, ErrInvalidRuntime
|
||||
}
|
||||
|
||||
return rt, nil
|
||||
}
|
|
@ -9,12 +9,14 @@ import (
|
|||
|
||||
"github.com/ehazlett/element/config"
|
||||
"github.com/ehazlett/element/proxy"
|
||||
"github.com/ehazlett/element/runtime"
|
||||
"github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
type Server struct {
|
||||
cfg *config.Config
|
||||
proxy *proxy.Proxy
|
||||
cfg *config.Config
|
||||
proxy *proxy.Proxy
|
||||
runtime runtime.Runtime
|
||||
}
|
||||
|
||||
func NewServer(cfg *config.Config) (*Server, error) {
|
||||
|
@ -22,9 +24,24 @@ func NewServer(cfg *config.Config) (*Server, error) {
|
|||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
r, err := loadRuntime(cfg.Runtime)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
c, err := r.List("")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
logrus.WithFields(logrus.Fields{
|
||||
"containers": c,
|
||||
}).Debug("runtime containers")
|
||||
|
||||
return &Server{
|
||||
cfg: cfg,
|
||||
proxy: p,
|
||||
cfg: cfg,
|
||||
proxy: p,
|
||||
runtime: r,
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
@ -70,10 +87,12 @@ func (s *Server) Run() error {
|
|||
return err
|
||||
}
|
||||
|
||||
// handle SIGHUP
|
||||
c := make(chan os.Signal, 1)
|
||||
signal.Notify(c, syscall.SIGHUP)
|
||||
go func() {
|
||||
for range c {
|
||||
logrus.Debugf("received SIGHUP; reloading")
|
||||
if err := s.proxy.Reload(); err != nil {
|
||||
logrus.Errorf("error reloading proxy: %s", err)
|
||||
}
|
||||
|
|
11
server/service.go
Normal file
11
server/service.go
Normal file
|
@ -0,0 +1,11 @@
|
|||
package server
|
||||
|
||||
import "net/http"
|
||||
|
||||
func (s *Server) getServices(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
}
|
||||
|
||||
func (s *Server) registerService(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
}
|
|
@ -1,24 +0,0 @@
|
|||
package server
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"net/http"
|
||||
|
||||
"github.com/ehazlett/element/proxy"
|
||||
)
|
||||
|
||||
func (s *Server) updateFrontend(w http.ResponseWriter, r *http.Request) {
|
||||
var frontend *proxy.Frontend
|
||||
if err := json.NewDecoder(r.Body).Decode(&frontend); err != nil {
|
||||
http.Error(w, fmt.Sprintf("invalid fronend: %s", err), http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
if err := s.proxy.UpdateFrontend(frontend); err != nil {
|
||||
http.Error(w, fmt.Sprintf("error adding frontend: %s", err), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
w.WriteHeader(http.StatusOK)
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue