@@ -31,25 +31,15 @@ func (t TCPServices) Update(k store.K8s, cfg *config.ControllerCfg, api api.HAPr
31
31
if k .ConfigMaps .TCPServices == nil {
32
32
return false , nil
33
33
}
34
+ reload = t .clearFrontends (api , k )
34
35
var p tcpSvcParser
35
36
for port , tcpSvcAnn := range k .ConfigMaps .TCPServices .Annotations {
37
+ frontendName := fmt .Sprintf ("tcp-%s" , port )
36
38
p , err = t .parseTCPService (k , tcpSvcAnn .Value )
37
39
if err != nil {
38
40
logger .Error (err )
39
41
continue
40
42
}
41
- // Delete Frontend
42
- frontendName := fmt .Sprintf ("tcp-%s" , port )
43
- if tcpSvcAnn .Status == store .DELETED || p .service .Status == store .DELETED {
44
- err = api .FrontendDelete (frontendName )
45
- if err != nil {
46
- logger .Errorf ("error deleting tcp frontend '%s': %s" , frontendName , err )
47
- } else {
48
- reload = true
49
- logger .Debugf ("TCP frontend '%s' deleted, reload required" , frontendName )
50
- }
51
- continue
52
- }
53
43
frontend , errGet := api .FrontendGet (frontendName )
54
44
// Create Frontend
55
45
if errGet != nil {
@@ -106,6 +96,28 @@ func (t TCPServices) parseTCPService(store store.K8s, input string) (p tcpSvcPar
106
96
return p , err
107
97
}
108
98
99
+ func (t TCPServices ) clearFrontends (api api.HAProxyClient , k store.K8s ) (cleared bool ) {
100
+ frontends , err := api .FrontendsGet ()
101
+ if err != nil {
102
+ logger .Error (err )
103
+ return
104
+ }
105
+ for _ , ft := range frontends {
106
+ _ , isRequired := k .ConfigMaps .TCPServices .Annotations [strings .TrimPrefix (ft .Name , "tcp-" )]
107
+ isTCPSvc := strings .HasPrefix (ft .Name , "tcp-" )
108
+ if isTCPSvc && ! isRequired {
109
+ err = api .FrontendDelete (ft .Name )
110
+ if err != nil {
111
+ logger .Errorf ("error deleting tcp frontend '%s': %s" , ft .Name , err )
112
+ } else {
113
+ cleared = true
114
+ logger .Debugf ("TCP frontend '%s' deleted, reload required" , ft .Name )
115
+ }
116
+ }
117
+ }
118
+ return
119
+ }
120
+
109
121
func (t TCPServices ) createTCPFrontend (api api.HAProxyClient , frontendName , bindPort string , sslOffload bool ) (frontend models.Frontend , reload bool , err error ) {
110
122
// Create Frontend
111
123
frontend = models.Frontend {
@@ -164,6 +176,12 @@ func (t TCPServices) updateTCPFrontend(api api.HAProxyClient, frontend models.Fr
164
176
logger .Debugf ("TCP frontend '%s': ssl offload disabled, reload required" , frontend .Name )
165
177
reload = true
166
178
}
179
+ if p .service .Status == store .DELETED {
180
+ frontend .DefaultBackend = ""
181
+ err = api .FrontendEdit (frontend )
182
+ reload = true
183
+ return
184
+ }
167
185
ingress := & store.Ingress {
168
186
Namespace : p .service .Namespace ,
169
187
Annotations : store.MapStringW {},
0 commit comments