kubernetes/kops · error
error listing RouteTables: %v
Error message
error listing RouteTables: %v
What it means
findRouteTableByID calls EC2 DescribeRouteTables with a specific route table ID and wraps any AWS API error. This means the DescribeRouteTables call itself failed (network, credentials, throttling, or invalid ID format), not that the table was absent — absence returns nil, nil.
Source
Thrown at upup/pkg/fi/cloudup/awstasks/routetable.go:119
Tags: intersectTags(rt.Tags, e.Tags),
}
klog.V(2).Infof("found matching RouteTable %q", *actual.ID)
e.ID = actual.ID
// Prevent spurious changes
actual.Lifecycle = e.Lifecycle
actual.Shared = e.Shared
return actual, nil
}
func findRouteTableByID(ctx context.Context, cloud awsup.AWSCloud, id string) (*ec2types.RouteTable, error) {
request := &ec2.DescribeRouteTablesInput{}
request.RouteTableIds = []string{id}
response, err := cloud.EC2().DescribeRouteTables(ctx, request)
if err != nil {
return nil, fmt.Errorf("error listing RouteTables: %v", err)
}
if response == nil || len(response.RouteTables) == 0 {
return nil, nil
}
if len(response.RouteTables) != 1 {
return nil, fmt.Errorf("found multiple RouteTables matching ID")
}
rt := response.RouteTables[0]
return &rt, nil
}
func findRouteTableByFilters(ctx context.Context, cloud awsup.AWSCloud, filters []ec2types.Filter) (*ec2types.RouteTable, error) {
request := &ec2.DescribeRouteTablesInput{}
request.Filters = filters
response, err := cloud.EC2().DescribeRouteTables(ctx, request)View on GitHub (pinned to 4c8573c808)
Solutions
- Re-run the reconcile — many AWS failures are transient
- Verify the route table ID still exists: `aws ec2 describe-route-tables --route-table-ids <id>`
- Check IAM permissions include ec2:DescribeRouteTables
- Look at the wrapped %v AWS error for the specific code (throttling vs not-found) and act accordingly
Defensive patterns
Strategy: try-catch
Validate before calling
// pre-check via AWS CLI aws ec2 describe-route-tables --route-table-ids rtb-123 || echo "missing"
Try / catch
rt, err := findRouteTableByID(ctx, cloud, id)
var aerr smithy.APIError
if errors.As(err, &aerr) && aerr.ErrorCode() == "RequestLimitExceeded" {
backoffAndRetry()
} else if err != nil { return err } Prevention
- Grant ec2:DescribeRouteTables to the kOps IAM role
- Don't delete route tables out-of-band while a cluster manages them
- Set AWS SDK retry limits appropriately for large reconciles
When it happens
Trigger: DescribeRouteTables returns an error: invalid route table ID format (InvalidRouteTableId.NotFound or Malformed), expired/insufficient IAM credentials, throttling, or network failure during findNatGatewayFromRouteTable or RouteTable.Find.
Common situations: Route table deleted outside kOps between spec and reconcile; stale nodeup/cluster state referencing a removed table; AWS throttling during large reconciliations; IAM policy lacking ec2:DescribeRouteTables.
Related errors
- error finding associated RouteTable to NatGateway: %v
- describing instance for arn %q
- error terminating instances: %v
- error describing instances: %v
- error describing addresses: %v
AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05).
Data as JSON: /api/errors/4517c797d2fe481f.
Report an issue: GitHub.