Skip to content

Commit 8d26f65

Browse files
committed
REORG/MEDIUM: Process ActiveBackends in haproxy.api package
1 parent 8151f7d commit 8d26f65

File tree

9 files changed

+40
-36
lines changed

9 files changed

+40
-36
lines changed

pkg/controller/handler.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@ func (c *HAProxyController) initHandlers() {
5050
AddrIPv6: c.osArgs.IPV6BindAddr,
5151
},
5252
&handler.PatternFiles{},
53-
handler.Refresh{},
5453
}
5554
if c.osArgs.PprofEnabled {
5655
c.updateHandlers = append(c.updateHandlers, handler.Pprof{})

pkg/handler/https.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,8 +173,9 @@ func (handler HTTPS) Update(k store.K8s, h haproxy.HAProxy, a annotations.Annota
173173
}
174174
// ssl-passthrough
175175
_, errFtSSL := h.FrontendGet(h.FrontSSL)
176+
_, errBdSSL := h.BackendGet(h.BackSSL)
176177
if h.SSLPassthrough {
177-
if errFtSSL != nil {
178+
if errFtSSL != nil || errBdSSL != nil {
178179
logger.Error(handler.enableSSLPassthrough(h))
179180
h.SSLPassthrough = true
180181
reload = true

pkg/handler/pprof.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,6 @@ func (handler Pprof) Update(k store.K8s, h haproxy.HAProxy, a annotations.Annota
5757
if err != nil {
5858
return
5959
}
60-
h.ActiveBackends[pprofBackend] = struct{}{}
6160
reload = true
6261
return
6362
}

pkg/haproxy/api/api.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ type HAProxyClient interface {
5252
GlobalPushConfiguration(models.Global) error
5353
GlobalCfgSnippet(snippet []string) error
5454
GetMap(mapFile string) (*models.Map, error)
55+
RefreshBackends() (deleted []string, err error)
5556
SetMapContent(mapFile string, payload string) error
5657
SetServerAddr(backendName string, serverName string, ip string, port int) error
5758
SetServerState(backendName string, serverName string, state string) error
@@ -65,6 +66,7 @@ type HAProxyClient interface {
6566

6667
type clientNative struct {
6768
nativeAPI clientnative.HAProxyClient
69+
activeBackends map[string]struct{}
6870
activeTransaction string
6971
activeTransactionHasChanges bool
7072
}
@@ -100,6 +102,7 @@ func New(transactionDir, configFile, programPath, runtimeSocket string) (client
100102
Configuration: &confClient,
101103
Runtime: &runtimeClient,
102104
},
105+
activeBackends: make(map[string]struct{}),
103106
}
104107
return &cn, nil
105108
}

pkg/haproxy/api/backend.go

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package api
22

33
import (
4+
"fmt"
5+
46
"github.com/haproxytech/client-native/v2/models"
57
"github.com/haproxytech/config-parser/v4/types"
68
)
@@ -15,12 +17,18 @@ func (c *clientNative) BackendGet(backendName string) (*models.Backend, error) {
1517
if err != nil {
1618
return nil, err
1719
}
20+
c.activeBackends[backend.Name] = struct{}{}
1821
return backend, nil
1922
}
2023

2124
func (c *clientNative) BackendCreate(backend models.Backend) error {
2225
c.activeTransactionHasChanges = true
23-
return c.nativeAPI.Configuration.CreateBackend(&backend, c.activeTransaction, 0)
26+
err := c.nativeAPI.Configuration.CreateBackend(&backend, c.activeTransaction, 0)
27+
if err != nil {
28+
return err
29+
}
30+
c.activeBackends[backend.Name] = struct{}{}
31+
return nil
2432
}
2533

2634
func (c *clientNative) BackendEdit(backend models.Backend) error {
@@ -115,3 +123,21 @@ func (c *clientNative) BackendServersGet(backendName string) (models.Servers, er
115123
}
116124
return servers, nil
117125
}
126+
127+
func (c *clientNative) RefreshBackends() (deleted []string, err error) {
128+
backends, errAPI := c.BackendsGet()
129+
if errAPI != nil {
130+
err = fmt.Errorf("unable to get configured backends")
131+
return
132+
}
133+
for _, backend := range backends {
134+
if _, ok := c.activeBackends[backend.Name]; !ok {
135+
if err = c.BackendDelete(backend.Name); err != nil {
136+
return
137+
}
138+
deleted = append(deleted, backend.Name)
139+
}
140+
}
141+
c.activeBackends = map[string]struct{}{}
142+
return
143+
}

pkg/haproxy/config/main.go

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,9 @@ type Config struct {
1212
maps.Maps
1313
rules.Rules
1414
certs.Certificates
15-
ActiveBackends map[string]struct{}
16-
RateLimitTables []string
17-
HTTPS bool
18-
SSLPassthrough bool
19-
AuxCfgModTime int64
15+
HTTPS bool
16+
SSLPassthrough bool
17+
AuxCfgModTime int64
2018
}
2119

2220
// Init initializes HAProxy structs
@@ -35,16 +33,13 @@ func New(env Env, rules rules.Rules) (cfg *Config, err error) {
3533
return
3634
}
3735
cfg.Rules = rules
38-
cfg.ActiveBackends = make(map[string]struct{})
3936
return
4037
}
4138

4239
// Clean cleans all the statuses of various data that was changed
4340
// deletes them completely or just resets them if needed
4441
func (cfg *Config) Clean() {
4542
cfg.SSLPassthrough = false
46-
cfg.RateLimitTables = []string{}
47-
cfg.ActiveBackends = make(map[string]struct{})
4843
cfg.CleanMaps()
4944
cfg.CleanCerts()
5045
cfg.CleanRules()

pkg/haproxy/main.go

Lines changed: 5 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -70,25 +70,11 @@ func (h *HAProxy) Refresh(cleanCrts bool) (reload bool, err error) {
7070
// Maps
7171
reload = h.RefreshMaps(h.HAProxyClient) || reload
7272
// Backends
73-
if h.SSLPassthrough {
74-
h.ActiveBackends[h.BackSSL] = struct{}{}
75-
}
76-
for _, rateLimitTable := range h.RateLimitTables {
77-
h.ActiveBackends[rateLimitTable] = struct{}{}
78-
}
79-
backends, errAPI := h.BackendsGet()
80-
if errAPI != nil {
81-
err = fmt.Errorf("unable to get configured backends")
82-
return
83-
}
84-
for _, backend := range backends {
85-
if _, ok := h.ActiveBackends[backend.Name]; !ok {
86-
logger.Debugf("Deleting backend '%s'", backend.Name)
87-
if err := h.BackendDelete(backend.Name); err != nil {
88-
logger.Panic(err)
89-
}
90-
annotations.RemoveBackendCfgSnippet(backend.Name)
91-
}
73+
deleted, err := h.RefreshBackends()
74+
logger.Error(err)
75+
for _, backend := range deleted {
76+
logger.Debugf("Backend '%s' deleted", backend)
77+
annotations.RemoveBackendCfgSnippet(backend)
9278
}
9379
return
9480
}

pkg/ingress/ingress.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,6 @@ func (i *Ingress) handlePath(k store.K8s, h haproxy.HAProxy, host string, path *
128128
if err != nil {
129129
return
130130
}
131-
h.ActiveBackends[backendName] = struct{}{}
132131
// Endpoints
133132
endpointsReload := svc.HandleHAProxySrvs(k, h)
134133
return backendReload || endpointsReload || routeReload, err
@@ -180,9 +179,6 @@ func addRules(list rules.List, h haproxy.HAProxy, ingressRule bool) []rules.Rule
180179
if h.SSLPassthrough {
181180
frontends = []string{h.FrontHTTP, h.FrontSSL}
182181
}
183-
case rules.REQ_RATELIMIT:
184-
limitRule := rule.(*rules.ReqRateLimit)
185-
h.RateLimitTables = append(h.RateLimitTables, limitRule.TableName)
186182
}
187183
for _, frontend := range frontends {
188184
logger.Error(h.AddRule(frontend, rule, ingressRule))

pkg/service/service.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,6 @@ func (s *Service) SetDefaultBackend(k store.K8s, h haproxy.HAProxy, frontends []
214214
ftReload = true
215215
}
216216
}
217-
h.ActiveBackends[backendName] = struct{}{}
218217
endpointsReload := s.HandleHAProxySrvs(k, h)
219218
reload = bdReload || ftReload || endpointsReload
220219
return reload, err

0 commit comments

Comments
 (0)