kubernetes/kops · error
metal::IdentifyNode not implemented
Error message
metal::IdentifyNode not implemented
What it means
The metal (Equinix Metal / Packet) nodeidentity Identifier is a stub: New() constructs the identifier successfully, but IdentifyNode always returns an 'not implemented' error. The package exists as a placeholder in the nodeidentity framework but performs no actual node lookup.
Source
Thrown at pkg/nodeidentity/metal/identify.go:38
"context"
"fmt"
corev1 "k8s.io/api/core/v1"
"k8s.io/kops/pkg/nodeidentity"
)
// nodeIdentifier identifies a node in a bare-metal cloud
type nodeIdentifier struct {
}
// New creates and returns a nodeidentity.Identifier for Nodes running on bare metal
func New() (nodeidentity.Identifier, error) {
return &nodeIdentifier{}, nil
}
// IdentifyNode returns the node identity information
func (i *nodeIdentifier) IdentifyNode(ctx context.Context, node *corev1.Node) (*nodeidentity.Info, error) {
return nil, fmt.Errorf("metal::IdentifyNode not implemented")
}
View on GitHub (pinned to 4c8573c808)
Solutions
- Do not use the metal nodeidentifier for identity lookups; implement or substitute an identifier (e.g. based on the metal CCM) that resolves node identity
- Check the kOps issue tracker / upstream for metal nodeidentity support and upgrade to a version that implements it
- Provide identity info out-of-band (labels/taints set by the metal cloud controller) instead of calling IdentifyNode
Example fix
// before id, err := metalIdentifier.IdentifyNode(ctx, node) // always errors // after // use a provider with an implemented identifier, or contribute an implementation in pkg/nodeidentity/metal/identify.go
Defensive patterns
Strategy: fallback
Validate before calling
// Feature-check: metal IdentifyNode is a stub that always errors; avoid calling it. // Route metal-cluster nodes to an implemented identifier instead.
Type guard
func identifierImplemented(id nodeidentity.Identifier) bool {
// The metal identifier is known-unimplemented; treat it as absent.
return id != nil // caller must additionally special-case pkg/nodeidentity/metal
} Try / catch
info, err := identifier.IdentifyNode(ctx, node)
if err != nil && strings.Contains(err.Error(), "not implemented") {
// fall back to provider-agnostic identity (labels/annotations)
info = fallbackIdentityFromNode(node)
} Prevention
- Do not select the metal nodeidentifier in code paths that require real identity lookup
- Track upstream kOps for metal nodeidentity implementation before enabling the integration
- Derive identity for metal nodes from CCM-set labels/annotations instead
When it happens
Trigger: Any call to nodeidentity/metal's Identifier.IdentifyNode, i.e. running the cloud-controller / node-authorizer identity flow against nodes of a bare-metal cluster using this identifier.
Common situations: Deploying kOps components that depend on node identity lookup on an Equinix Metal cluster where the metal identifier has never been implemented; selecting the metal provider in a code path expecting IdentifyNode to work.
Related errors
- error building metal node identifier: %w
- DNS not implemented on azureCloud
- FindVPCInfo not implemented on azureCloud, use FindVNetInfo
- DeleteGroup not implemented on azureCloud
- DetachInstance not implemented on azureCloud
AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05).
Data as JSON: /api/errors/44a8a9a6c4b1957b.
Report an issue: GitHub.