Skip to content

Commit e57e54d

Browse files
ivanmatmatioktalz
authored andcommitted
BUG: ingress status update with others controllers
1 parent 6b097aa commit e57e54d

File tree

5 files changed

+23
-33
lines changed

5 files changed

+23
-33
lines changed

pkg/controller/builder.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -166,15 +166,14 @@ func (builder *Builder) Build() *HAProxyController {
166166
prefix, errPrefix := utils.GetPodPrefix(os.Getenv("POD_NAME"))
167167
logger.Error(errPrefix)
168168

169-
builder.store.UpdateStatusFunc = ingress.NewStatusIngressUpdater(builder.clientSet, builder.store, builder.osArgs.IngressClass, builder.osArgs.EmptyIngressClass, builder.annotations)
170169
builder.store.GatewayControllerName = builder.osArgs.GatewayControllerName
171170
gatewayManager := builder.gatewayManager
172171
if gatewayManager == nil {
173172
gatewayManager = gateway.New(builder.store, haproxy.HAProxyClient, builder.osArgs, builder.restClientSet)
174173
}
175174
updateStatusManager := builder.updateStatusManager
176175
if updateStatusManager == nil {
177-
updateStatusManager = status.New(builder.clientSet)
176+
updateStatusManager = status.New(builder.clientSet, builder.osArgs.IngressClass, builder.osArgs.EmptyIngressClass)
178177
}
179178
return &HAProxyController{
180179
osArgs: builder.osArgs,

pkg/controller/controller.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,8 +121,7 @@ func (c *HAProxyController) updateHAProxy() {
121121
for _, ingResource := range namespace.Ingresses {
122122
i := ingress.New(c.store, ingResource, c.osArgs.IngressClass, c.osArgs.EmptyIngressClass, c.annotations)
123123
if !i.Supported(c.store, c.annotations) {
124-
logger.Debugf("ingress '%s/%s' ignored: no matching IngressClass", ingResource.Namespace, ingResource.Name)
125-
ingResource.Addresses = []string{""}
124+
logger.Debugf("ingress '%s/%s' ignored: no matching", ingResource.Namespace, ingResource.Name)
126125
} else {
127126
c.reload = i.Update(c.store, c.haproxy, c.annotations) || c.reload
128127
}

pkg/ingress/status.go

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,26 +5,12 @@ import (
55
"fmt"
66
"net"
77

8-
"github.com/haproxytech/kubernetes-ingress/pkg/annotations"
9-
"github.com/haproxytech/kubernetes-ingress/pkg/store"
108
networkingv1 "k8s.io/api/networking/v1"
119
k8serror "k8s.io/apimachinery/pkg/api/errors"
1210
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1311
"k8s.io/client-go/kubernetes"
1412
)
1513

16-
type UpdateStatus func(ingresses []*store.Ingress, publishServiceAddresses []string)
17-
18-
func NewStatusIngressUpdater(client *kubernetes.Clientset, k store.K8s, class string, emptyClass bool, a annotations.Annotations) UpdateStatus {
19-
return func(ingresses []*store.Ingress, publishServiceAddresses []string) {
20-
for _, ingress := range ingresses {
21-
if ing := New(k, ingress, class, emptyClass, a); ing != nil {
22-
logger.Error(ing.UpdateStatus(client))
23-
}
24-
}
25-
}
26-
}
27-
2814
func (i *Ingress) UpdateStatus(client *kubernetes.Clientset) (err error) {
2915
var lbi []networkingv1.IngressLoadBalancerIngress
3016

pkg/status/updatestatus.go

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,25 @@ import (
99
"k8s.io/client-go/kubernetes"
1010
)
1111

12+
var logger = utils.GetLogger()
13+
1214
type UpdateStatusManager interface {
1315
AddIngress(ingress *ingress.Ingress)
1416
Update(k store.K8s, h haproxy.HAProxy, a annotations.Annotations) (reload bool, err error)
1517
}
1618

1719
type UpdateStatusManagerImpl struct {
18-
updateIngresses []*ingress.Ingress
19-
client *kubernetes.Clientset
20+
updateIngresses []*ingress.Ingress
21+
client *kubernetes.Clientset
22+
ingressClass string
23+
emptyIngressClass bool
2024
}
2125

22-
func New(client *kubernetes.Clientset) UpdateStatusManager {
26+
func New(client *kubernetes.Clientset, ingressClass string, emptyIngressClass bool) UpdateStatusManager {
2327
return &UpdateStatusManagerImpl{
24-
client: client,
28+
client: client,
29+
ingressClass: ingressClass,
30+
emptyIngressClass: emptyIngressClass,
2531
}
2632
}
2733

@@ -45,20 +51,21 @@ func (m *UpdateStatusManagerImpl) Update(k store.K8s, h haproxy.HAProxy, a annot
4551
}
4652

4753
for _, ingResource := range namespace.Ingresses {
48-
previousAddresses := ingResource.Addresses
49-
i := ingress.New(k, ingResource, "haproxy", false, a)
54+
i := ingress.New(k, ingResource, m.ingressClass, m.emptyIngressClass, a)
5055
supported := i.Supported(k, a)
56+
57+
if (!supported && (len(ingResource.Addresses) == 0 || !utils.EqualSliceStringsWithoutOrder(k.PublishServiceAddresses, ingResource.Addresses))) ||
58+
(supported && utils.EqualSliceStringsWithoutOrder(k.PublishServiceAddresses, ingResource.Addresses)) {
59+
continue
60+
}
61+
5162
if supported {
5263
ingResource.Addresses = k.PublishServiceAddresses
64+
} else {
65+
ingResource.Addresses = []string{""}
5366
}
54-
// If ingress is not managed by us, three cases can occur:
55-
// - it has no adddresses.
56-
// - it has addresses and they are different (maybe managed by someone else).
57-
// - it has addresses and they are ours. We managed it but not now anymore.
58-
// You can see we can't easily manage the case when while the IC is stopped, the ingress switches to unmanaged state (ingress class change) and the publish service addresses have also changed.
59-
if !supported && !utils.EqualSliceStringsWithoutOrder(previousAddresses, ingResource.Addresses) {
60-
continue
61-
}
67+
logger.Debugf("new ingress status ip address of '%s/%s' will be %+v", ingResource.Namespace, ingResource.Name, ingResource.Addresses)
68+
6269
ingresses = append(ingresses, i)
6370
}
6471
}

pkg/store/store.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ type K8s struct {
3030
IngressClasses map[string]*IngressClass
3131
SecretsProcessed map[string]struct{}
3232
BackendProcessed map[string]struct{}
33-
UpdateStatusFunc func(ingresses []*Ingress, publishServiceAddresses []string)
3433
GatewayClasses map[string]*GatewayClass
3534
GatewayControllerName string
3635
PublishServiceAddresses []string

0 commit comments

Comments
 (0)