{"record":{"id":"28a6919cdfce5ec7","repo":"kubernetes/kops","slug":"found-multiple-routetables-matching-id","errorCode":null,"errorMessage":"found multiple RouteTables matching ID","messagePattern":"found multiple RouteTables matching ID","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"upup/pkg/fi/cloudup/awstasks/routetable.go","lineNumber":126,"sourceCode":"\tactual.Shared = e.Shared\n\n\treturn actual, nil\n}\n\nfunc findRouteTableByID(ctx context.Context, cloud awsup.AWSCloud, id string) (*ec2types.RouteTable, error) {\n\trequest := &ec2.DescribeRouteTablesInput{}\n\trequest.RouteTableIds = []string{id}\n\n\tresponse, err := cloud.EC2().DescribeRouteTables(ctx, request)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"error listing RouteTables: %v\", err)\n\t}\n\tif response == nil || len(response.RouteTables) == 0 {\n\t\treturn nil, nil\n\t}\n\n\tif len(response.RouteTables) != 1 {\n\t\treturn nil, fmt.Errorf(\"found multiple RouteTables matching ID\")\n\t}\n\trt := response.RouteTables[0]\n\n\treturn &rt, nil\n}\n\nfunc findRouteTableByFilters(ctx context.Context, cloud awsup.AWSCloud, filters []ec2types.Filter) (*ec2types.RouteTable, error) {\n\trequest := &ec2.DescribeRouteTablesInput{}\n\trequest.Filters = filters\n\n\tresponse, err := cloud.EC2().DescribeRouteTables(ctx, request)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"error listing RouteTables: %v\", err)\n\t}\n\tif response == nil || len(response.RouteTables) == 0 {\n\t\treturn nil, nil\n\t}\n","sourceCodeStart":108,"sourceCodeEnd":144,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/upup/pkg/fi/cloudup/awstasks/routetable.go#L108-L144","documentation":"After DescribeRouteTables by exact ID, kOps expects AWS to return at most one table. Getting more than one for a single ID is an invariant violation, so findRouteTableByID aborts rather than guessing which table to use.","triggerScenarios":"DescribeRouteTables returns len(RouteTables) > 1 for a single RouteTableIds lookup — effectively only possible from an AWS API anomaly or a mocked/stubbed client returning multiple entries.","commonSituations":"Rarely hit in practice; mostly seen in unit tests with fake EC2 clients, or AWS API misbehavior. Real clusters almost never trigger it.","solutions":["Re-run the operation; if reproducible, capture the DescribeRouteTables response and report to AWS support","Verify no proxy/mock EC2 endpoint is misconfigured (custom EC2 endpoint in env/config)","Check kOps version for known bugs and upgrade"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"rt, err := findRouteTableByID(ctx, cloud, id)\nif err != nil && strings.Contains(err.Error(), \"found multiple RouteTables matching ID\") {\n  return fmt.Errorf(\"AWS returned inconsistent data for %s; retry or investigate\", id)\n}","preventionTips":["Use real AWS endpoints (no stale mock endpoints) in production runs","Keep kOps up to date; report reproducible multi-result ID lookups to AWS support"],"tags":["aws","ec2","routetable","invariant"],"backgroundTag":"ambiguous-resource-lookup","analyzedSha":"4c8573c808a73d578c5eadc86d410646ea0b0d73","analyzedAt":"2026-09-05T04:13:19.212Z","contentChangedAt":"2026-09-05T04:13:19.212Z","schemaVersion":2},"datasetVersion":"2026-09-12T07:17:12.445Z"}