{"record":{"id":"0b4921baaf3a55ba","repo":"kubernetes/kops","slug":"deleting-route-table-w","errorCode":null,"errorMessage":"deleting route table: %w","messagePattern":"deleting route table: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"upup/pkg/fi/cloudup/azure/routetable.go","lineNumber":78,"sourceCode":"\tpager := c.c.NewListPager(resourceGroupName, nil)\n\tfor pager.More() {\n\t\tresp, err := pager.NextPage(ctx)\n\t\tif err != nil {\n\t\t\tvar respErr *azcore.ResponseError\n\t\t\tif errors.As(err, &respErr) && respErr.ErrorCode == \"ResourceGroupNotFound\" {\n\t\t\t\treturn nil, nil\n\t\t\t}\n\t\t\treturn nil, fmt.Errorf(\"listing route tables: %w\", err)\n\t\t}\n\t\tl = append(l, resp.Value...)\n\t}\n\treturn l, nil\n}\n\nfunc (c *routeTablesClientImpl) Delete(ctx context.Context, resourceGroupName, vnetName string) error {\n\tfuture, err := c.c.BeginDelete(ctx, resourceGroupName, vnetName, nil)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"deleting route table: %w\", err)\n\t}\n\tif _, err := future.PollUntilDone(ctx, nil); err != nil {\n\t\treturn fmt.Errorf(\"waiting for route table deletion completion: %w\", err)\n\t}\n\treturn nil\n}\n\nfunc newRouteTablesClientImpl(subscriptionID string, cred *azidentity.DefaultAzureCredential) (*routeTablesClientImpl, error) {\n\tc, err := network.NewRouteTablesClient(subscriptionID, cred, nil)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"creating route tables client: %w\", err)\n\t}\n\treturn &routeTablesClientImpl{\n\t\tc: c,\n\t}, nil\n}\n","sourceCodeStart":60,"sourceCodeEnd":95,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/upup/pkg/fi/cloudup/azure/routetable.go#L60-L95","documentation":"Wrapped error from BeginDelete when initiating deletion of an Azure route table. The DELETE request to ARM was rejected before polling started. Used by kOps when tearing down or replacing cluster route tables.","triggerScenarios":"c.c.BeginDelete(ctx, resourceGroupName, vnetName, nil) errors immediately: route table not found in some SDK states it surfaces here, 403 missing Microsoft.Network/routeTables/delete permission, or invalid resource group.","commonSituations":"Identity lacks delete permissions; route table already deleted (name mismatch); resource group misconfigured; dependency locks (NIC/subnet association) preventing deletion.","solutions":["Check the wrapped error's HTTP status: 403 implies grant Microsoft.Network/routeTables/delete","Confirm the route table name/resource group are correct; if already gone, treat as success","Disassociate subnets or remove locks if the deletion is blocked by dependencies","Retry on transient 429/5xx"],"exampleFix":null,"handlingStrategy":"type-guard","validationCode":"if _, err := rtClient.Get(ctx, resourceGroupName, name, nil); err != nil {\n\tvar respErr *azcore.ResponseError\n\tif errors.As(err, &respErr) && respErr.ErrorCode == \"NotFound\" {\n\t\treturn nil // nothing to delete\n\t}\n}","typeGuard":"func isNotFound(err error) bool {\n\tvar respErr *azcore.ResponseError\n\treturn errors.As(err, &respErr) && respErr.StatusCode == http.StatusNotFound\n}","tryCatchPattern":"err := client.Delete(ctx, rg, name)\nif isNotFound(err) {\n\treturn nil // already deleted\n}","preventionTips":["Treat NotFound on delete as success (idempotent teardown)","Grant Microsoft.Network/routeTables/delete to the identity","Remove subnet associations and locks before deleting"],"tags":["azure","network","route-table","delete"],"backgroundTag":"azure-api-request-failed","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"}