haproxy-lb/cmd/haproxy-lb/main.go
2021-03-07 12:24:34 +01:00

75 lines
1.7 KiB
Go

package main
import (
"flag"
"os"
"os/signal"
"syscall"
"git.giftfish.de/ston1th/haproxy-lb/pkg/api"
"git.giftfish.de/ston1th/haproxy-lb/pkg/cluster"
"git.giftfish.de/ston1th/haproxy-lb/pkg/config"
"git.giftfish.de/ston1th/haproxy-lb/pkg/controller"
"git.giftfish.de/ston1th/haproxy-lb/pkg/etcd"
"git.giftfish.de/ston1th/haproxy-lb/pkg/raft"
"github.com/go-logr/logr"
"k8s.io/klog/v2"
"k8s.io/klog/v2/klogr"
)
var (
configFile string
version string
log logr.Logger
)
func main() {
klog.InitFlags(nil)
flag.StringVar(&configFile, "config", "haproxy-lb.yaml", "haproxy-lb config file")
flag.Parse()
log = klogr.New().WithName("main")
log.Info("starting haproxy-lb", "version", version)
cfg, err := config.ParseFile(configFile)
if err != nil {
klog.Fatalf("init failed: %s", err)
}
var c cluster.Cluster
if cfg.Cluster.Raft != nil {
log.Info("creating cluster", "mode", "raft")
c = raft.NewCluster(klogr.New().WithName("raft"))
} else if cfg.Cluster.Etcd != nil {
log.Info("creating cluster", "mode", "etcd")
c = etcd.NewCluster(klogr.New().WithName("etcd"))
}
srv := api.NewServer(cfg, log.WithName("api"))
callbacks, err := controller.NewLBController(cfg, srv, log.WithName("vip-controller"))
if err != nil {
klog.Fatalf("init failed: %s", err)
}
err = c.SetCallbacks(callbacks)
if err != nil {
klog.Fatalf("init failed: %s", err)
}
go func() {
err = c.Start(cfg)
if err != nil {
klog.Fatalf("init failed: %s", err)
}
}()
go func() {
sig := make(chan os.Signal)
signal.Notify(sig, syscall.SIGHUP)
for {
<-sig
c.Stepdown()
}
}()
sigs := make(chan os.Signal)
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
<-sigs
log.Info("haproxy-lb shutdown")
c.Stop()
log.Info("haproxy-lb stopped")
}