{"record":{"id":"4b0d823b54b793e3","repo":"kubernetes/kops","slug":"providerid-not-set-for-node-s-4b0d82","errorCode":null,"errorMessage":"providerID not set for node %s","messagePattern":"providerID not set for node (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/nodeidentity/scaleway/identify.go","lineNumber":75,"sourceCode":"\t\tscw.WithProfile(profile),\n\t\tscw.WithUserAgent(scaleway.KopsUserAgentPrefix+kopsv.Version),\n\t)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"creating client for Scaleway NodeIdentifier: %w\", err)\n\t}\n\n\treturn &nodeIdentifier{\n\t\tclient:       scwClient,\n\t\tcache:        expirationcache.NewTTLStore(stringKeyFunc, cacheTTL),\n\t\tcacheEnabled: cacheNodeidentityInfo,\n\t}, nil\n}\n\n// IdentifyNode queries Scaleway for the node identify information\nfunc (i *nodeIdentifier) IdentifyNode(ctx context.Context, node *corev1.Node) (*nodeidentity.Info, error) {\n\tproviderID := node.Spec.ProviderID\n\tif providerID == \"\" {\n\t\treturn nil, fmt.Errorf(\"providerID not set for node %s\", node.Name)\n\t}\n\tif !strings.HasPrefix(providerID, \"scaleway://\") {\n\t\treturn nil, fmt.Errorf(\"providerID %q not recognized for node %s\", providerID, node.Name)\n\t}\n\n\tserverID := strings.TrimPrefix(providerID, \"scaleway://\")\n\n\t// If caching is enabled try pulling nodeidentity.Info from cache before doing a Scaleway API call.\n\tif i.cacheEnabled {\n\t\tobj, exists, err := i.cache.GetByKey(serverID)\n\t\tif err != nil {\n\t\t\tklog.Warningf(\"Nodeidentity info cache lookup failure: %v\", err)\n\t\t}\n\t\tif exists {\n\t\t\treturn obj.(*nodeidentity.Info), nil\n\t\t}\n\t}\n","sourceCodeStart":57,"sourceCodeEnd":93,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/pkg/nodeidentity/scaleway/identify.go#L57-L93","documentation":"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.","triggerScenarios":"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.","commonSituations":"Nodes joined without the Scaleway cloud controller running, freshly registered nodes processed too early, or clusters bootstrapped with providerID disabled/misconfigured.","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"],"exampleFix":"// before\n# node has spec.providerID: \"\"\n// after\n# scaleway CCM sets: spec.providerID: \"scaleway://fr-par-1/<server-uuid>\"","handlingStrategy":"validation","validationCode":"if node.Spec.ProviderID == \"\" {\n    return fmt.Errorf(\"skip IdentifyNode: node %s has empty providerID\", node.Name)\n}","typeGuard":"func hasProviderID(n *corev1.Node) bool {\n    return n != nil && n.Spec.ProviderID != \"\"\n}","tryCatchPattern":"info, err := identifier.IdentifyNode(ctx, node)\nif err != nil && strings.Contains(err.Error(), \"providerID not set\") {\n    return requeueAfter(ctx, node, time.Minute) // wait for CCM to set providerID\n}","preventionTips":["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"],"tags":["scaleway","node-identity","providerid"],"backgroundTag":"missing-providerid","analyzedSha":"4c8573c808a73d578c5eadc86d410646ea0b0d73","analyzedAt":"2026-09-05T04:13:19.212Z","contentChangedAt":"2026-09-05T04:13:19.212Z","schemaVersion":2},"datasetVersion":"2026-09-12T12:17:11.808Z"}