kubernetes/kops · error
providerID not set for node %s
Error message
providerID not set for node %s
What it means
IdentifyNode queries Scaleway for server info using the node's providerID and requires node.Spec.ProviderID to be set. This error is thrown when the Node has an empty ProviderID, so the Scaleway server cannot be determined.
Source
Thrown at pkg/nodeidentity/scaleway/identify.go:75
scw.WithProfile(profile),
scw.WithUserAgent(scaleway.KopsUserAgentPrefix+kopsv.Version),
)
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
}
}
View on GitHub (pinned to 4c8573c808)
Solutions
- Ensure the Scaleway cloud-controller-manager is deployed and setting providerIDs on Nodes
- Confirm kubelet/cloud bootstrap populates spec.providerID with 'scaleway://<server-id>'
- Re-run or restart the CCM so existing Nodes are patched with their providerID
Example fix
// before # node has spec.providerID: "" // after # scaleway CCM sets: spec.providerID: "scaleway://fr-par-1/<server-uuid>"
Defensive patterns
Strategy: validation
Validate before calling
if node.Spec.ProviderID == "" {
return fmt.Errorf("skip IdentifyNode: node %s has empty providerID", node.Name)
} Type guard
func hasProviderID(n *corev1.Node) bool {
return n != nil && n.Spec.ProviderID != ""
} Try / catch
info, err := identifier.IdentifyNode(ctx, node)
if err != nil && strings.Contains(err.Error(), "providerID not set") {
return requeueAfter(ctx, node, time.Minute) // wait for CCM to set providerID
} Prevention
- Run the Scaleway cloud-controller-manager so providerIDs are assigned on registration
- Gate identification on providerID presence before calling IdentifyNode
- Monitor for nodes missing providerID past a startup grace period
When it happens
Trigger: IdentifyNode is called for a Node whose Spec.ProviderID is "" — the Scaleway CCM or kubelet bootstrap never set it, or the node registered before providerID assignment.
Common situations: Nodes joined without the Scaleway cloud controller running, freshly registered nodes processed too early, or clusters bootstrapped with providerID disabled/misconfigured.
Related errors
- providerID %q not recognized 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/4b0d823b54b793e3.
Report an issue: GitHub.