kubernetes/kops · error
error building metal node identifier: %w
Error message
error building metal node identifier: %w
What it means
In addNodeController's cloud switch, the "metal" case calls nodeidentitymetal.New(); on failure the error is wrapped with the cloud-specific message "error building metal node identifier: %w". The controller exits because the node reconciler requires a metal identifier.
Source
Thrown at cmd/kops-controller/main.go:367
return fmt.Errorf("error building node identifier: %w", err)
}
case "azure":
identifier, err = nodeidentityazure.New(opt.CacheNodeidentityInfo)
if err != nil {
return fmt.Errorf("error building node identifier: %w", err)
}
case "scaleway":
identifier, err = nodeidentityscw.New(opt.CacheNodeidentityInfo)
if err != nil {
return fmt.Errorf("error building node identifier: %w", err)
}
case "metal":
identifier, err = nodeidentitymetal.New()
if err != nil {
return fmt.Errorf("error building metal node identifier: %w", err)
}
case "linode":
identifier, err = nodeidentitylinode.New(opt.CacheNodeidentityInfo)
if err != nil {
return fmt.Errorf("error building linode node identifier: %w", err)
}
case "":
return fmt.Errorf("must specify cloud")
default:
return fmt.Errorf("identifier for cloud %q not implemented", opt.Cloud)
}
nodeController, err := controllers.NewNodeReconciler(mgr, identifier)
if err != nil {
return errView on GitHub (pinned to 4c8573c808)
Solutions
- Read the underlying wrapped error in controller logs to identify the metal init failure
- Verify the bare-metal/CAPI metal environment provides the node identity data the provider expects
- Confirm you are on a kOps version where the metal node identity provider is supported
- Fix the environment and restart the controller
Defensive patterns
Strategy: try-catch
Validate before calling
// verify metal node identity prerequisites before start
if opt.Cloud == "metal" {
// ensure node metadata source (e.g. CAPI metal provider) is reachable
}
if err := addNodeController(context, opt); err != nil {
log.Error(err, "failed to add node controller")
os.Exit(1)
} Try / catch
if err := addNodeController(context, opt); err != nil {
log.Error(err, "failed to add node controller", "cloud", "metal")
os.Exit(1)
} Prevention
- Confirm the bare-metal environment exposes required node metadata
- Pin the kops-controller image version to the cluster's kOps version
- Watch controller startup logs on first deploy to catch init failures early
When it happens
Trigger: Running kops-controller with --cloud=metal when nodeidentitymetal.New fails — e.g. failure to build the metal (bare-metal) identity provider from its environment/configuration.
Common situations: Bare-metal deployments where required node metadata (e.g. from the metal environment or CAPI metal provider) is unavailable, or a provider initialization bug after a kOps version change.
Related errors
- error building linode node identifier: %w
- creating metal IPAM controller: %w
- must specify cloud
- identifier for cloud %q not implemented
- reading %q certificate: %v
AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05).
Data as JSON: /api/errors/be352f95a6042822.
Report an issue: GitHub.