first compilable version
This commit is contained in:
parent
6fda229a8e
commit
fc1912bfa9
10 changed files with 188 additions and 88 deletions
|
|
@ -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, "")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ import (
|
|||
|
||||
const v1 = "/" + schemav1.Version
|
||||
|
||||
var routes = []types.Route{
|
||||
var Routes = []types.Route{
|
||||
{
|
||||
"/healthz",
|
||||
healthzHandler,
|
||||
|
|
|
|||
|
|
@ -45,22 +45,23 @@ func NewLBController(cfg *config.Config, srv *api.Server, log logr.Logger) (call
|
|||
cc.Info("leading", "id", cc.ID())
|
||||
ips, err := db.GetIPs()
|
||||
if err != nil {
|
||||
cc.Error("error updating haproxy config", err)
|
||||
cc.Error(err, "error updating haproxy config")
|
||||
<-t.C
|
||||
continue
|
||||
}
|
||||
addIPs(cc, n, ips)
|
||||
|
||||
cfg, err := cc.Get("config")
|
||||
if err != nil {
|
||||
cc.Error("error getting config key", err)
|
||||
<-t.C
|
||||
continue
|
||||
}
|
||||
// TODO
|
||||
//cfg, err := cc.Get("config")
|
||||
//if err != nil {
|
||||
// cc.Error(err, "error getting config key")
|
||||
// <-t.C
|
||||
// continue
|
||||
//}
|
||||
var lbs haproxy.Config
|
||||
err = ha.UpdateConfig(ctx, lbs)
|
||||
if err != nil {
|
||||
cc.Error("error updating haproxy config", err)
|
||||
cc.Error(err, "error updating haproxy config")
|
||||
<-t.C
|
||||
continue
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,9 +6,8 @@ import (
|
|||
"strings"
|
||||
|
||||
"git.giftfish.de/ston1th/haproxy-lb/pkg/cluster"
|
||||
//"go.etcd.io/etcd/clientv3"
|
||||
"github.com/coreos/etcd/clientv3"
|
||||
"github.com/go-logr/logr"
|
||||
clientv3 "go.etcd.io/etcd/client/v3"
|
||||
)
|
||||
|
||||
var (
|
||||
|
|
|
|||
|
|
@ -8,11 +8,10 @@ import (
|
|||
|
||||
"git.giftfish.de/ston1th/haproxy-lb/pkg/config"
|
||||
"git.giftfish.de/ston1th/haproxy-lb/pkg/util"
|
||||
"github.com/coreos/etcd/clientv3"
|
||||
clientv3 "go.etcd.io/etcd/client/v3"
|
||||
"go.etcd.io/etcd/client/v3/concurrency"
|
||||
"go.uber.org/zap"
|
||||
"go.uber.org/zap/zapcore"
|
||||
//"go.etcd.io/etcd/clientv3"
|
||||
"go.etcd.io/etcd/clientv3/concurrency"
|
||||
)
|
||||
|
||||
func (c *Cluster) Start(etcdcfg *config.Config) error {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue