Skip to content

Commit 76c5f31

Browse files
committed
Handling when a service's endpoint has not been added yet
1 parent e507008 commit 76c5f31

File tree

1 file changed

+28
-7
lines changed

1 file changed

+28
-7
lines changed

managers/ingress.go

+28-7
Original file line numberDiff line numberDiff line change
@@ -67,24 +67,24 @@ func (r *LoxilbIngressReconciler) Reconcile(ctx context.Context, req ctrl.Reques
6767
// when ingress is added, install rule to loxilb-ingress
6868
models, err := r.createLoxiModelList(ctx, ingress)
6969
if err != nil {
70-
logger.Error(err, "Failed to set ingress. failed to create loxilb loadbalancer model", "[]loxiapi.LoadBalancerModel", models)
70+
logger.Info("failed to create loxilb loadbalancer model", "error", err)
71+
return ctrl.Result{}, err
7172
}
7273

73-
logger.V(4).Info("createLoxiModelList return models:", "[]loxiapi.LoadBalancerModel", models)
74+
logger.Info("createLoxiModelList return models:", "[]loxiapi.LoadBalancerModel", models)
7475

7576
for _, model := range models {
7677
err = r.LoxiClient.LoadBalancer().Create(ctx, &model)
7778
if err != nil {
7879
if err.Error() != "lbrule-exists error" {
79-
logger.Error(err, "Failed to set ingress. failed to install loadbalancer rule to loxilb", "loxiapi.LoadBalancerModel", model)
80+
logger.Error(err, "failed to install loadbalancer rule to loxilb", "loxiapi.LoadBalancerModel", model)
8081
return ctrl.Result{}, err
8182
}
8283
}
8384
}
8485

8586
if err := r.updateIngressStatus(ctx, ingress); err != nil {
86-
logger.Error(err, "Failed to update ingress status.", "ingress", ingress)
87-
return ctrl.Result{}, err
87+
logger.Info("failed to update ingress status.", "error", err)
8888
}
8989

9090
logger.Info("This resource is created", "ingress", ingress)
@@ -134,8 +134,8 @@ func (r *LoxilbIngressReconciler) createLoxiLoadBalancerEndpoints(ctx context.Co
134134
}
135135
}
136136

137-
if len(loxilbEpList) == 0 {
138-
return loxilbEpList, fmt.Errorf("backend %s/%s service has no endpoint now", ns, name)
137+
if len(loxilbEpList) <= 0 {
138+
return loxilbEpList, fmt.Errorf("no endpoints have been added to the %s/%s service yet. please wait", ns, name)
139139
}
140140

141141
return loxilbEpList, nil
@@ -219,6 +219,10 @@ func (r *LoxilbIngressReconciler) updateIngressStatus(ctx context.Context, ingre
219219
}
220220

221221
for _, ing := range svc.Status.LoadBalancer.Ingress {
222+
if r.checkIngressLoadBalancerIngressExist(ingress, ing) {
223+
continue
224+
}
225+
222226
newIngressLoadBalancerIngress := netv1.IngressLoadBalancerIngress{
223227
IP: ing.IP,
224228
Hostname: ing.Hostname,
@@ -238,6 +242,23 @@ func (r *LoxilbIngressReconciler) updateIngressStatus(ctx context.Context, ingre
238242
return r.Client.Status().Update(ctx, ingress)
239243
}
240244

245+
func (r *LoxilbIngressReconciler) checkIngressLoadBalancerIngressExist(ingress *netv1.Ingress, serviceIngress corev1.LoadBalancerIngress) bool {
246+
for _, i := range ingress.Status.LoadBalancer.Ingress {
247+
if i.IP != "" {
248+
if i.IP == serviceIngress.IP {
249+
return true
250+
}
251+
}
252+
if i.Hostname != "" {
253+
if i.Hostname == serviceIngress.Hostname {
254+
return true
255+
}
256+
}
257+
}
258+
259+
return false
260+
}
261+
241262
func (r *LoxilbIngressReconciler) SetupWithManager(mgr ctrl.Manager) error {
242263
checkIngClassNameFunc := func(ing *netv1.Ingress) bool {
243264
if ing.Spec.IngressClassName != nil {

0 commit comments

Comments
 (0)