{"record":{"id":"650e8e2afe53dc2d","repo":"kubernetes/kops","slug":"unsupported-cloud-provider-s","errorCode":null,"errorMessage":"unsupported cloud provider %s","messagePattern":"unsupported cloud provider (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"upup/pkg/fi/cloudup/new_cluster.go","lineNumber":396,"sourceCode":"\t\tosCloud, err := openstack.NewOpenstackCloud(cluster, \"openstackmodel\")\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tcloud = osCloud\n\tcase api.CloudProviderScaleway:\n\t\tcluster.Spec.CloudProvider.Scaleway = &api.ScalewaySpec{}\n\tcase api.CloudProviderLinode:\n\t\tcluster.Spec.CloudProvider.Linode = &api.LinodeSpec{}\n\tcase api.CloudProviderMetal:\n\t\tif !featureflag.Metal.Enabled() {\n\t\t\treturn nil, fmt.Errorf(\"bare-metal support requires the Metal feature flag to be enabled\")\n\t\t}\n\t\tif cluster.Labels == nil {\n\t\t\tcluster.Labels = make(map[string]string)\n\t\t}\n\t\tcluster.Labels[api.AlphaLabelCloudProvider] = string(api.CloudProviderMetal)\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"unsupported cloud provider %s\", opt.CloudProvider)\n\t}\n\n\tif opt.DiscoveryStore != \"\" {\n\t\tdiscoveryPath, err := clientset.VFSContext().BuildVfsPath(opt.DiscoveryStore)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"error building DiscoveryStore for cluster: %v\", err)\n\t\t}\n\t\tcluster.Spec.ServiceAccountIssuerDiscovery = &api.ServiceAccountIssuerDiscoveryConfig{\n\t\t\tDiscoveryStore: discoveryPath.Join(cluster.Name).Path(),\n\t\t}\n\t\tif cluster.GetCloudProvider() == api.CloudProviderAWS {\n\t\t\tcluster.Spec.ServiceAccountIssuerDiscovery.EnableAWSOIDCProvider = true\n\t\t\tcluster.Spec.IAM.UseServiceAccountExternalPermissions = new(true)\n\t\t}\n\t}\n\n\terr = setupVPC(opt, cluster, cloud)\n\tif err != nil {","sourceCodeStart":378,"sourceCodeEnd":414,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/upup/pkg/fi/cloudup/new_cluster.go#L378-L414","documentation":"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'.","triggerScenarios":"`kops create cluster --cloud <value>` with a misspelled or genuinely unsupported provider name (e.g. \"AWS\" case mismatch depending on normalization, \"vmware\", \"baremetal\").","commonSituations":"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.","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"],"exampleFix":"// before\nkops create cluster --cloud gcp --name c.example.com\n// after\nkops create cluster --cloud gce --name c.example.com","handlingStrategy":"validation","validationCode":"var supported = map[string]bool{\n    \"aws\": true, \"gce\": true, \"digitalocean\": true, \"hetzner\": true,\n    \"openstack\": true, \"azure\": true, \"scaleway\": true, \"linode\": true, \"metal\": true,\n}\nif !supported[strings.ToLower(opt.CloudProvider)] {\n    return fmt.Errorf(\"--cloud must be one of: aws gce digitalocean hetzner openstack azure scaleway linode metal\")\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["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"],"tags":["cloud-provider","validation","unsupported-value"],"backgroundTag":"invalid-enum-value","analyzedSha":"4c8573c808a73d578c5eadc86d410646ea0b0d73","analyzedAt":"2026-09-05T04:13:19.212Z","contentChangedAt":"2026-09-05T04:13:19.212Z","schemaVersion":2},"datasetVersion":"2026-09-12T07:17:12.445Z"}