1515package controller
1616
1717import (
18+ "errors"
1819 "fmt"
1920 "os"
2021 "strings"
@@ -102,7 +103,8 @@ func (c *HAProxyController) Start() {
102103 c .initHandlers ()
103104 logger .Error (c .setupHAProxyRules ())
104105 logger .Error (os .Chdir (c .haproxy .Env .CfgDir ))
105- logger .Panic (c .haproxy .Service ("start" ))
106+ _ , errStart := (c .haproxy .Service ("start" ))
107+ logger .Panic (errStart )
106108
107109 c .SyncData ()
108110}
@@ -111,7 +113,8 @@ func (c *HAProxyController) Start() {
111113func (c * HAProxyController ) Stop () {
112114 logger .Infof ("Stopping Ingress Controller" )
113115 close (c .chShutdown )
114- logger .Error (c .haproxy .Service ("stop" ))
116+ _ , errStop := c .haproxy .Service ("stop" )
117+ logger .Error (errStop )
115118}
116119
117120// updateHAProxy is the control loop syncing HAProxy configuration
@@ -196,8 +199,32 @@ func (c *HAProxyController) updateHAProxy() {
196199
197200 if instance .NeedReload () {
198201 fs .RunDelayedFuncs ()
199- if err = c .haproxy .Service ("reload" ); err != nil {
202+ var msg string
203+ if msg , err = c .haproxy .Service ("reload" ); err != nil {
200204 logger .Error (err )
205+ errLines := strings .Split (msg , "\n " )
206+ msg := ""
207+ // Extract only lines with [ALERT] prefix to reuse functions
208+ for _ , line := range errLines {
209+ if strings .HasPrefix (line , "[ALERT]" ) {
210+ msg += strings .TrimPrefix (line , "[ALERT]" ) + "\n "
211+ }
212+ }
213+
214+ c .prometheusMetricsManager .SetUnableSyncGauge ()
215+ rerun , errCfgSnippet := annotations .CheckBackendConfigSnippetErrorOnReload (errors .New (msg ), c .haproxy .Env .CfgDir )
216+ logger .Error (errCfgSnippet )
217+ c .clean (true )
218+ if rerun {
219+ logger .Debug ("disabling some config snippets because of errors" )
220+ // We need to replay all these resources.
221+ c .store .SecretsProcessed = map [string ]struct {}{}
222+ c .store .BackendsProcessed = map [string ]struct {}{}
223+ c .updateHAProxy ()
224+ return
225+ }
226+ // If any error not from config snippet then pop the previous state of backends
227+ logger .Error (c .haproxy .PopPreviousBackends ())
201228 } else {
202229 logger .Info ("HAProxy reloaded" )
203230 }
0 commit comments