kubernetes/kops · error

provider ID cannot be empty

Error message

provider ID cannot be empty

What it means

Wraps a failure of the autoscaling DescribeTags paginator in FindAutoscalingGroups. kOps pages through ASG tags filtering by the cluster's tags to discover groups; any page-level API error is wrapped with this message.

Source

Thrown at pkg/nodeidentity/do/identify.go:122

	defer resp.Body.Close()

	if resp.StatusCode != http.StatusOK {
		return "", fmt.Errorf("droplet metadata returned non-200 status code: %d", resp.StatusCode)
	}

	bodyBytes, err := io.ReadAll(resp.Body)
	if err != nil {
		return "", fmt.Errorf("failed to read metadata information %s: %v", url, err)
	}

	return string(bodyBytes), nil
}

// IdentifyNode queries DigitalOcean for the node identity information.
func (i *nodeIdentifier) IdentifyNode(ctx context.Context, node *corev1.Node) (*nodeidentity.Info, error) {
	providerID := node.Spec.ProviderID
	if providerID == "" {
		return nil, errors.New("provider ID cannot be empty")
	}

	const prefix = "digitalocean://"
	if !strings.HasPrefix(providerID, prefix) {
		return nil, fmt.Errorf("provider ID %q is missing prefix %q", providerID, prefix)
	}

	instanceID := strings.TrimPrefix(providerID, prefix)
	if instanceID == "" {
		return nil, errors.New("provider ID number cannot be empty")
	}

	if i.cacheEnabled {
		if obj, exists, err := i.cache.GetByKey(instanceID); err != nil {
			klog.Warningf("Nodeidentity info cache lookup failure: %v", err)
		} else if exists {
			return obj.(*nodeidentity.Info), nil
		}

View on GitHub (pinned to 4c8573c808)

Solutions

  1. Add autoscaling:DescribeTags to the kOps IAM policy
  2. Retry with backoff; consider smaller tag filters to reduce pages
  3. Verify network access to the autoscaling endpoint in the cluster region
  4. Run the DescribeTags call via aws CLI to reproduce and see the raw error
Defensive patterns

Strategy: retry

Validate before calling

_, err := client.DescribeTags(ctx, &autoscaling.DescribeTagsInput{MaxRecords: aws.Int32(1)})
if err != nil { return fmt.Errorf("autoscaling DescribeTags unavailable: %w", err) }

Try / catch

var throttle *types.ThrottlingException
err := cloud.GetCloudGroups(ctx, cluster, igs, true, nodes)
if errors.As(err, &throttle) || strings.Contains(err.Error(), "error listing autoscaling cluster tags") {
  retryWithExponentialBackoff()
}

Prevention

When it happens

Trigger: DescribeTags NextPage fails: missing autoscaling:DescribeTags IAM permission, throttling (common with many tag pages), invalid filter combinations, or endpoint/network failure.

Common situations: IAM policy scoping that omits DescribeTags; thousands of tagged resources causing heavy throttling during discovery; corporate proxy blocking the autoscaling endpoint.

Related errors


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