kubernetes/kops · error
waiting for route table deletion completion: %w
Error message
waiting for route table deletion completion: %w
What it means
Wrapped error from future.PollUntilDone while waiting for a route table DELETE to complete. The delete operation started but finished with failure or the polling context was cancelled before completion.
Source
Thrown at upup/pkg/fi/cloudup/azure/routetable.go:81
if err != nil {
var respErr *azcore.ResponseError
if errors.As(err, &respErr) && respErr.ErrorCode == "ResourceGroupNotFound" {
return nil, nil
}
return nil, fmt.Errorf("listing route tables: %w", err)
}
l = append(l, resp.Value...)
}
return l, nil
}
func (c *routeTablesClientImpl) Delete(ctx context.Context, resourceGroupName, vnetName string) error {
future, err := c.c.BeginDelete(ctx, resourceGroupName, vnetName, nil)
if err != nil {
return fmt.Errorf("deleting route table: %w", err)
}
if _, err := future.PollUntilDone(ctx, nil); err != nil {
return fmt.Errorf("waiting for route table deletion completion: %w", err)
}
return nil
}
func newRouteTablesClientImpl(subscriptionID string, cred *azidentity.DefaultAzureCredential) (*routeTablesClientImpl, error) {
c, err := network.NewRouteTablesClient(subscriptionID, cred, nil)
if err != nil {
return nil, fmt.Errorf("creating route tables client: %w", err)
}
return &routeTablesClientImpl{
c: c,
}, nil
}
View on GitHub (pinned to 4c8573c808)
Solutions
- Read the wrapped error for the ARM delete failure reason
- Remove any resource locks or subnet associations blocking deletion
- Increase the polling context timeout
- Verify deletion state in the portal; re-run delete if it is stuck
Defensive patterns
Strategy: retry
Validate before calling
ctx, cancel := context.WithTimeout(ctx, 5*time.Minute) defer cancel()
Type guard
var respErr *azcore.ResponseError
if errors.As(err, &respErr) {
// Conflict/InUseErrorCode indicates association still present
} Try / catch
err := client.Delete(ctx, rg, name)
if err != nil {
var respErr *azcore.ResponseError
if errors.As(err, &respErr) && (respErr.StatusCode == 429 || respErr.StatusCode >= 500) {
return retryWithBackoff(ctx, func() error { return client.Delete(ctx, rg, name) })
}
return err
} Prevention
- Dissociate route table from subnets before delete
- Remove Azure resource locks prior to teardown
- Allow ample polling time; deletes can be slow
When it happens
Trigger: PollUntilDone(ctx, nil) returns error when the ARM DELETE operation reports failure (e.g., resource locked, association conflict) or ctx is cancelled/timed out during polling.
Common situations: Route table still associated with subnets in another operation's scope; Azure ResourceManager locks on the resource group; short context deadline against slow deletes.
Related errors
- waiting for route table create/update completion: %w
- creating/updating route table: %w
- listing route tables: %w
- deleting route table: %w
- waiting for virtual network create/update completion: %w
AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05).
Data as JSON: /api/errors/b85a25fb2ec49d2d.
Report an issue: GitHub.