Skip to content

Commit e50f65e

Browse files
fix: missing updating status of GatewayAPI resources (#305)
Signed-off-by: Lin Yang <[email protected]>
1 parent d9166f1 commit e50f65e

File tree

4 files changed

+72
-114
lines changed

4 files changed

+72
-114
lines changed

pkg/controllers/gateway/v1/gateway_controller.go

+21-19
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ import (
3131
"sync"
3232
"time"
3333

34+
"github.com/flomesh-io/fsm/pkg/gateway/status"
35+
3436
"github.com/flomesh-io/fsm/pkg/gateway/status/gw"
3537

3638
gwtypes "github.com/flomesh-io/fsm/pkg/gateway/types"
@@ -51,8 +53,6 @@ import (
5153
"k8s.io/apimachinery/pkg/fields"
5254
"k8s.io/utils/ptr"
5355

54-
"github.com/flomesh-io/fsm/pkg/gateway/status"
55-
5656
"sigs.k8s.io/controller-runtime/pkg/manager"
5757

5858
"github.com/flomesh-io/fsm/pkg/version"
@@ -182,22 +182,9 @@ func (r *gatewayReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ct
182182
}
183183

184184
if r.compute(gateway) {
185-
update := gw.NewGatewayStatusUpdate(
186-
gateway,
187-
&gateway.ObjectMeta,
188-
&gateway.TypeMeta,
189-
&gateway.Status,
190-
)
191-
192-
if result, err := r.computeGatewayStatus(ctx, gateway, update); err != nil || result.RequeueAfter > 0 || result.Requeue {
185+
if result, err := r.computeGatewayStatus(ctx, gateway); err != nil || result.RequeueAfter > 0 || result.Requeue {
193186
return result, err
194187
}
195-
196-
r.fctx.StatusUpdater.Send(status.Update{
197-
Resource: &gwv1.Gateway{},
198-
NamespacedName: client.ObjectKeyFromObject(gateway),
199-
Mutator: update,
200-
})
201188
}
202189

203190
r.fctx.GatewayEventHandler.OnAdd(gateway, false)
@@ -214,18 +201,33 @@ func (r *gatewayReconciler) compute(gateway *gwv1.Gateway) bool {
214201
return true
215202
}
216203

217-
if !metautil.IsStatusConditionTrue(gateway.Status.Conditions, string(gwv1.GatewayConditionProgrammed)) {
204+
if !gwutils.IsProgrammedGateway(gateway) {
218205
return true
219206
}
220207

221-
if !metautil.IsStatusConditionTrue(gateway.Status.Conditions, string(gwv1.GatewayConditionAccepted)) {
208+
if !gwutils.IsAcceptedGateway(gateway) {
222209
return true
223210
}
224211

225212
return !cmp.Equal(old.spec, gateway.Spec)
226213
}
227214

228-
func (r *gatewayReconciler) computeGatewayStatus(ctx context.Context, gateway *gwv1.Gateway, update *gw.GatewayStatusUpdate) (ctrl.Result, error) {
215+
func (r *gatewayReconciler) computeGatewayStatus(ctx context.Context, gateway *gwv1.Gateway) (ctrl.Result, error) {
216+
update := gw.NewGatewayStatusUpdate(
217+
gateway,
218+
&gateway.ObjectMeta,
219+
&gateway.TypeMeta,
220+
&gateway.Status,
221+
)
222+
223+
defer func() {
224+
r.fctx.StatusUpdater.Send(status.Update{
225+
Resource: &gwv1.Gateway{},
226+
NamespacedName: client.ObjectKeyFromObject(gateway),
227+
Mutator: update,
228+
})
229+
}()
230+
229231
// 1. compute listener status & accepted status
230232
r.computeListenerStatus(ctx, gateway, update)
231233

pkg/gateway/processor/v2/backend_tls_policy.go

-9
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package v2
22

33
import (
44
"fmt"
5-
"strings"
65

76
fgwv2 "github.com/flomesh-io/fsm/pkg/gateway/fgw"
87

@@ -49,14 +48,6 @@ func (p *BackendTLSPolicyProcessor) Process(route client.Object, routeParentRef
4948
return
5049
}
5150

52-
hostname := string(policy.Spec.Validation.Hostname)
53-
if err := gwutils.IsValidHostname(hostname); err != nil {
54-
return
55-
}
56-
if strings.Contains(hostname, "*") {
57-
return
58-
}
59-
6051
p2 := p.getOrCreateBackendTLSPolicy(policy)
6152
if p2 == nil {
6253
return

pkg/gateway/status/routes/processor.go

+40-25
Original file line numberDiff line numberDiff line change
@@ -307,8 +307,26 @@ func (p *RouteStatusProcessor) computeBackendTLSPolicyStatus(route client.Object
307307
)
308308

309309
ancestorStatus := psu.StatusUpdateFor(routeParentRef)
310-
hostname := string(policy.Spec.Validation.Hostname)
311310

311+
defer func() {
312+
p.statusUpdater.Send(status.Update{
313+
Resource: psu.GetResource(),
314+
NamespacedName: psu.GetFullName(),
315+
Mutator: psu,
316+
})
317+
}()
318+
319+
if policy.Spec.Validation.WellKnownCACertificates != nil && *policy.Spec.Validation.WellKnownCACertificates != "" {
320+
ancestorStatus.AddCondition(
321+
gwv1alpha2.PolicyConditionAccepted,
322+
metav1.ConditionFalse,
323+
gwv1alpha2.PolicyReasonInvalid,
324+
".spec.validation.wellKnownCACertificates is unsupported.",
325+
)
326+
return
327+
}
328+
329+
hostname := string(policy.Spec.Validation.Hostname)
312330
if err := gwutils.IsValidHostname(hostname); err != nil {
313331
ancestorStatus.AddCondition(
314332
gwv1alpha2.PolicyConditionAccepted,
@@ -351,12 +369,6 @@ func (p *RouteStatusProcessor) computeBackendTLSPolicyStatus(route client.Object
351369
fmt.Sprintf("Policy is accepted for ancestor %s/%s", gwutils.NamespaceDerefOr(routeParentRef.Namespace, route.GetNamespace()), routeParentRef.Name),
352370
)
353371
}
354-
355-
p.statusUpdater.Send(status.Update{
356-
Resource: psu.GetResource(),
357-
NamespacedName: psu.GetFullName(),
358-
Mutator: psu,
359-
})
360372
}
361373

362374
func (p *RouteStatusProcessor) computeBackendLBPolicyStatus(route client.Object, backendRef gwv1.BackendObjectReference, _ *fgwv2.ServicePortName, routeParentRef gwv1.ParentReference) {
@@ -380,6 +392,13 @@ func (p *RouteStatusProcessor) computeBackendLBPolicyStatus(route client.Object,
380392
)
381393

382394
ancestorStatus := psu.StatusUpdateFor(routeParentRef)
395+
defer func() {
396+
p.statusUpdater.Send(status.Update{
397+
Resource: psu.GetResource(),
398+
NamespacedName: psu.GetFullName(),
399+
Mutator: psu,
400+
})
401+
}()
383402

384403
if !ancestorStatus.ConditionExists(gwv1alpha2.PolicyConditionAccepted) {
385404
ancestorStatus.AddCondition(
@@ -389,12 +408,6 @@ func (p *RouteStatusProcessor) computeBackendLBPolicyStatus(route client.Object,
389408
fmt.Sprintf("Policy is accepted for ancestor %s/%s", gwutils.NamespaceDerefOr(routeParentRef.Namespace, route.GetNamespace()), routeParentRef.Name),
390409
)
391410
}
392-
393-
p.statusUpdater.Send(status.Update{
394-
Resource: psu.GetResource(),
395-
NamespacedName: psu.GetFullName(),
396-
Mutator: psu,
397-
})
398411
}
399412

400413
func (p *RouteStatusProcessor) computeHealthCheckPolicyStatus(route client.Object, backendRef gwv1.BackendObjectReference, svcPort *fgwv2.ServicePortName, routeParentRef gwv1.ParentReference) {
@@ -419,6 +432,13 @@ func (p *RouteStatusProcessor) computeHealthCheckPolicyStatus(route client.Objec
419432
)
420433

421434
ancestorStatus := psu.StatusUpdateFor(routeParentRef)
435+
defer func() {
436+
p.statusUpdater.Send(status.Update{
437+
Resource: psu.GetResource(),
438+
NamespacedName: psu.GetFullName(),
439+
Mutator: psu,
440+
})
441+
}()
422442

423443
if gwutils.HasAccessToBackendTargetRef(p.client, policy, targetRef, ancestorStatus) {
424444
ancestorStatus.AddCondition(
@@ -428,12 +448,6 @@ func (p *RouteStatusProcessor) computeHealthCheckPolicyStatus(route client.Objec
428448
fmt.Sprintf("Policy is accepted for ancestor %s/%s", gwutils.NamespaceDerefOr(routeParentRef.Namespace, route.GetNamespace()), routeParentRef.Name),
429449
)
430450
}
431-
432-
p.statusUpdater.Send(status.Update{
433-
Resource: psu.GetResource(),
434-
NamespacedName: psu.GetFullName(),
435-
Mutator: psu,
436-
})
437451
}
438452

439453
func (p *RouteStatusProcessor) computeRetryPolicyStatus(route client.Object, backendRef gwv1.BackendObjectReference, svcPort *fgwv2.ServicePortName, routeParentRef gwv1.ParentReference) {
@@ -458,6 +472,13 @@ func (p *RouteStatusProcessor) computeRetryPolicyStatus(route client.Object, bac
458472
)
459473

460474
ancestorStatus := psu.StatusUpdateFor(routeParentRef)
475+
defer func() {
476+
p.statusUpdater.Send(status.Update{
477+
Resource: psu.GetResource(),
478+
NamespacedName: psu.GetFullName(),
479+
Mutator: psu,
480+
})
481+
}()
461482

462483
if gwutils.HasAccessToBackendTargetRef(p.client, policy, targetRef, ancestorStatus) {
463484
ancestorStatus.AddCondition(
@@ -467,12 +488,6 @@ func (p *RouteStatusProcessor) computeRetryPolicyStatus(route client.Object, bac
467488
fmt.Sprintf("Policy is accepted for ancestor %s/%s", gwutils.NamespaceDerefOr(routeParentRef.Namespace, route.GetNamespace()), routeParentRef.Name),
468489
)
469490
}
470-
471-
p.statusUpdater.Send(status.Update{
472-
Resource: psu.GetResource(),
473-
NamespacedName: psu.GetFullName(),
474-
Mutator: psu,
475-
})
476491
}
477492

478493
func (p *RouteStatusProcessor) backendRefToServicePortName(route client.Object, backendRef gwv1.BackendObjectReference, rps status.RouteParentStatusObject) *fgwv2.ServicePortName {

pkg/gateway/status/status.go

+11-61
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ package status
1616
import (
1717
"context"
1818

19+
extv1alpha1 "github.com/flomesh-io/fsm/pkg/apis/extension/v1alpha1"
20+
1921
gwv1alpha3 "sigs.k8s.io/gateway-api/apis/v1alpha3"
2022

2123
gwpav1alpha2 "github.com/flomesh-io/fsm/pkg/apis/policyattachment/v1alpha2"
@@ -166,15 +168,11 @@ func (u *UpdateWriter) Send(update Update) {
166168
// TCPRoute
167169
// UDPRoute
168170
// GRPCRoute
169-
// AccessControlPolicy
170-
// RateLimitPolicy
171-
// FaultInjectionPolicy
172-
// SessionStickyPolicy
173-
// CircuitBreakingPolicy
174-
// LoadBalancerPolicy
171+
// Filter
172+
// BackendLBPolicy
173+
// BackendTLSPolicy
175174
// HealthCheckPolicy
176175
// RetryPolicy
177-
// UpstreamTLSPolicy
178176

179177
//gocyclo:ignore
180178
func isStatusEqual(objA, objB interface{}) bool {
@@ -246,60 +244,12 @@ func isStatusEqual(objA, objB interface{}) bool {
246244
return true
247245
}
248246
}
249-
//case *gwpav1alpha1.AccessControlPolicy:
250-
// if b, ok := objB.(*gwpav1alpha1.AccessControlPolicy); ok {
251-
// if cmp.Equal(a.Status, b.Status, opts) {
252-
// return true
253-
// }
254-
// }
255-
//case *gwpav1alpha1.RateLimitPolicy:
256-
// if b, ok := objB.(*gwpav1alpha1.RateLimitPolicy); ok {
257-
// if cmp.Equal(a.Status, b.Status, opts) {
258-
// return true
259-
// }
260-
// }
261-
//case *gwpav1alpha1.FaultInjectionPolicy:
262-
// if b, ok := objB.(*gwpav1alpha1.FaultInjectionPolicy); ok {
263-
// if cmp.Equal(a.Status, b.Status, opts) {
264-
// return true
265-
// }
266-
// }
267-
//case *gwpav1alpha1.SessionStickyPolicy:
268-
// if b, ok := objB.(*gwpav1alpha1.SessionStickyPolicy); ok {
269-
// if cmp.Equal(a.Status, b.Status, opts) {
270-
// return true
271-
// }
272-
// }
273-
//case *gwpav1alpha1.CircuitBreakingPolicy:
274-
// if b, ok := objB.(*gwpav1alpha1.CircuitBreakingPolicy); ok {
275-
// if cmp.Equal(a.Status, b.Status, opts) {
276-
// return true
277-
// }
278-
// }
279-
//case *gwpav1alpha1.LoadBalancerPolicy:
280-
// if b, ok := objB.(*gwpav1alpha1.LoadBalancerPolicy); ok {
281-
// if cmp.Equal(a.Status, b.Status, opts) {
282-
// return true
283-
// }
284-
// }
285-
//case *gwpav1alpha1.HealthCheckPolicy:
286-
// if b, ok := objB.(*gwpav1alpha1.HealthCheckPolicy); ok {
287-
// if cmp.Equal(a.Status, b.Status, opts) {
288-
// return true
289-
// }
290-
// }
291-
//case *gwpav1alpha1.RetryPolicy:
292-
// if b, ok := objB.(*gwpav1alpha1.RetryPolicy); ok {
293-
// if cmp.Equal(a.Status, b.Status, opts) {
294-
// return true
295-
// }
296-
// }
297-
//case *gwpav1alpha1.UpstreamTLSPolicy:
298-
// if b, ok := objB.(*gwpav1alpha1.UpstreamTLSPolicy); ok {
299-
// if cmp.Equal(a.Status, b.Status, opts) {
300-
// return true
301-
// }
302-
// }
247+
case *extv1alpha1.Filter:
248+
if b, ok := objB.(*extv1alpha1.Filter); ok {
249+
if cmp.Equal(a.Status, b.Status, opts) {
250+
return true
251+
}
252+
}
303253
}
304254

305255
return false

0 commit comments

Comments
 (0)