@@ -17,8 +17,6 @@ package main
17
17
import (
18
18
_ "embed"
19
19
"fmt"
20
- "log"
21
- "net/http"
22
20
"os"
23
21
"os/signal"
24
22
"syscall"
@@ -27,13 +25,12 @@ import (
27
25
_ "net/http/pprof"
28
26
29
27
"github.com/google/renameio"
30
- config "github.com/haproxytech/kubernetes-ingress/pkg/configuration"
28
+ "github.com/jessevdk/go-flags"
29
+
31
30
c "github.com/haproxytech/kubernetes-ingress/pkg/controller"
32
31
"github.com/haproxytech/kubernetes-ingress/pkg/controller/annotations"
33
32
"github.com/haproxytech/kubernetes-ingress/pkg/store"
34
33
"github.com/haproxytech/kubernetes-ingress/pkg/utils"
35
- "github.com/jessevdk/go-flags"
36
- "github.com/prometheus/client_golang/prometheus/promhttp"
37
34
)
38
35
39
36
//go:embed fs/usr/local/etc/haproxy/haproxy.cfg
@@ -48,29 +45,58 @@ func main() {
48
45
os .Exit (exitCode )
49
46
}()
50
47
48
+ // Parse Controller Args
51
49
var osArgs utils.OSArgs
50
+ var err error
52
51
parser := flags .NewParser (& osArgs , flags .IgnoreUnknown )
53
- _ , err := parser .Parse ()
54
-
55
- if err != nil {
52
+ if _ , err = parser .Parse (); err != nil {
56
53
fmt .Println (err )
57
54
exitCode = 1
58
55
return
59
56
}
60
57
61
- if osArgs .PromotheusPort != 0 {
62
- http .Handle ("/metrics" , promhttp .Handler ())
63
- go func () {
64
- log .Fatal (http .ListenAndServe (fmt .Sprintf (":%d" , osArgs .PromotheusPort ), nil ))
65
- }()
66
- }
67
-
58
+ // Set Logger
68
59
logger := utils .GetLogger ()
69
60
logger .SetLevel (osArgs .LogLevel .LogLevel )
61
+ if len (osArgs .Help ) > 0 && osArgs .Help [0 ] {
62
+ parser .WriteHelp (os .Stdout )
63
+ return
64
+ }
65
+ logger .ShowFilename (false )
66
+ logInfo (logger , osArgs )
67
+ logger .ShowFilename (true )
70
68
69
+ // Default annotations
71
70
defaultBackendSvc := fmt .Sprint (osArgs .DefaultBackendService )
72
71
defaultCertificate := fmt .Sprint (osArgs .DefaultCertificate )
72
+ annotations .SetDefaultValue ("default-backend-service" , defaultBackendSvc )
73
+ annotations .SetDefaultValue ("ssl-certificate" , defaultCertificate )
74
+
75
+ // Start Controller
76
+ s := store .NewK8sStore (osArgs )
77
+ for _ , namespace := range osArgs .NamespaceWhitelist {
78
+ s .NamespacesAccess .Whitelist [namespace ] = struct {}{}
79
+ }
80
+ for _ , namespace := range osArgs .NamespaceBlacklist {
81
+ s .NamespacesAccess .Blacklist [namespace ] = struct {}{}
82
+ }
83
+ controller := c .NewBuilder ().WithStore (s ).WithArgs (osArgs ).Build ()
84
+ cfg := controller .Cfg
85
+ err = renameio .WriteFile (cfg .Env .MainCFGFile , haproxyConf , 0755 )
86
+ if err != nil {
87
+ logger .Panic (err )
88
+ }
89
+ logger .Error (os .Chdir (cfg .Env .CfgDir ))
90
+ controller .Start ()
91
+
92
+ // Catch QUIT signals
93
+ signalC := make (chan os.Signal , 1 )
94
+ signal .Notify (signalC , os .Interrupt , syscall .SIGTERM , syscall .SIGUSR1 )
95
+ <- signalC
96
+ controller .Stop ()
97
+ }
73
98
99
+ func logInfo (logger utils.Logger , osArgs utils.OSArgs ) {
74
100
if len (osArgs .Version ) > 0 {
75
101
fmt .Printf ("HAProxy Ingress Controller %s %s%s" , GitTag , GitCommit , GitDirty )
76
102
fmt .Printf ("Build from: %s" , GitRepo )
@@ -83,28 +109,16 @@ func main() {
83
109
return
84
110
}
85
111
86
- if len (osArgs .Help ) > 0 && osArgs .Help [0 ] {
87
- parser .WriteHelp (os .Stdout )
88
- return
89
- }
90
-
91
- logger .FileName = false
92
112
logger .Print (IngressControllerInfo )
93
113
logger .Printf ("HAProxy Ingress Controller %s %s%s" , GitTag , GitCommit , GitDirty )
94
114
logger .Printf ("Build from: %s" , GitRepo )
95
115
logger .Printf ("Build date: %s\n " , BuildTime )
96
- if osArgs .PprofEnabled {
97
- logger .Warning ("pprof endpoint exposed over https" )
98
- go func () {
99
- logger .Error (http .ListenAndServe ("127.0.0.1:6060" , nil ))
100
- }()
101
- }
102
116
logger .Printf ("ConfigMap: %s" , osArgs .ConfigMap )
103
117
logger .Printf ("Ingress class: %s" , osArgs .IngressClass )
104
118
logger .Printf ("Empty Ingress class: %t" , osArgs .EmptyIngressClass )
105
119
logger .Printf ("Publish service: %s" , osArgs .PublishService )
106
- logger .Printf ("Default backend service: %s" , defaultBackendSvc )
107
- logger .Printf ("Default ssl certificate: %s" , defaultCertificate )
120
+ logger .Printf ("Default backend service: %s" , osArgs . DefaultBackendService )
121
+ logger .Printf ("Default ssl certificate: %s" , osArgs . DefaultCertificate )
108
122
if ! osArgs .DisableHTTP {
109
123
logger .Printf ("Frontend HTTP listening on: %s:%d" , osArgs .IPV4BindAddr , osArgs .HTTPBindPort )
110
124
}
@@ -138,53 +152,4 @@ func main() {
138
152
hostname , err := os .Hostname ()
139
153
logger .Error (err )
140
154
logger .Printf ("Running on %s" , hostname )
141
-
142
- cfg := config.ControllerCfg {
143
- Env : config.Env {
144
- HAProxyBinary : "/usr/local/sbin/haproxy" ,
145
- MainCFGFile : "/etc/haproxy/haproxy.cfg" ,
146
- CfgDir : "/etc/haproxy/" ,
147
- RuntimeDir : "/var/run" ,
148
- StateDir : "/var/state/haproxy/" ,
149
- },
150
- }
151
- if osArgs .External {
152
- cfg = setupHAProxyEnv (osArgs )
153
- }
154
- err = renameio .WriteFile (cfg .Env .MainCFGFile , haproxyConf , 0755 )
155
- if err != nil {
156
- logger .Panic (err )
157
- }
158
- podName := os .Getenv ("POD_NAME" )
159
-
160
- if osArgs .Program != "" {
161
- cfg .Env .HAProxyBinary = osArgs .Program
162
- }
163
- logger .Error (os .Chdir (cfg .Env .CfgDir ))
164
-
165
- prefix , errPrefix := utils .GetPodPrefix (podName )
166
- logger .Error (errPrefix )
167
-
168
- controller := c.HAProxyController {
169
- Cfg : cfg ,
170
- OSArgs : osArgs ,
171
- PodNamespace : os .Getenv ("POD_NAMESPACE" ),
172
- PodPrefix : prefix }
173
- logger .FileName = true
174
- // K8s Store
175
- s := store .NewK8sStore (osArgs )
176
- annotations .SetDefaultValue ("default-backend-service" , defaultBackendSvc )
177
- annotations .SetDefaultValue ("ssl-certificate" , defaultCertificate )
178
- for _ , namespace := range osArgs .NamespaceWhitelist {
179
- s .NamespacesAccess .Whitelist [namespace ] = struct {}{}
180
- }
181
- for _ , namespace := range osArgs .NamespaceBlacklist {
182
- s .NamespacesAccess .Blacklist [namespace ] = struct {}{}
183
- }
184
- controller .Store = s
185
- controller .Start ()
186
- signalC := make (chan os.Signal , 1 )
187
- signal .Notify (signalC , os .Interrupt , syscall .SIGTERM , syscall .SIGUSR1 )
188
- <- signalC
189
- controller .Stop ()
190
155
}
0 commit comments