{"record":{"id":"8b9b2fd612c19490","repo":"kubernetes/kops","slug":"unknown-cloudprovider-q-8b9b2f","errorCode":null,"errorMessage":"unknown CloudProvider %q","messagePattern":"unknown CloudProvider %q","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"upup/pkg/fi/cloudup/utils.go","lineNumber":229,"sourceCode":"\tcase kops.CloudProviderLinode:\n\t\tfor _, subnet := range cluster.Spec.Networking.Subnets {\n\t\t\tif subnet.Region != \"\" {\n\t\t\t\tregion = subnet.Region\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif region == \"\" {\n\t\t\treturn nil, fmt.Errorf(\"on Akamai (Linode), subnets must include Regions\")\n\t\t}\n\n\t\tlinodeCloud, err := linode.NewCloud(region)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"error initializing Akamai (Linode) cloud: %w\", err)\n\t\t}\n\n\t\tcloud = linodeCloud\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"unknown CloudProvider %q\", cluster.GetCloudProvider())\n\t}\n\treturn cloud, nil\n}\n\nfunc FindDNSHostedZone(dns dnsprovider.Interface, clusterDNSName string, dnsType kops.DNSType) (string, error) {\n\tklog.V(2).Infof(\"Querying for all DNS zones to find match for %q\", clusterDNSName)\n\n\tclusterDNSName = \".\" + strings.TrimSuffix(clusterDNSName, \".\")\n\n\tzonesProvider, ok := dns.Zones()\n\tif !ok {\n\t\treturn \"\", fmt.Errorf(\"dns provider %T does not support zones\", dns)\n\t}\n\n\tallZones, err := zonesProvider.List()\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"error querying zones: %v\", err)\n\t}","sourceCodeStart":211,"sourceCodeEnd":247,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/upup/pkg/fi/cloudup/utils.go#L211-L247","documentation":"BuildCloud switches on the cluster's configured cloud provider and has no case for the given value, so it rejects any provider kops does not recognize with this message, echoing the raw provider string with %q.","triggerScenarios":"Any kops command that calls BuildCloud (create cluster, create ig, delete cluster, delete instance, etc.) where cluster.spec.cloudProvider is a misspelled, unsupported, or empty value, e.g. \"vmware\", \"linode\" vs an unexpected casing, or a null/zero-value string.","commonSituations":"Typos in a hand-edited cluster manifest (`cloudProvider: awss`); using a provider not compiled into this kops build; an empty spec because the field was never set; config generated by external tooling using non-kops provider names.","solutions":["Set cloudProvider to a supported value: aws, gce, azure, do, hetzner, openstack, scaleway, linode (akamai), metal, or vsphere depending on build.","Check spelling/casing in `kops get cluster <name> -o yaml` and correct the field via `kops edit cluster`.","Ensure your kops version supports the provider; upgrade the binary if using a newer provider (e.g. Hetzner/Scaleway) on an old kops."],"exampleFix":"# before\ncloudProvider: awss\n# after\ncloudProvider: aws","handlingStrategy":"validation","validationCode":"valid := map[string]bool{\"aws\":true,\"gce\":true,\"azure\":true,\"do\":true,\"hetzner\":true,\"openstack\":true,\"scaleway\":true,\"linode\":true,\"metal\":true,\"vsphere\":true}\nif !valid[cluster.Spec.CloudProvider] {\n    return fmt.Errorf(\"unsupported cloudProvider %q\", cluster.Spec.CloudProvider)\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Only assign cloudProvider values from the kops.CloudProvider constants.","Never leave cloudProvider empty in generated manifests.","Check `kops get cluster -o yaml` after external tooling modifies the cluster spec."],"tags":["cloud-provider","cluster-config","validation"],"backgroundTag":"unknown-provider-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"}