kubernetes/kops · error

error parsing Kubernetes version %q: %v

Error message

error parsing Kubernetes version %q: %v

What it means

ForceKubernetesVersion on the instance group model parses the given Kubernetes version string via ParseKubernetesVersion and stores it on the model. If parsing fails, the error is wrapped with the input string and the underlying reason. It surfaces malformed version inputs reaching the model layer (e.g. from cluster spec or tests).

Source

Thrown at pkg/apis/kops/model/instance_group.go:84

	return m.kubernetesVersion
}

func (m *instanceGroupModel) GetCloudProvider() kops.CloudProviderID {
	return m.cluster.GetCloudProvider()
}

func (m *instanceGroupModel) InstallCNIAssets() bool {
	return m.cluster.InstallCNIAssets()
}

func (m *instanceGroupModel) RawClusterSpec() *kops.ClusterSpec {
	return &m.cluster.Spec
}

func (m *instanceGroupModel) ForceKubernetesVersion(kubernetesVersionString string) error {
	kubernetesVersion, err := ParseKubernetesVersion(kubernetesVersionString)
	if err != nil {
		return fmt.Errorf("error parsing Kubernetes version %q: %v", kubernetesVersionString, err)
	}
	m.kubernetesVersion = kubernetesVersion
	return nil
}

View on GitHub (pinned to 4c8573c808)

Solutions

  1. Set the cluster's spec.kubernetesVersion to a full, valid version string (e.g. 1.28.2, with or without a leading v)
  2. Check for empty or placeholder values leaking from templating/config into kubernetesVersion
  3. Pin to a kOps-supported Kubernetes release version

Example fix

# before (cluster.yaml)
spec:
  kubernetesVersion: stable
# after
spec:
  kubernetesVersion: 1.28.2
Defensive patterns

Strategy: try-catch

Validate before calling

if kubernetesVersion == "" || !regexp.MustCompile(`^v?\d+\.\d+\.\d+`).MatchString(kubernetesVersion) {
    return errors.New("kubernetesVersion must be a full version like 1.28.2")
}

Try / catch

kubernetesVersion, err := m.ForceKubernetesVersion(versionString)
if err != nil {
    return fmt.Errorf("refusing to build model: %w", err)
}

Prevention

When it happens

Trigger: Calling ForceKubernetesVersion (from ForInstanceGroup during model building) with a string that util.ParseKubernetesVersion rejects — e.g. empty string, "1.28", "v1.28.0-beta" with unexpected format, or arbitrary text from a misconfigured kubernetesVersion field.

Common situations: Cluster spec has kubernetesVersion set to a non-standard value; user pinned a version like "stable" or omitted the patch number; a template/variable substitution produced an empty version string.

Related errors


AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05). Data as JSON: /api/errors/e6c4762a95759e85. Report an issue: GitHub.