What would you like to see implemented?
Description
When a Router exists but is not yet Available (or has a terminal error), the routerinterface controller returns early without updating any RouterInterface status. This leaves RouterInterfaces with .status completely missing, making it difficult to diagnose issues.
Current Behavior
In internal/controllers/routerinterface/reconcile.go:
if router.Status.ID == nil || (!orcv1alpha1.IsAvailable(router) && router.GetDeletionTimestamp().IsZero()) {
log.V(logging.Verbose).Info("Not reconciling interfaces for not-Available router")
return ctrl.Result{}, nil // ← No status update on any RouterInterface
}
When the Router doesn't exist at all, the controller does update RouterInterface status with a helpful message:
if apierrors.IsNotFound(err) {
// Updates status with WaitingOnObject("Router", req.Name, progress.WaitingOnCreation)
...
}
But when the Router exists and is not Available, RouterInterfaces are left with no status.
Observed Impact
In the subnet-create-full-v6 CI failure, the RouterInterface subnet-create-full-v6-subnet had no .status field at all for 4+ minutes. The only indication of the problem was the Router's terminal error condition, but without controller logs (see #N+1) and without RouterInterface status, the connection was not obvious.
Suggested Improvement
Update the RouterInterface status in the not-Available case, similar to the not-found case:
if router.Status.ID == nil || (!orcv1alpha1.IsAvailable(router) && router.GetDeletionTimestamp().IsZero()) {
log.V(logging.Verbose).Info("Not reconciling interfaces for not-Available router")
routerInterfaces, err := routerDependency.GetObjectsForDependency(ctx, r.client, router)
if err != nil {
return ctrl.Result{}, fmt.Errorf("fetching router interfaces: %w", err)
}
var reconcileStatus progress.ReconcileStatus
for i := range routerInterfaces {
routerInterface := &routerInterfaces[i]
ifReconcileStatus := progress.WaitingOnObject("Router", req.Name, progress.WaitingOnReady)
ifReconcileStatus = ifReconcileStatus.WithReconcileStatus(
r.updateStatus(ctx, routerInterface, nil, ifReconcileStatus))
reconcileStatus = reconcileStatus.WithReconcileStatus(ifReconcileStatus)
}
return reconcileStatus.Return(log)
}
This would give users a clear signal: "Waiting for Router subnet-create-full-v6 to be ready".
Additional information
No response
Link to reference documentation
No response
What would you like to see implemented?
Description
When a Router exists but is not yet Available (or has a terminal error), the routerinterface controller returns early without updating any RouterInterface status. This leaves RouterInterfaces with
.statuscompletely missing, making it difficult to diagnose issues.Current Behavior
In
internal/controllers/routerinterface/reconcile.go:When the Router doesn't exist at all, the controller does update RouterInterface status with a helpful message:
But when the Router exists and is not Available, RouterInterfaces are left with no status.
Observed Impact
In the subnet-create-full-v6 CI failure, the RouterInterface
subnet-create-full-v6-subnethad no.statusfield at all for 4+ minutes. The only indication of the problem was the Router's terminal error condition, but without controller logs (see #N+1) and without RouterInterface status, the connection was not obvious.Suggested Improvement
Update the RouterInterface status in the not-Available case, similar to the not-found case:
This would give users a clear signal:
"Waiting for Router subnet-create-full-v6 to be ready".Additional information
No response
Link to reference documentation
No response