kubernetes/kops · error

failed to list lbs: %v

Error message

failed to list lbs: %v

What it means

Fires in listLoadBalancers when GetAllLoadBalancers fails while discovering DigitalOcean load balancers for the cluster tag KubernetesCluster-Master:<name> during resource discovery/teardown — an API, credentials, or network failure listing LBs.

Source

Thrown at pkg/resources/digitalocean/resources.go:228

		if err != nil {
			return nil, err
		}

		opt.Page = page + 1
	}

	return allRecords, nil
}

func listLoadBalancers(cloud fi.Cloud, clusterName string) ([]*resources.Resource, error) {
	c := cloud.(do.DOCloud)
	var resourceTrackers []*resources.Resource

	clusterTag := "KubernetesCluster-Master:" + strings.ReplaceAll(clusterName, ".", "-")

	lbs, err := c.GetAllLoadBalancers()
	if err != nil {
		return nil, fmt.Errorf("failed to list lbs: %v", err)
	}

	for _, lb := range lbs {
		if strings.Contains(lb.Tag, clusterTag) {
			resourceTracker := &resources.Resource{
				Name:    lb.Name,
				ID:      lb.ID,
				Type:    resourceTypeLoadBalancer,
				Deleter: deleteLoadBalancer,
				Obj:     lb,
			}

			var blocks []string
			for _, dropletID := range lb.DropletIDs {
				blocks = append(blocks, "droplet:"+strconv.Itoa(dropletID))
			}

			resourceTracker.Blocks = blocks

View on GitHub (pinned to 4c8573c808)

Solutions

  1. Check the DigitalOcean API token and its scopes
  2. Retry after transient API errors or rate limits
  3. Verify load balancers exist in the expected region

Example fix

// before
token = read-only-scope-token  # missing loadbalancer:read
// after
token = token-with-loadbalancer-read-scope
kops delete cluster --cloud digitalocean ...
Defensive patterns

Strategy: retry

Validate before calling

lbs, err := c.GetAllLoadBalancers()
if err != nil {
	if rl, ok := err.(*godo.RateLimitError); ok {
		time.Sleep(time.Until(rl.Rate.Reset))
		lbs, err = c.GetAllLoadBalancers()
	}
}

Try / catch

lbs, err := c.GetAllLoadBalancers()
if err != nil {
	return fmt.Errorf("failed to list lbs: %w", err)
}

Prevention

When it happens

Trigger: GetAllLoadBalancers (godo LoadBalancersService().List, paginated) errors: invalid token lacking read scope on load balancers, network failure, or DO API 5xx/429.

Common situations: API token rotated to one without LB read permissions; DO API outage; rate limiting after many API calls during a large cluster delete.

Related errors


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