{"record":{"id":"e7d8a53d01d55f41","repo":"kubernetes/kops","slug":"cloudprovider-q-not-supported-with-etcd-manager","errorCode":null,"errorMessage":"CloudProvider %q not supported with etcd-manager","messagePattern":"CloudProvider %q not supported with etcd-manager","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/model/components/etcdmanager/model.go","lineNumber":550,"sourceCode":"\t\t\t\tfmt.Sprintf(\"%s--%s--\", b.Cluster.Name, etcdCluster.Name),\n\t\t\t}\n\n\t\t\tstaticConfig := &StaticConfig{\n\t\t\t\tEtcdVersion: etcdCluster.Version,\n\t\t\t}\n\t\t\tstaticConfig.Nodes = append(staticConfig.Nodes, StaticConfigNode{\n\t\t\t\tID: fmt.Sprintf(\"%s--%s--%d\", b.Cluster.Name, etcdCluster.Name, 0),\n\t\t\t\t// TODO: Support multiple control-plane nodes (will be interesting!)\n\t\t\t\tIP: []string{\"node0\" + \".\" + etcdCluster.Name + \".\" + b.Cluster.Name},\n\t\t\t})\n\t\t\tb, err := json.Marshal(staticConfig)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"building static config: %w\", err)\n\t\t\t}\n\t\t\tconfig.StaticConfig = string(b)\n\n\t\tdefault:\n\t\t\treturn nil, fmt.Errorf(\"CloudProvider %q not supported with etcd-manager\", b.Cluster.GetCloudProvider())\n\t\t}\n\t}\n\n\targs, err := flagbuilder.BuildFlagsList(config)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t{\n\t\tcontainer.Command = []string{\"/go-runner\"}\n\t\tcontainer.Args = []string{\n\t\t\t\"--log-file=/var/log/etcd.log\",\n\t\t\t\"--also-stdout\",\n\t\t\t\"/ko-app/etcd-manager\",\n\t\t}\n\t\tcontainer.Args = append(container.Args, args...)\n\n\t\tcpuRequest := resource.MustParse(\"200m\")","sourceCodeStart":532,"sourceCodeEnd":568,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/pkg/model/components/etcdmanager/model.go#L532-L568","documentation":"etcd-manager replaces the legacy etcd implementation, but kOps only knows how to configure it (volume providers, tags, naming) for a fixed set of cloud providers (AWS, GCE, DO, Hetzner, Linode, OpenStack, Scaleway, metal). buildPod hits the switch's default case when the cluster's cloudProvider is not one of those, and aborts the model build with this error naming the unsupported provider.","triggerScenarios":"`kops update cluster`/`create cluster` with spec.cloudProvider set to a provider lacking an etcd-manager case in buildPod — e.g. the legacy \"vsphere\", \"aliyun\", or \"baiducloud\" providers, or an empty/invalid provider value.","commonSituations":"Users migrating clusters from a deprecated cloud provider, copy-pasting a cluster spec from another platform, or leaving cloudProvider unset/corrupted in the cluster spec.","solutions":["Set spec.cloudProvider in the cluster spec to a supported provider (aws, gce, digitalocean, hetzner, linode, openstack, scaleway, or metal)","Re-create the cluster on a supported provider if migrating from a removed provider (e.g. vsphere/aliyun are no longer supported)","Check for typos/case mismatches in cloudProvider; kops get cluster -o yaml to verify the actual value","If etcd-manager should support the provider, disable it by using legacy etcd or contribute a new case to buildPod"],"exampleFix":"// before (cluster.yaml)\nspec:\n  cloudProvider: vsphere\n// after\nspec:\n  cloudProvider: aws","handlingStrategy":"validation","validationCode":"// Validate cloudProvider before kops update cluster\nprovider := cluster.Spec.GetCloudProvider()\nsupported := map[string]bool{\n    \"aws\": true, \"gce\": true, \"digitalocean\": true, \"hetzner\": true,\n    \"linode\": true, \"openstack\": true, \"scaleway\": true, \"metal\": true,\n}\nif !supported[provider] {\n    return fmt.Errorf(\"provider %q does not support etcd-manager; migrate cluster first\", provider)\n}","typeGuard":null,"tryCatchPattern":"// Wrap and surface the provider name\nif err := buildManifest(); err != nil {\n    if strings.Contains(err.Error(), \"not supported with etcd-manager\") {\n        return fmt.Errorf(\"unsupported provider for etcd-manager, see kops docs: %w\", err)\n    }\n    return err\n}","preventionTips":["Only use cloud providers listed in current kOps docs","Run `kops update cluster --dry-run` before applying specs copied from other platforms","Check kops release notes for removed cloud providers before upgrading"],"tags":["etcd-manager","cloud-provider","cluster-spec"],"backgroundTag":"unsupported-cloud-provider","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"}