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

  1. Use an exact supported name: aws, gce, digitalocean, hetzner, openstack, azure, scaleway, linode, or metal
  2. Run `kops create cluster --help` to see accepted --cloud values
  3. 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

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


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