kubernetes/kops · error
unknown CloudProvider %q
Error message
unknown CloudProvider %q
What it means
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.
Source
Thrown at upup/pkg/fi/cloudup/utils.go:229
case kops.CloudProviderLinode:
for _, subnet := range cluster.Spec.Networking.Subnets {
if subnet.Region != "" {
region = subnet.Region
break
}
}
if region == "" {
return nil, fmt.Errorf("on Akamai (Linode), subnets must include Regions")
}
linodeCloud, err := linode.NewCloud(region)
if err != nil {
return nil, fmt.Errorf("error initializing Akamai (Linode) cloud: %w", err)
}
cloud = linodeCloud
default:
return nil, fmt.Errorf("unknown CloudProvider %q", cluster.GetCloudProvider())
}
return cloud, nil
}
func FindDNSHostedZone(dns dnsprovider.Interface, clusterDNSName string, dnsType kops.DNSType) (string, error) {
klog.V(2).Infof("Querying for all DNS zones to find match for %q", clusterDNSName)
clusterDNSName = "." + strings.TrimSuffix(clusterDNSName, ".")
zonesProvider, ok := dns.Zones()
if !ok {
return "", fmt.Errorf("dns provider %T does not support zones", dns)
}
allZones, err := zonesProvider.List()
if err != nil {
return "", fmt.Errorf("error querying zones: %v", err)
}View on GitHub (pinned to 4c8573c808)
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.
Example fix
# before cloudProvider: awss # after cloudProvider: aws
Defensive patterns
Strategy: validation
Validate before calling
valid := map[string]bool{"aws":true,"gce":true,"azure":true,"do":true,"hetzner":true,"openstack":true,"scaleway":true,"linode":true,"metal":true,"vsphere":true}
if !valid[cluster.Spec.CloudProvider] {
return fmt.Errorf("unsupported cloudProvider %q", cluster.Spec.CloudProvider)
} Prevention
- 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.
When it happens
Trigger: 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.
Common situations: 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.
Related errors
- cluster is not an Azure cluster
- error populating configuration: %v
- must configure at least one InstanceGroup
- cluster has no subnets
- unsupported cloud provider %s
AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05).
Data as JSON: /api/errors/8b9b2fd612c19490.
Report an issue: GitHub.