kubernetes/kops · error
providerID %q not recognized for node %s
Error message
providerID %q not recognized for node %s
What it means
IdentifyNode only recognizes providerIDs with the 'scaleway://' prefix, extracting the server ID from the remainder. This error is thrown when a node has a providerID in some other scheme, so it cannot be mapped to a Scaleway server.
Source
Thrown at pkg/nodeidentity/scaleway/identify.go:78
if err != nil {
return nil, fmt.Errorf("creating client for Scaleway NodeIdentifier: %w", err)
}
return &nodeIdentifier{
client: scwClient,
cache: expirationcache.NewTTLStore(stringKeyFunc, cacheTTL),
cacheEnabled: cacheNodeidentityInfo,
}, nil
}
// IdentifyNode queries Scaleway for the node identify information
func (i *nodeIdentifier) IdentifyNode(ctx context.Context, node *corev1.Node) (*nodeidentity.Info, error) {
providerID := node.Spec.ProviderID
if providerID == "" {
return nil, fmt.Errorf("providerID not set for node %s", node.Name)
}
if !strings.HasPrefix(providerID, "scaleway://") {
return nil, fmt.Errorf("providerID %q not recognized for node %s", providerID, node.Name)
}
serverID := strings.TrimPrefix(providerID, "scaleway://")
// If caching is enabled try pulling nodeidentity.Info from cache before doing a Scaleway API call.
if i.cacheEnabled {
obj, exists, err := i.cache.GetByKey(serverID)
if err != nil {
klog.Warningf("Nodeidentity info cache lookup failure: %v", err)
}
if exists {
return obj.(*nodeidentity.Info), nil
}
}
server, err := i.getServer(ctx, serverID)
if err != nil {
return nil, errView on GitHub (pinned to 4c8573c808)
Solutions
- Check the node's providerID starts with 'scaleway://' (kubectl get node <name> -o jsonpath='{.spec.providerID}')
- Ensure only Scaleway nodes are routed to the Scaleway nodeidentifier; handle other clouds with their own identifier
- Fix whatever component writes the providerID so it emits 'scaleway://<zone>/<server-id>'
Example fix
// before spec.providerID: "11111111-2222-3333-4444-555555555555" // after spec.providerID: "scaleway://fr-par-1/11111111-2222-3333-4444-555555555555"
Defensive patterns
Strategy: validation
Validate before calling
if !strings.HasPrefix(node.Spec.ProviderID, "scaleway://") {
return fmt.Errorf("node %s providerID %q is not a scaleway providerID", node.Name, node.Spec.ProviderID)
} Type guard
func isScalewayProviderID(pid string) bool {
return strings.HasPrefix(pid, "scaleway://") && len(strings.TrimPrefix(pid, "scaleway://")) > 0
} Try / catch
info, err := identifier.IdentifyNode(ctx, node)
if err != nil && strings.Contains(err.Error(), "not recognized") {
return dispatchByIdProviderPrefix(ctx, node) // route to the right identifier
} Prevention
- Route nodes to identifiers based on their providerID scheme prefix
- Write providerIDs in the canonical 'scaleway://<zone>/<server-id>' form
- In multi-cloud setups, verify node-to-identifier mapping before identification
When it happens
Trigger: node.Spec.ProviderID is non-empty but doesn't start with 'scaleway://' — e.g. a bare server UUID, or a providerID from another cloud ('aws://...', 'linode://...') on a node fed to the Scaleway identifier.
Common situations: Mixed/foreign nodes in the cluster, custom tooling writing providerIDs without the scheme prefix, or a node provisioned by a different cloud provider being processed by the Scaleway identifier.
Related errors
- providerID not set for node %s
- providerID was not set for node %s
- providerID %q not recognized for node %s
- invalid instance id %q: %w
- providerID was not set for node %s
AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05).
Data as JSON: /api/errors/17e22590204a7226.
Report an issue: GitHub.