added netbox allocator

This commit is contained in:
ston1th 2021-10-12 21:45:19 +02:00
commit cef74df3e8
10 changed files with 195 additions and 53 deletions

View file

@ -13,6 +13,7 @@ import (
"git.giftfish.de/ston1th/haproxy-lb/pkg/db"
"git.giftfish.de/ston1th/netalloc"
"git.giftfish.de/ston1th/netalloc/netbox"
"github.com/go-logr/logr"
"github.com/gorilla/mux"
@ -25,7 +26,6 @@ type Server struct {
log logr.Logger
Data *types.ContextData
cidr string
init chan struct{}
stop chan struct{}
@ -33,6 +33,9 @@ type Server struct {
tlsConfig *tls.Config
listen net.Listener
prefix string
store config.Store
}
type notFoundHandler struct {
@ -48,17 +51,19 @@ func NewServer(c *config.Config, log logr.Logger) (*Server, error) {
s := &Server{
mux: mux.NewRouter(),
log: log,
cidr: c.VIP.Prefix,
Data: &types.ContextData{},
init: make(chan struct{}),
stop: make(chan struct{}),
stopKeyReset: make(chan struct{}),
}
s.Data.Auth = types.NewAuth(c.Server.BasicAuth)
if c.Server.TLS != nil {
cert, err := tls.LoadX509KeyPair(c.Server.TLS.Cert, c.Server.TLS.Key)
prefix: c.VIP.Prefix,
store: c.VIP.Store,
}
s.Data.Auth = types.NewAuth(c.APIServer.BasicAuth)
if c.APIServer.TLS != nil {
cert, err := tls.LoadX509KeyPair(c.APIServer.TLS.Cert, c.APIServer.TLS.Key)
if err != nil {
return nil, err
}
@ -83,13 +88,13 @@ func NewServer(c *config.Config, log logr.Logger) (*Server, error) {
PreferServerCipherSuites: true,
Certificates: []tls.Certificate{cert},
}
l, err := tls.Listen("tcp", c.Server.Listen, s.tlsConfig)
l, err := tls.Listen("tcp", c.APIServer.Listen, s.tlsConfig)
if err != nil {
return nil, err
}
s.listen = l
} else {
l, err := net.Listen("tcp", c.Server.Listen)
l, err := net.Listen("tcp", c.APIServer.Listen)
if err != nil {
return nil, err
}
@ -107,15 +112,32 @@ func NewServer(c *config.Config, log logr.Logger) (*Server, error) {
func (s *Server) UpdateDB(db *db.DB, leader bool) error {
s.Data.DB = db
s.Data.Leader = leader
if s.Data.Net == nil {
na, err := netalloc.NewGenericAlloc(db, s.cidr)
if err != nil {
return err
if s.store.Local != nil {
if s.Data.Net == nil {
na, err := netalloc.NewGenericAlloc(db, s.prefix)
if err != nil {
return err
}
s.Data.Net = na
close(s.init)
} else {
s.Data.Net.SetStore(db)
}
s.Data.Net = na
close(s.init)
} else {
s.Data.Net.SetStore(db)
if s.Data.Net == nil {
nb := s.store.Netbox
na, err := netbox.NewAllocator(
netbox.WithEndpoint(nb.Endpoint),
netbox.WithToken(nb.Token),
netbox.WithPrefix(s.prefix),
netbox.WithInsecureClient(nb.Insecure),
)
if err != nil {
return err
}
s.Data.Net = na
close(s.init)
}
}
return nil
}