{"record":{"id":"aa17541d8fe10993","repo":"kubernetes/kops","slug":"error-parsing-cluster-spec-kubernetesversion-q","errorCode":null,"errorMessage":"error parsing cluster spec.kubernetesVersion %q","messagePattern":"error parsing cluster spec\\.kubernetesVersion %q","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/apis/kops/cluster.go","lineNumber":889,"sourceCode":"\n\tif c.ObjectMeta.Name == \"\" {\n\t\treturn fmt.Errorf(\"cluster Name not set in FillDefaults\")\n\t}\n\n\treturn nil\n}\n\n// SharedVPC is a simple helper function which makes the templates for a shared VPC clearer\nfunc (c *Cluster) SharedVPC() bool {\n\treturn c.Spec.Networking.NetworkID != \"\"\n}\n\n// IsKubernetesGTE checks if the version is >= the specified version.\n// It panics if the kubernetes version in the cluster is invalid, or if the version is invalid.\nfunc (c *Cluster) IsKubernetesGTE(version string) bool {\n\tclusterVersion, err := util.ParseKubernetesVersion(c.Spec.KubernetesVersion)\n\tif err != nil || clusterVersion == nil {\n\t\tpanic(fmt.Sprintf(\"error parsing cluster spec.kubernetesVersion %q\", c.Spec.KubernetesVersion))\n\t}\n\n\tparsedVersion, err := util.ParseKubernetesVersion(version)\n\tif err != nil {\n\t\tpanic(fmt.Sprintf(\"Error parsing version %s: %v\", version, err))\n\t}\n\n\t// Ignore Pre & Build fields\n\tclusterVersion.Pre = nil\n\tclusterVersion.Build = nil\n\n\treturn clusterVersion.GTE(*parsedVersion)\n}\n\n// IsKubernetesLT checks if the version is < the specified version.\n// It panics if the kubernetes version in the cluster is invalid, or if the version is invalid.\nfunc (c *Cluster) IsKubernetesLT(version string) bool {\n\treturn !c.IsKubernetesGTE(version)","sourceCodeStart":871,"sourceCodeEnd":907,"githubUrl":"https://github.com/kubernetes/kops/blob/4c8573c808a73d578c5eadc86d410646ea0b0d73/pkg/apis/kops/cluster.go#L871-L907","documentation":"Panicked from Cluster.IsKubernetesGTE (via util.ParseKubernetesVersion) when the cluster's spec.kubernetesVersion cannot be parsed into a valid semver. The check is documented to panic on an invalid stored version: a malformed or empty version string in the cluster spec makes version-gating impossible, so the invalid value is surfaced in the panic message for immediate correction.","triggerScenarios":"Thrown at pkg/apis/kops/cluster.go:889 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Fix spec.kubernetesVersion in the cluster spec (e.g. via kops edit cluster) to a valid release like 1.30.0","Validate the version after any manual spec edits or version upgrades before running kops operations that gate on version"],"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-12T12:17:11.808Z"}