first working version

This commit is contained in:
ston1th 2021-04-09 22:38:03 +02:00
commit 6da132106f
18 changed files with 519 additions and 96 deletions

View file

@ -19,7 +19,7 @@ func NewLBController(cfg *config.Config, srv *api.Server, log logr.Logger) (call
if err != nil {
return
}
ha, err := haproxy.NewHAProxyManager(cfg.HAProxyConfig)
ha, err := haproxy.NewHAProxyManager(cfg.HAProxyConfig, cfg.HAProxyService)
if err != nil {
return
}
@ -27,7 +27,14 @@ func NewLBController(cfg *config.Config, srv *api.Server, log logr.Logger) (call
callbacks = cluster.Callbacks{
Leader: func(ctx context.Context, cc cluster.CallbackContext) {
db := db.New(cc)
err := srv.UpdateDB(db)
cc.V(2).Info("starting haproxy", "service", cfg.HAProxyService)
err := ha.Start(ctx)
if err != nil {
cc.Error(err, "error starting haproxy")
cc.Fatal(err)
return
}
err = srv.UpdateDB(db)
if err != nil {
cc.Error(err, "error initialising api server as leader")
cc.Fatal(err)
@ -44,15 +51,21 @@ func NewLBController(cfg *config.Config, srv *api.Server, log logr.Logger) (call
}
for {
cc.Info("leading", "id", cc.ID())
ips, err := db.GetIPs()
ips, err := db.GetDeletedIPs()
if err != nil && err != cluster.ErrPrefixNotFound {
cc.Error(err, "error reading ip list")
cc.Error(err, "error reading deleted ips list")
<-t.C
continue
}
deleteIPs(cc, n, ips)
ips, err = db.GetIPs()
if err != nil && err != cluster.ErrPrefixNotFound {
cc.Error(err, "error reading ips list")
<-t.C
continue
}
addIPs(cc, n, ips)
// TODO
// deleted LB IPs need to be removed
lbs, err := db.GetLBs("")
if err != nil && err != cluster.ErrPrefixNotFound {
@ -76,6 +89,11 @@ func NewLBController(cfg *config.Config, srv *api.Server, log logr.Logger) (call
case <-ctx.Done():
t.Stop()
deleteIPs(cc, n, ips)
cc.V(2).Info("stopping haproxy", "service", cfg.HAProxyService)
err = ha.Stop(context.Background())
if err != nil {
cc.Error(err, "error stopping haproxy")
}
cc.Info("leading canceled", "id", cc.ID())
return
case <-t.C:
@ -101,14 +119,6 @@ func NewLBController(cfg *config.Config, srv *api.Server, log logr.Logger) (call
}
for {
cc.Info("following", "id", cc.ID())
//TODO
//ips, err := db.GetIPs()
//if err != nil {
// cc.Error("error getting config key", err)
// <-t.C
// continue
//}
//deleteIPs(cc, n, ips)
select {
case <-ctx.Done():
t.Stop()