1
1
package controller
2
2
3
3
import (
4
+ "errors"
4
5
"fmt"
5
6
"net/http"
6
7
"os"
7
- "path"
8
- "path/filepath"
9
8
10
9
"github.com/prometheus/client_golang/prometheus/promhttp"
11
10
12
- config "github.com/haproxytech/kubernetes-ingress/pkg/configuration"
11
+ "github.com/haproxytech/kubernetes-ingress/pkg/haproxy"
12
+ "github.com/haproxytech/kubernetes-ingress/pkg/haproxy/config"
13
13
"github.com/haproxytech/kubernetes-ingress/pkg/ingress"
14
14
"github.com/haproxytech/kubernetes-ingress/pkg/k8s"
15
15
"github.com/haproxytech/kubernetes-ingress/pkg/store"
@@ -18,27 +18,30 @@ import (
18
18
19
19
type Builder struct {
20
20
osArgs utils.OSArgs
21
- cfg config.ControllerCfg
21
+ haproxyEnv config.Env
22
22
store store.K8s
23
23
publishService * utils.NamespaceValue
24
+ haproxyCfgFile []byte
24
25
eventChan chan k8s.SyncDataEvent
25
26
ingressChan chan ingress.Sync
26
27
}
27
28
28
- var defaultCfg = config.ControllerCfg {
29
- Env : config.Env {
30
- HAProxyBinary : "/usr/local/sbin/haproxy" ,
31
- MainCFGFile : "/etc/haproxy/haproxy.cfg" ,
32
- CfgDir : "/etc/haproxy/" ,
33
- RuntimeDir : "/var/run" ,
34
- StateDir : "/var/state/haproxy/" ,
29
+ var defaultEnv = config.Env {
30
+ Binary : "/usr/local/sbin/haproxy" ,
31
+ MainCFGFile : "/etc/haproxy/haproxy.cfg" ,
32
+ CfgDir : "/etc/haproxy/" ,
33
+ RuntimeDir : "/var/run" ,
34
+ StateDir : "/var/state/haproxy/" ,
35
+ Proxies : config.Proxies {
36
+ FrontHTTP : "http" ,
37
+ FrontHTTPS : "https" ,
38
+ FrontSSL : "ssl" ,
39
+ BackSSL : "ssl" ,
35
40
},
36
41
}
37
42
38
43
func NewBuilder () * Builder {
39
- return & Builder {
40
- cfg : defaultCfg ,
41
- }
44
+ return & Builder {haproxyEnv : defaultEnv }
42
45
}
43
46
44
47
func (builder * Builder ) WithEventChan (eventChan chan k8s.SyncDataEvent ) * Builder {
@@ -56,8 +59,13 @@ func (builder *Builder) WithStore(store store.K8s) *Builder {
56
59
return builder
57
60
}
58
61
59
- func (builder * Builder ) WithConfiguration (cfg config.ControllerCfg ) * Builder {
60
- builder .cfg = cfg
62
+ func (builder * Builder ) WithHaproxyEnv (env config.Env ) * Builder {
63
+ builder .haproxyEnv = env
64
+ return builder
65
+ }
66
+
67
+ func (builder * Builder ) WithHaproxyCfgFile (cfgFile []byte ) * Builder {
68
+ builder .haproxyCfgFile = cfgFile
61
69
return builder
62
70
}
63
71
@@ -72,10 +80,9 @@ func (builder *Builder) WithPublishService(publishService *utils.NamespaceValue)
72
80
}
73
81
74
82
func (builder * Builder ) Build () * HAProxyController {
75
- if builder .osArgs . External {
76
- builder . cfg = setupExternalMode ( builder . osArgs )
83
+ if builder .haproxyCfgFile == nil {
84
+ logger . Panic ( errors . New ( "no HAProxy Config file provided" ) )
77
85
}
78
-
79
86
if builder .osArgs .PromotheusPort != 0 {
80
87
http .Handle ("/metrics" , promhttp .Handler ())
81
88
go func () {
@@ -90,11 +97,14 @@ func (builder *Builder) Build() *HAProxyController {
90
97
}()
91
98
}
92
99
100
+ haproxy , err := haproxy .New (builder .osArgs , builder .haproxyEnv , builder .haproxyCfgFile )
101
+ logger .Panic (err )
102
+
93
103
prefix , errPrefix := utils .GetPodPrefix (os .Getenv ("POD_NAME" ))
94
104
logger .Error (errPrefix )
95
105
return & HAProxyController {
96
- cfg : builder .cfg ,
97
106
osArgs : builder .osArgs ,
107
+ haproxy : haproxy ,
98
108
podNamespace : os .Getenv ("POD_NAMESPACE" ),
99
109
podPrefix : prefix ,
100
110
store : builder .store ,
@@ -103,45 +113,3 @@ func (builder *Builder) Build() *HAProxyController {
103
113
publishService : builder .publishService ,
104
114
}
105
115
}
106
-
107
- // When controller is not running on a containerized
108
- // environment (out of Kubernetes)
109
- func setupExternalMode (osArgs utils.OSArgs ) config.ControllerCfg {
110
- logger .Print ("Running Controller out of K8s cluster" )
111
- logger .FileName = true
112
- cfg := config.ControllerCfg {
113
- Env : config.Env {
114
- HAProxyBinary : "/usr/local/sbin/haproxy" ,
115
- MainCFGFile : "/tmp/haproxy-ingress/etc/haproxy.cfg" ,
116
- CfgDir : "/tmp/haproxy-ingress/etc" ,
117
- RuntimeDir : "/tmp/haproxy-ingress/run" ,
118
- StateDir : "/tmp/haproxy-ingress/state" ,
119
- },
120
- }
121
-
122
- if osArgs .CfgDir != "" {
123
- cfg .Env .CfgDir = osArgs .CfgDir
124
- cfg .Env .MainCFGFile = path .Join (cfg .Env .CfgDir , "haproxy.cfg" )
125
- }
126
- if osArgs .RuntimeDir != "" {
127
- cfg .Env .RuntimeDir = osArgs .RuntimeDir
128
- }
129
- if err := os .MkdirAll (cfg .Env .CfgDir , 0755 ); err != nil {
130
- logger .Panic (err )
131
- }
132
- if err := os .MkdirAll (cfg .Env .RuntimeDir , 0755 ); err != nil {
133
- logger .Panic (err )
134
- }
135
-
136
- dir , err := filepath .Abs (filepath .Dir (os .Args [0 ]))
137
- if err != nil {
138
- logger .Panic (err )
139
- }
140
- logger .Debug (dir )
141
-
142
- if osArgs .Program != "" {
143
- cfg .Env .HAProxyBinary = osArgs .Program
144
- }
145
-
146
- return cfg
147
- }
0 commit comments