{"record":{"id":"363a5cabaf2334f7","repo":"kubernetes/kops","slug":"unable-to-determine-kubernetes-version-from-q","errorCode":null,"errorMessage":"unable to determine kubernetes version from %q","messagePattern":"unable to determine kubernetes version from %q","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/model/components/context.go","lineNumber":58,"sourceCode":"\n\t// Deprecated: Prefer using NodeKubernetesVersion() and ControlPlaneKubernetesVersion()\n\tKubernetesVersion semver.Version\n\n\tAssetBuilder *assets.AssetBuilder\n\n\tnodeKubernetesVersion         kopsmodel.KubernetesVersion\n\tcontrolPlaneKubernetesVersion kopsmodel.KubernetesVersion\n}\n\nfunc NewOptionsContext(cluster *kops.Cluster, assetBuilder *assets.AssetBuilder, maxKubeletSupportedVersion string) (*OptionsContext, error) {\n\toptionsContext := &OptionsContext{\n\t\tClusterName:  cluster.ObjectMeta.Name,\n\t\tAssetBuilder: assetBuilder,\n\t}\n\n\tsv, err := util.ParseKubernetesVersion(cluster.Spec.KubernetesVersion)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"unable to determine kubernetes version from %q\", cluster.Spec.KubernetesVersion)\n\t}\n\toptionsContext.KubernetesVersion = *sv\n\n\tcontrolPlaneKubernetesVersion, err := kopsmodel.ParseKubernetesVersion(cluster.Spec.KubernetesVersion)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"unable to determine kubernetes version from %q: %w\", cluster.Spec.KubernetesVersion, err)\n\t}\n\tnodeKubernetesVersion := controlPlaneKubernetesVersion\n\tif maxKubeletSupportedVersion != \"\" {\n\t\tnodeKubernetesVersion, err = kopsmodel.ParseKubernetesVersion(maxKubeletSupportedVersion)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"unable to determine kubernetes version from %q: %w\", maxKubeletSupportedVersion, err)\n\t\t}\n\t}\n\n\toptionsContext.nodeKubernetesVersion = *nodeKubernetesVersion\n\toptionsContext.controlPlaneKubernetesVersion = *controlPlaneKubernetesVersion\n","sourceCodeStart":40,"sourceCodeEnd":76,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/pkg/model/components/context.go#L40-L76","documentation":"NewOptionsContext parses cluster.spec.kubernetesVersion with util.ParseKubernetesVersion to populate the options context. An empty or unparseable version string (not semver-ish, junk text) makes it impossible to compute component defaults, so construction fails with this error.","triggerScenarios":"cluster.Spec.KubernetesVersion is empty, or set to a non-parseable value (e.g. 'latest', 'v1', 'stable', or a plain git hash without semver metadata).","commonSituations":"Creating a cluster without --kubernetes-version; CI scripts substituting an unset variable (empty string); hand-edited manifests with arbitrary version strings.","solutions":["Set an explicit valid version, e.g. `kops create cluster --kubernetes-version v1.30.4 ...`","If you intended the default, omit the field entirely so kops picks its default version","Check the CI variable substitution — ensure KUBERNETES_VERSION is not empty"],"exampleFix":"# before (empty via unset var)\nkops create cluster ... --kubernetes-version \"$VER\"\n# after\nexport VER=v1.30.4\nkops create cluster ... --kubernetes-version \"$VER\"","handlingStrategy":"validation","validationCode":"if _, err := util.ParseKubernetesVersion(cluster.Spec.KubernetesVersion); err != nil {\n\treturn fmt.Errorf(\"--kubernetes-version must be valid semver, got %q\", cluster.Spec.KubernetesVersion)\n}","typeGuard":"func validKubernetesVersion(v string) bool {\n\t_, err := util.ParseKubernetesVersion(v)\n\treturn err == nil\n}","tryCatchPattern":"if err := createCluster(); err != nil {\n\tif strings.Contains(err.Error(), \"unable to determine kubernetes version\") {\n\t\t// fall back to `kops get instancegroup`-style default version\n\t}\n\treturn err\n}","preventionTips":["Always pass --kubernetes-version vMAJOR.MINOR.PATCH to create cluster","Quote and default CI variables: VER=\"${VER:-v1.30.4}\"","Never use 'latest'/'stable' as a version in manifests"],"tags":["version-parsing","cluster-spec"],"backgroundTag":"invalid-kubernetes-version","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"}