kubernetes/kops · error
error deleting Akamai (Linode) VPC %s(%s): %w
Error message
error deleting Akamai (Linode) VPC %s(%s): %w
What it means
deleteVPC removes the cluster's Linode VPC. Any DeleteVPC failure other than not-found (which is treated as success) is wrapped with the VPC name and ID. It indicates the Linode API refused or failed the VPC deletion call.
Source
Thrown at pkg/resources/linode/resources.go:305
return fmt.Errorf("error deleting Akamai (Linode) SSH key %s(%s): %w", tracker.Name, tracker.ID, err)
}
return nil
}
// deleteVPC deletes an Akamai (Linode) VPC.
func deleteVPC(cloud fi.Cloud, tracker *resources.Resource) error {
c := cloud.(cloudlinode.LinodeCloud)
vpcID, err := parseTrackerIntID(tracker)
if err != nil {
return err
}
if err := c.Client().DeleteVPC(context.Background(), vpcID); err != nil {
if linodego.IsNotFound(err) {
return nil
}
return fmt.Errorf("error deleting Akamai (Linode) VPC %s(%s): %w", tracker.Name, tracker.ID, err)
}
return nil
}
// deleteSubnet deletes an Akamai (Linode) VPC subnet.
func deleteSubnet(vpcID int, cloud fi.Cloud, tracker *resources.Resource) error {
c := cloud.(cloudlinode.LinodeCloud)
subnetID, err := parseTrackerIntID(tracker)
if err != nil {
return err
}
if err := c.Client().DeleteVPCSubnet(context.Background(), vpcID, subnetID); err != nil {
if linodego.IsNotFound(err) {
return nil
}
return fmt.Errorf("error deleting Akamai (Linode) subnet %s(%s): %w", tracker.Name, tracker.ID, err)View on GitHub (pinned to 4c8573c808)
Solutions
- Ensure all subnets and instances in the VPC are deleted first (kops does this in dependency order; retry if interrupted)
- Use an API token with write access
- Retry the delete after partial failures
- Remove lingering VPC interfaces via Linode Cloud Manager if needed
- Check the wrapped error's HTTP status for the exact cause
Defensive patterns
Strategy: validation
Validate before calling
// Confirm the VPC has no attached resources before deletion subnets, err := c.Client().ListVPCSubnets(ctx, vpcID, nil) // also confirm no compute instances remain attached to VPC interfaces
Type guard
func isVPCInUse(err error) bool { c := linodego.ErrCode(err); return c == 400 || c == 409 } Try / catch
if err := c.Client().DeleteVPC(ctx, vpcID); err != nil {
if linodego.IsNotFound(err) { return nil }
if isVPCInUse(err) { /* delete subnets/instances first, then retry */ }
return fmt.Errorf("error deleting Akamai (Linode) VPC %s(%s): %w", tracker.Name, tracker.ID, err)
} Prevention
- Always complete instance/subnet teardown before VPC deletion
- Use kops' ordered delete rather than manual VPC deletion
- Use write-scoped tokens
- Re-run kops delete after interrupted runs to finish cleanup
When it happens
Trigger: c.Client().DeleteVPC(ctx, vpcID) fails: token lacks write scopes, VPC still has attached resources (subnets/instances/interfaces) preventing deletion, network error, or rate limit.
Common situations: Deleting a VPC before its subnets/instances are torn down; using a read-only token during 'kops delete cluster'; orphaned VPC with lingering Linode interfaces attached.
Related errors
- error listing Akamai (Linode) VPC subnets for VPC %s(%d): %w
- error deleting Akamai (Linode) SSH key %s(%s): %w
- error deleting Akamai (Linode) subnet %s(%s): %w
- error deleting Akamai (Linode) instance %s(%s): %w
- error listing Akamai (Linode) VPC Subnets: %w
AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05).
Data as JSON: /api/errors/3c8c55f76754c67c.
Report an issue: GitHub.