kubernetes/kops · error
identifier for cloud %q not implemented
Error message
identifier for cloud %q not implemented
What it means
addNodeController's cloud switch falls through to default when opt.Cloud holds a value that is not one of the implemented providers (aws, gce, openstack, digitalocean, hetzner, azure, scaleway, metal, linode), returning fmt.Errorf("identifier for cloud %q not implemented", opt.Cloud). This guards against typos or unsupported clouds at startup.
Source
Thrown at cmd/kops-controller/main.go:380
}
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
}
if err := nodeController.SetupWithManager(mgr); err != nil {
return err
}
return nil
}
// Reconciler is the interface for a standard Reconciler.
type Reconciler interface {
SetupWithManager(mgr manager.Manager) error
}
View on GitHub (pinned to 4c8573c808)
Solutions
- Check the exact value passed via --cloud/CLOUD and correct spelling/case to one of: aws, gce, openstack, digitalocean, hetzner, azure, scaleway, metal, linode
- Confirm your kOps version supports the cloud; upgrade kops-controller if the provider was added later
- Match the cloud value to the one used at cluster creation (kops get cluster output)
Example fix
// before --cloud=AWS // after --cloud=aws
Defensive patterns
Strategy: validation
Validate before calling
// validate the cloud value against supported providers before launch
var supported = map[string]bool{
"aws": true, "gce": true, "openstack": true, "digitalocean": true,
"hetzner": true, "azure": true, "scaleway": true, "metal": true, "linode": true,
}
if !supported[opt.Cloud] {
log.Error(nil, "unsupported cloud", "cloud", opt.Cloud)
os.Exit(2)
} Try / catch
if err := addNodeController(context, opt); err != nil {
log.Error(err, "failed to add node controller")
os.Exit(1)
} Prevention
- Match --cloud exactly (lowercase) to a supported provider: aws, gce, openstack, digitalocean, hetzner, azure, scaleway, metal, linode
- Derive the flag from cluster spec instead of hand-typing it
- Upgrade kops-controller in lockstep when adopting a newly supported provider
When it happens
Trigger: Running kops-controller with --cloud set to an unsupported or misspelled value, e.g. --cloud=AWS (case mismatch), --cloud=vmware, --cloud=openstack-nova, or a provider added in a newer kOps than the deployed binary.
Common situations: Typo or wrong casing in the cloud flag; using a cloud provider not yet supported by kops-controller; running an older kOps binary that lacks a newly added provider (e.g. scaleway, metal, linode).
Related errors
- must specify cloud
- kOps IPAM controller is not supported on cloud %q
- clientset is not initialized
- error building metal node identifier: %w
- error building linode node identifier: %w
AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05).
Data as JSON: /api/errors/f1c0083748133d8d.
Report an issue: GitHub.