@@ -21,10 +21,9 @@ import (
2121 "github.com/haproxytech/client-native/v2/models"
2222 config "github.com/haproxytech/kubernetes-ingress/controller/configuration"
2323 "github.com/haproxytech/kubernetes-ingress/controller/haproxy/api"
24- "github.com/haproxytech/kubernetes-ingress/controller/haproxy/certs"
2524 "github.com/haproxytech/kubernetes-ingress/controller/haproxy/process"
25+ "github.com/haproxytech/kubernetes-ingress/controller/ingress"
2626 "github.com/haproxytech/kubernetes-ingress/controller/route"
27- "github.com/haproxytech/kubernetes-ingress/controller/status"
2827 "github.com/haproxytech/kubernetes-ingress/controller/store"
2928 "github.com/haproxytech/kubernetes-ingress/controller/utils"
3029 "k8s.io/apimachinery/pkg/watch"
@@ -40,7 +39,7 @@ type HAProxyController struct {
4039 PublishService * utils.NamespaceValue
4140 AuxCfgModTime int64
4241 eventChan chan SyncDataEvent
43- statusChan chan status. SyncIngress
42+ ingressChan chan ingress. Sync
4443 k8s * K8s
4544 ready bool
4645 reload bool
@@ -122,8 +121,8 @@ func (c *HAProxyController) Start() {
122121 go c .monitorChanges ()
123122 if c .PublishService != nil {
124123 // Update Ingress status
125- c .statusChan = make (chan status. SyncIngress , watch .DefaultChanSize * 6 )
126- go status . UpdateIngress (c .k8s .API , c .Store , c .statusChan )
124+ c .ingressChan = make (chan ingress. Sync , watch .DefaultChanSize * 6 )
125+ go ingress . UpdateStatus (c .k8s .API , c .Store , c .OSArgs . IngressClass , c . OSArgs . EmptyIngressClass , c . ingressChan )
127126 }
128127}
129128
@@ -160,60 +159,23 @@ func (c *HAProxyController) updateHAProxy() {
160159 if ! namespace .Relevant {
161160 continue
162161 }
163- for _ , ingress := range namespace .Ingresses {
164- if ingress .Status == DELETED {
162+ for _ , ingResource := range namespace .Ingresses {
163+ if ingResource .Status == DELETED {
165164 continue
166165 }
167- if ! c .igClassIsSupported (ingress ) {
168- logger .Debugf ("ingress '%s/%s' ignored: no matching IngressClass" , ingress .Namespace , ingress .Name )
166+ i := ingress .New (ingResource , c .OSArgs .IngressClass , c .OSArgs .EmptyIngressClass )
167+ if ! i .Supported (c .Store ) {
168+ logger .Debugf ("ingress '%s/%s' ignored: no matching IngressClass" , ingResource .Namespace , ingResource .Name )
169169 continue
170170 }
171- if c .PublishService != nil && ingress .Status == ADDED {
171+ if c .PublishService != nil && ingResource .Status == ADDED {
172172 select {
173- case c .statusChan <- status. SyncIngress {Ingress : ingress }:
173+ case c .ingressChan <- ingress. Sync {Ingress : ingResource }:
174174 default :
175- logger .Errorf ("Ingress %s/%s: unable to sync status: sync channel full" , ingress .Namespace , ingress .Name )
176- }
177- }
178- if ingress .DefaultBackend != nil {
179- if reload , err = c .setDefaultService (ingress , []string {c .Cfg .FrontHTTP , c .Cfg .FrontHTTPS }); err != nil {
180- logger .Errorf ("Ingress '%s/%s': default backend: %s" , ingress .Namespace , ingress .Name , err )
181- } else {
182- c .reload = c .reload || reload
183- }
184- }
185- // Ingress secrets
186- logger .Tracef ("ingress '%s/%s': processing secrets..." , ingress .Namespace , ingress .Name )
187- for _ , tls := range ingress .TLS {
188- if tls .Status == store .DELETED {
189- continue
190- }
191- secret , secErr := c .Store .GetSecret (ingress .Namespace , tls .SecretName )
192- if secErr != nil {
193- logger .Warningf ("ingress '%s/%s': %s" , ingress .Namespace , ingress .Name , secErr )
194- continue
195- }
196- _ , err = c .Cfg .Certificates .HandleTLSSecret (secret , certs .FT_CERT )
197- logger .Error (err )
198- }
199- // Ingress annotations
200- logger .Tracef ("ingress '%s/%s': processing annotations..." , ingress .Namespace , ingress .Name )
201- if len (ingress .Rules ) == 0 {
202- logger .Debugf ("Ingress %s/%s: no rules defined" , ingress .Namespace , ingress .Name )
203- continue
204- }
205- ruleIDs := c .handleIngressAnnotations (* ingress )
206- // Ingress rules
207- logger .Tracef ("ingress '%s/%s': processing rules..." , ingress .Namespace , ingress .Name )
208- for _ , rule := range ingress .Rules {
209- for _ , path := range rule .Paths {
210- if reload , err = c .handleIngressPath (ingress , rule .Host , path , ruleIDs ); err != nil {
211- logger .Errorf ("Ingress '%s/%s': %s" , ingress .Namespace , ingress .Name , err )
212- } else {
213- c .reload = c .reload || reload
214- }
175+ logger .Errorf ("Ingress %s/%s: unable to sync status: sync channel full" , ingResource .Namespace , ingResource .Name )
215176 }
216177 }
178+ c .reload = i .Update (c .Store , & c .Cfg , c .Client ) || c .reload
217179 }
218180 }
219181
0 commit comments