kubernetes/kops · error
unsupported cloud provider %s
Error message
unsupported cloud provider %s
What it means
The switch over opt.CloudProvider enumerates the known providers (aws, gce, do, hetzner, openstack, azure, scaleway, linode, metal, etc.). Any unrecognized value falls to the default case and returns 'unsupported cloud provider'.
Source
Thrown at upup/pkg/fi/cloudup/new_cluster.go:396
osCloud, err := openstack.NewOpenstackCloud(cluster, "openstackmodel")
if err != nil {
return nil, err
}
cloud = osCloud
case api.CloudProviderScaleway:
cluster.Spec.CloudProvider.Scaleway = &api.ScalewaySpec{}
case api.CloudProviderLinode:
cluster.Spec.CloudProvider.Linode = &api.LinodeSpec{}
case api.CloudProviderMetal:
if !featureflag.Metal.Enabled() {
return nil, fmt.Errorf("bare-metal support requires the Metal feature flag to be enabled")
}
if cluster.Labels == nil {
cluster.Labels = make(map[string]string)
}
cluster.Labels[api.AlphaLabelCloudProvider] = string(api.CloudProviderMetal)
default:
return nil, fmt.Errorf("unsupported cloud provider %s", opt.CloudProvider)
}
if opt.DiscoveryStore != "" {
discoveryPath, err := clientset.VFSContext().BuildVfsPath(opt.DiscoveryStore)
if err != nil {
return nil, fmt.Errorf("error building DiscoveryStore for cluster: %v", err)
}
cluster.Spec.ServiceAccountIssuerDiscovery = &api.ServiceAccountIssuerDiscoveryConfig{
DiscoveryStore: discoveryPath.Join(cluster.Name).Path(),
}
if cluster.GetCloudProvider() == api.CloudProviderAWS {
cluster.Spec.ServiceAccountIssuerDiscovery.EnableAWSOIDCProvider = true
cluster.Spec.IAM.UseServiceAccountExternalPermissions = new(true)
}
}
err = setupVPC(opt, cluster, cloud)
if err != nil {View on GitHub (pinned to 4c8573c808)
Solutions
- Use an exact supported name: aws, gce, digitalocean, hetzner, openstack, azure, scaleway, linode, or metal
- Run `kops create cluster --help` to see accepted --cloud values
- Check kOps version — the provider may not exist in your release
Example fix
// before kops create cluster --cloud gcp --name c.example.com // after kops create cluster --cloud gce --name c.example.com
Defensive patterns
Strategy: validation
Validate before calling
var supported = map[string]bool{
"aws": true, "gce": true, "digitalocean": true, "hetzner": true,
"openstack": true, "azure": true, "scaleway": true, "linode": true, "metal": true,
}
if !supported[strings.ToLower(opt.CloudProvider)] {
return fmt.Errorf("--cloud must be one of: aws gce digitalocean hetzner openstack azure scaleway linode metal")
} Prevention
- Use exact provider names from `kops create cluster --help`
- Remember gce (not gcp) and digitalocean (not do) depending on release
- Normalize provider strings before calling NewCluster
When it happens
Trigger: `kops create cluster --cloud <value>` with a misspelled or genuinely unsupported provider name (e.g. "AWS" case mismatch depending on normalization, "vmware", "baremetal").
Common situations: Typos like 'awss' or 'gcp' where the code expects 'gce'; using a provider removed from the supported list; custom scripts passing lowercase/case-mismatched values.
Understand the failure class
Background: Invalid enum value errors: "Unknown type", "Invalid scope", "must be one of" — when a string is not on the library's allowed list — this error's family across 23 libraries.
Related errors
- cluster is not an Azure cluster
- unknown CloudProvider %q
- DNS not implemented on azureCloud
- failed to parse objects: %w
- failed to parse apiVersion %q
AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05).
Data as JSON: /api/errors/650e8e2afe53dc2d.
Report an issue: GitHub.