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 err

View on GitHub (pinned to 4c8573c808)

Solutions

  1. Read the underlying wrapped error in controller logs to identify the metal init failure
  2. Verify the bare-metal/CAPI metal environment provides the node identity data the provider expects
  3. Confirm you are on a kOps version where the metal node identity provider is supported
  4. 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

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


AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05). Data as JSON: /api/errors/be352f95a6042822. Report an issue: GitHub.