{"record":{"id":"c2c35da5b528fe7a","repo":"kubernetes/kops","slug":"cloud-provider-is-not-set","errorCode":null,"errorMessage":"Cloud Provider is not set","messagePattern":"Cloud Provider is not set","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"upup/pkg/fi/cloudup/template_functions.go","lineNumber":704,"sourceCode":"\t\treturn nil, fmt.Errorf(\"ExternalCloudControllerManager is nil\")\n\t}\n\n\targv, err := flagbuilder.BuildFlagsList(cluster.Spec.ExternalCloudControllerManager)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\t// default verbosity to 2\n\tif cluster.Spec.ExternalCloudControllerManager.LogLevel == 0 {\n\t\targv = append(argv, \"--v=2\")\n\t}\n\n\t// take the cloud provider value from clusterSpec if unset\n\tif cluster.Spec.ExternalCloudControllerManager.CloudProvider == \"\" {\n\t\tif cluster.GetCloudProvider() != \"\" {\n\t\t\targv = append(argv, fmt.Sprintf(\"--cloud-provider=%s\", cluster.GetCloudProvider()))\n\t\t} else {\n\t\t\treturn nil, fmt.Errorf(\"Cloud Provider is not set\")\n\t\t}\n\t}\n\n\t// default use-service-account-credentials to true\n\tif cluster.Spec.ExternalCloudControllerManager.UseServiceAccountCredentials == nil {\n\t\targv = append(argv, fmt.Sprintf(\"--use-service-account-credentials=%t\", true))\n\t}\n\n\tswitch cluster.GetCloudProvider() {\n\tcase kops.CloudProviderHetzner:\n\t\t// Hetzner does not use cloud config.\n\tcase kops.CloudProviderAzure:\n\t\t// Azure reads its cloud config from the azure-cloud-provider Secret.\n\tdefault:\n\t\targv = append(argv, \"--cloud-config=/etc/kubernetes/cloud.config\")\n\t}\n\n\treturn argv, nil","sourceCodeStart":686,"sourceCodeEnd":722,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/upup/pkg/fi/cloudup/template_functions.go#L686-L722","documentation":"Thrown in CloudControllerConfigArgv when neither ExternalCloudControllerManager.CloudProvider nor cluster.GetCloudProvider() yields a cloud provider name, so the required --cloud-provider flag cannot be emitted. The cluster spec is missing its cloudProvider designation entirely — an inconsistent or incompletely specified cluster.","triggerScenarios":"Thrown at upup/pkg/fi/cloudup/template_functions.go:704 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Set spec.cloudProvider in the cluster spec (e.g. aws, gce, openstack)","Or set spec.externalCloudControllerManager.cloudProvider explicitly if it should differ from the cluster-level provider","Re-create or edit the cluster with kops edit cluster to fix the spec"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"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"}