kubernetes/kops · error
error listing Akamai (Linode) volumes: %w
Error message
error listing Akamai (Linode) volumes: %w
What it means
Volume.Find wraps any error from linodego's ListVolumes call with this message. It means the Linode API list volumes request failed while trying to find a matching volume by label. The underlying cause is preserved via %w.
Source
Thrown at upup/pkg/fi/cloudup/linodetasks/volume.go:61
func (v *Volume) CompareWithID() *string {
return v.Name
}
func (v *Volume) Find(c *fi.CloudupContext) (*Volume, error) {
cloud := c.T.Cloud.(linode.LinodeCloud)
name := fi.ValueOf(v.Name)
if name == "" {
return nil, fmt.Errorf("Volume.Name is required")
}
label := truncate.TruncateString(linode.NormalizeLinodeLabel(name), truncate.TruncateStringOptions{MaxLength: 32})
listOptions, err := linode.ListOptionsForLabel(label)
if err != nil {
return nil, err
}
volumes, err := cloud.Client().ListVolumes(c.Context(), listOptions)
if err != nil {
return nil, fmt.Errorf("error listing Akamai (Linode) volumes: %w", err)
}
if len(volumes) == 0 {
return nil, nil
}
// Name is unique, so we should only have one match
matched := volumes[0]
actual := &Volume{
ID: new(matched.ID),
Name: new(name),
Lifecycle: v.Lifecycle,
Region: new(matched.Region),
SizeGB: new(matched.Size),
Tags: matched.Tags,
}
v.ID = actual.IDView on GitHub (pinned to 4c8573c808)
Solutions
- Unwrap the error to read the Linode API status (401/403 -> fix token scopes; 429 -> back off and retry)
- Verify LINODE_TOKEN / API credentials are valid and have volumes:read access
- Retry the kops update if the cause is a transient 5xx or network error
- Check Linode status page for an ongoing API incident
Defensive patterns
Strategy: try-catch
Try / catch
_, err := kops.UpdateCluster(ctx, opts)
if err != nil && strings.Contains(err.Error(), "error listing Akamai (Linode) volumes") {
var apiErr *linodego.Error
if errors.As(err, &apiErr) && (apiErr.Code == 429 || apiErr.Code >= 500) {
// retry with exponential backoff
} else if errors.As(err, &apiErr) && (apiErr.Code == 401 || apiErr.Code == 403) {
// refresh LINODE_TOKEN / fix scopes
}
} Prevention
- Verify LINODE_TOKEN validity and volumes:read scope before running kops
- Retry transient list failures with backoff instead of failing the pipeline
- Monitor Linode API status during CI runs
- Use a stable network path (no aggressive proxy) for API calls from CI runners
When it happens
Trigger: cloud.Client().ListVolumes(c.Context(), listOptions) returns an error during Volume.Find, e.g. network failure, bad API token, or malformed label list options.
Common situations: Expired or scope-limited Linode API token; Linode API outage or rate limiting; network/proxy issues from the CI runner; ListOptionsForLabel produced options the API rejects.
Related errors
- error listing EgressOnlyInternetGateway: %v
- failed to delete volume: %s, err: %s
- error listing Routes: %w
- error listing Addresses: %v
- error listing subnetworks: %v
AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05).
Data as JSON: /api/errors/e547ada2d8a28f2b.
Report an issue: GitHub.