Skip to content

Commit

Permalink
REORG/MAJOR: Move all HAProxy config under haproxy package
Browse files Browse the repository at this point in the history
  • Loading branch information
Mo3m3n committed May 5, 2022
1 parent 7e1bcbb commit a1a9d74
Show file tree
Hide file tree
Showing 32 changed files with 696 additions and 680 deletions.
3 changes: 2 additions & 1 deletion main.go
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@ func main() {
s := store.NewK8sStore(osArgs)

c := controller.NewBuilder().
WithHaproxyCfgFile(haproxyConf).
WithEventChan(eventChan).
WithIngressChan(ingressChan).
WithStore(s).
Expand All @@ -103,7 +104,7 @@ func main() {
)

go k.MonitorChanges(eventChan, ingressChan, stop)
go c.Start(haproxyConf)
go c.Start()
if publishService != nil {
go ingress.UpdateStatus(k.GetClientset(), s, osArgs.IngressClass, osArgs.EmptyIngressClass, ingressChan)
}
Expand Down
206 changes: 0 additions & 206 deletions pkg/configuration/main.go

This file was deleted.

92 changes: 30 additions & 62 deletions pkg/controller/builder.go
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
package controller

import (
"errors"
"fmt"
"net/http"
"os"
"path"
"path/filepath"

"github.com/prometheus/client_golang/prometheus/promhttp"

config "github.com/haproxytech/kubernetes-ingress/pkg/configuration"
"github.com/haproxytech/kubernetes-ingress/pkg/haproxy"
"github.com/haproxytech/kubernetes-ingress/pkg/haproxy/config"
"github.com/haproxytech/kubernetes-ingress/pkg/ingress"
"github.com/haproxytech/kubernetes-ingress/pkg/k8s"
"github.com/haproxytech/kubernetes-ingress/pkg/store"
Expand All @@ -18,27 +18,30 @@ import (

type Builder struct {
osArgs utils.OSArgs
cfg config.ControllerCfg
haproxyEnv config.Env
store store.K8s
publishService *utils.NamespaceValue
haproxyCfgFile []byte
eventChan chan k8s.SyncDataEvent
ingressChan chan ingress.Sync
}

var defaultCfg = config.ControllerCfg{
Env: config.Env{
HAProxyBinary: "/usr/local/sbin/haproxy",
MainCFGFile: "/etc/haproxy/haproxy.cfg",
CfgDir: "/etc/haproxy/",
RuntimeDir: "/var/run",
StateDir: "/var/state/haproxy/",
var defaultEnv = config.Env{
Binary: "/usr/local/sbin/haproxy",
MainCFGFile: "/etc/haproxy/haproxy.cfg",
CfgDir: "/etc/haproxy/",
RuntimeDir: "/var/run",
StateDir: "/var/state/haproxy/",
Proxies: config.Proxies{
FrontHTTP: "http",
FrontHTTPS: "https",
FrontSSL: "ssl",
BackSSL: "ssl",
},
}

func NewBuilder() *Builder {
return &Builder{
cfg: defaultCfg,
}
return &Builder{haproxyEnv: defaultEnv}
}

func (builder *Builder) WithEventChan(eventChan chan k8s.SyncDataEvent) *Builder {
Expand All @@ -56,8 +59,13 @@ func (builder *Builder) WithStore(store store.K8s) *Builder {
return builder
}

func (builder *Builder) WithConfiguration(cfg config.ControllerCfg) *Builder {
builder.cfg = cfg
func (builder *Builder) WithHaproxyEnv(env config.Env) *Builder {
builder.haproxyEnv = env
return builder
}

func (builder *Builder) WithHaproxyCfgFile(cfgFile []byte) *Builder {
builder.haproxyCfgFile = cfgFile
return builder
}

Expand All @@ -72,10 +80,9 @@ func (builder *Builder) WithPublishService(publishService *utils.NamespaceValue)
}

func (builder *Builder) Build() *HAProxyController {
if builder.osArgs.External {
builder.cfg = setupExternalMode(builder.osArgs)
if builder.haproxyCfgFile == nil {
logger.Panic(errors.New("no HAProxy Config file provided"))
}

if builder.osArgs.PromotheusPort != 0 {
http.Handle("/metrics", promhttp.Handler())
go func() {
Expand All @@ -90,11 +97,14 @@ func (builder *Builder) Build() *HAProxyController {
}()
}

haproxy, err := haproxy.New(builder.osArgs, builder.haproxyEnv, builder.haproxyCfgFile)
logger.Panic(err)

prefix, errPrefix := utils.GetPodPrefix(os.Getenv("POD_NAME"))
logger.Error(errPrefix)
return &HAProxyController{
cfg: builder.cfg,
osArgs: builder.osArgs,
haproxy: haproxy,
podNamespace: os.Getenv("POD_NAMESPACE"),
podPrefix: prefix,
store: builder.store,
Expand All @@ -103,45 +113,3 @@ func (builder *Builder) Build() *HAProxyController {
publishService: builder.publishService,
}
}

// When controller is not running on a containerized
// environment (out of Kubernetes)
func setupExternalMode(osArgs utils.OSArgs) config.ControllerCfg {
logger.Print("Running Controller out of K8s cluster")
logger.FileName = true
cfg := config.ControllerCfg{
Env: config.Env{
HAProxyBinary: "/usr/local/sbin/haproxy",
MainCFGFile: "/tmp/haproxy-ingress/etc/haproxy.cfg",
CfgDir: "/tmp/haproxy-ingress/etc",
RuntimeDir: "/tmp/haproxy-ingress/run",
StateDir: "/tmp/haproxy-ingress/state",
},
}

if osArgs.CfgDir != "" {
cfg.Env.CfgDir = osArgs.CfgDir
cfg.Env.MainCFGFile = path.Join(cfg.Env.CfgDir, "haproxy.cfg")
}
if osArgs.RuntimeDir != "" {
cfg.Env.RuntimeDir = osArgs.RuntimeDir
}
if err := os.MkdirAll(cfg.Env.CfgDir, 0755); err != nil {
logger.Panic(err)
}
if err := os.MkdirAll(cfg.Env.RuntimeDir, 0755); err != nil {
logger.Panic(err)
}

dir, err := filepath.Abs(filepath.Dir(os.Args[0]))
if err != nil {
logger.Panic(err)
}
logger.Debug(dir)

if osArgs.Program != "" {
cfg.Env.HAProxyBinary = osArgs.Program
}

return cfg
}
Loading

0 comments on commit a1a9d74

Please sign in to comment.