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

  1. Re-run the reconcile — many AWS failures are transient
  2. Verify the route table ID still exists: `aws ec2 describe-route-tables --route-table-ids <id>`
  3. Check IAM permissions include ec2:DescribeRouteTables
  4. 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

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


AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05). Data as JSON: /api/errors/4517c797d2fe481f. Report an issue: GitHub.