{"record":{"id":"7445d2f2afd6f24e","repo":"kubernetes/kops","slug":"kubernetesversion-is-required","errorCode":null,"errorMessage":"KubernetesVersion is required","messagePattern":"KubernetesVersion is required","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"upup/pkg/fi/cloudup/populate_cluster_spec.go","lineNumber":295,"sourceCode":"\t\t\tklog.V(2).Infof(\"Defaulting DNS zone to: %s\", dnsZone)\n\t\t\tcluster.Spec.DNSZone = dnsZone\n\t\t}\n\t}\n\n\tif !cluster.UsesNoneDNS() {\n\t\tif cluster.Spec.DNSZone != \"\" && cluster.Spec.API.PublicName == \"\" {\n\t\t\tcluster.Spec.API.PublicName = \"api.\" + cluster.Name\n\t\t}\n\t\tif cluster.Spec.ExternalDNS == nil {\n\t\t\tcluster.Spec.ExternalDNS = &kopsapi.ExternalDNSConfig{}\n\t\t}\n\t\tif cluster.Spec.ExternalDNS.Provider == \"\" {\n\t\t\tcluster.Spec.ExternalDNS.Provider = kopsapi.ExternalDNSProviderDNSController\n\t\t}\n\t}\n\n\tif cluster.Spec.KubernetesVersion == \"\" {\n\t\treturn fmt.Errorf(\"KubernetesVersion is required\")\n\t}\n\n\toptionsContext, err := components.NewOptionsContext(cluster, c.assetBuilder, c.assetBuilder.KubeletSupportedVersion)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tvar codeModels []loader.ClusterOptionsBuilder\n\t{\n\t\t{\n\t\t\t// Note: DefaultOptionsBuilder comes first\n\t\t\tcodeModels = append(codeModels, &components.DefaultsOptionsBuilder{Context: optionsContext})\n\t\t\tcodeModels = append(codeModels, &components.EtcdOptionsBuilder{OptionsContext: optionsContext})\n\t\t\tcodeModels = append(codeModels, &etcdmanager.EtcdManagerOptionsBuilder{OptionsContext: optionsContext})\n\t\t\tcodeModels = append(codeModels, &components.KubeAPIServerOptionsBuilder{OptionsContext: optionsContext})\n\t\t\tcodeModels = append(codeModels, &components.ContainerdOptionsBuilder{OptionsContext: optionsContext})\n\t\t\tcodeModels = append(codeModels, &components.NetworkingOptionsBuilder{Context: optionsContext})\n\t\t\tcodeModels = append(codeModels, &components.KubeDnsOptionsBuilder{Context: optionsContext})","sourceCodeStart":277,"sourceCodeEnd":313,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/upup/pkg/fi/cloudup/populate_cluster_spec.go#L277-L313","documentation":"After normalization and defaulting, the target Kubernetes version must be known to build the full spec (component images, feature gates, etc.). run() throws this if spec.kubernetesVersion is still empty — FillDefaults does not always set it, e.g. when a channel/default cannot be derived.","triggerScenarios":"Calling PopulateClusterSpec on a cluster spec with kubernetesVersion unset, typically when creating a cluster without --kubernetes-version and no default channel resolution applied, or a hand-written spec omitting the field.","commonSituations":"`kops create cluster` from a custom YAML missing kubernetesVersion; base cluster specs generated by tooling that omits the field; pinned-channel configs where the channel no longer supplies a default.","solutions":["Set spec.kubernetesVersion in the cluster spec (e.g. \"1.28.4\") or pass --kubernetes-version on create.","Ensure a valid channel is configured so defaults can supply the version if you rely on automatic defaults.","Use `kops create cluster ... --kubernetes-version <version>` instead of hand-built manifests lacking the field."],"exampleFix":"# before\nmetadata:\n  name: cluster.example.com\nspec:\n  # kubernetesVersion missing\n# after\nmetadata:\n  name: cluster.example.com\nspec:\n  kubernetesVersion: 1.28.4","handlingStrategy":"validation","validationCode":"if cluster.Spec.KubernetesVersion == \"\" {\n\treturn fmt.Errorf(\"kubernetesVersion must be set (or pass --kubernetes-version)\")\n}","typeGuard":"func hasKubernetesVersion(c *kopsapi.Cluster) bool { return strings.TrimSpace(c.Spec.KubernetesVersion) != \"\" }","tryCatchPattern":null,"preventionTips":["Always pass --kubernetes-version on `kops create cluster`","Pin kubernetesVersion in checked-in cluster manifests","After channel changes, confirm defaults still supply a version before apply"],"tags":["kubernetes-version","cluster-spec","validation"],"backgroundTag":"missing-required-argument","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"}