first compilable version

This commit is contained in:
ston1th 2021-03-07 12:24:34 +01:00
commit fc1912bfa9
10 changed files with 188 additions and 88 deletions

View file

@ -2,7 +2,7 @@ package api
import (
"context"
stdtls "crypto/tls"
//stdtls "crypto/tls"
"net"
"net/http"
"time"
@ -23,11 +23,9 @@ type Server struct {
mux *mux.Router
log logr.Logger
Alloc *alloc.Alloc
DB *db.DB
Data *types.ContextData
cidrs []string
gw string
Auth []config.BasicAuth
init chan struct{}
stop chan struct{}
@ -43,17 +41,19 @@ type notFoundHandler struct {
}
func (nf *notFoundHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
types.NewContext(w, r, nf.s).NotFound()
types.NewContext(w, r, nf.s.Data, nf.s.log).NotFound()
}
// NewHTTPServer returns a new HTTPServer
func NewServer(c *config.Config, log logr.Logger) *Server {
s := &Server{
mux: mux.NewRouter(),
log: log.WithName("api"),
log: log,
cidrs: c.VIP.VirtualIPs,
gw: c.VIP.Gateway,
Auth: c.Server.BasicAuth,
Data: &types.ContextData{
Auth: c.Server.BasicAuth,
},
init: make(chan struct{}),
stop: make(chan struct{}),
@ -72,35 +72,35 @@ func NewServer(c *config.Config, log logr.Logger) *Server {
}
func (s *Server) UpdateDB(db *db.DB) error {
s.db = db
if s.Alloc == nil {
s.Data.DB = db
if s.Data.Alloc == nil {
alloc, err := alloc.NewAlloc(db, s.cidrs, s.gw)
if err != nil {
return err
}
s.alloc = alloc
s.Data.Alloc = alloc
close(s.init)
} else {
s.Alloc.UpdateDB(db)
s.Data.Alloc.UpdateDB(db)
}
return nil
}
func (s *Server) start() error {
<-s.init
l, err := net.Listen("tcp", h.laddr)
l, err := net.Listen("tcp", s.laddr)
if err != nil {
return err
}
// TODO tls config
h.srv = &http.Server{
Handler: h.mux,
TLSConfig: cfg,
s.srv = &http.Server{
Handler: s.mux,
//TLSConfig: cfg,
ReadTimeout: 10 * time.Second,
WriteTimeout: 10 * time.Second,
}
go func() {
err := h.srv.Serve(l)
err := s.srv.Serve(l)
if err != nil {
s.log.Error(err, "")
}
@ -110,7 +110,7 @@ func (s *Server) start() error {
func (s *Server) contextWrapper(h types.CtxHandler) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
h(types.NewContext(w, r, s))
h(types.NewContext(w, r, s.Data, s.log))
}
}
@ -119,7 +119,7 @@ func (s *Server) Stop() {
s.log.Info("stopping")
ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
defer cancel()
err := h.srv.Shutdown(ctx)
err := s.srv.Shutdown(ctx)
if err != nil {
s.log.Error(err, "")
}

View file

@ -6,15 +6,26 @@ import (
"github.com/go-logr/logr"
"github.com/gorilla/mux"
"git.giftfish.de/ston1th/haproxy-lb/pkg/alloc"
"git.giftfish.de/ston1th/haproxy-lb/pkg/config"
"git.giftfish.de/ston1th/haproxy-lb/pkg/db"
)
func NewContext(w http.ResponseWriter, r *http.Request, log logr.Logger) *Context {
type ContextData struct {
Alloc *alloc.Alloc
DB *db.DB
Auth []config.BasicAuth
}
func NewContext(w http.ResponseWriter, r *http.Request, data *ContextData, log logr.Logger) *Context {
h := w.Header()
h.Set("Content-Type", "application/json")
return &Context{
Status: http.StatusOK,
Request: r,
Response: w,
Data: data,
logger: log,
}
}
@ -26,7 +37,9 @@ type Context struct {
Request *http.Request
Response http.ResponseWriter
logger logr.Logger
Data *ContextData
logger logr.Logger
}
// Method returns the request method

View file

@ -7,7 +7,7 @@ import (
const v1 = "/" + schemav1.Version
var routes = []types.Route{
var Routes = []types.Route{
{
"/healthz",
healthzHandler,