kubernetes/kops · error
unable to parse version string: %q
Error message
unable to parse version string: %q
What it means
Fires in findRuncVersionUrl when semver.ParseTolerant fails on the containerd.runc.version string from the cluster spec, meaning the configured version is not a parseable semantic version (e.g. a branch name or malformed tag) and no release download URL can be built.
Source
Thrown at pkg/nodemodel/wellknownassets/runc.go:78
if canonicalURL == "" {
version := fi.ValueOf(runc.Version)
if version == "" {
return nil, fmt.Errorf("unable to find runc version")
}
u, err := findRuncVersionUrl(arch, version)
if err != nil {
return nil, err
}
canonicalURL = u
}
return buildFileAsset(assetBuilder, canonicalURL, knownHash)
}
func findRuncVersionUrl(arch architectures.Architecture, version string) (string, error) {
sv, err := semver.ParseTolerant(version)
if err != nil {
return "", fmt.Errorf("unable to parse version string: %q", version)
}
if sv.LT(semver.MustParse("1.1.0")) {
return "", fmt.Errorf("unsupported runc version: %q", version)
}
var u string
switch arch {
case architectures.ArchitectureAmd64:
u = fmt.Sprintf(runcVersionUrlAmd64, version)
case architectures.ArchitectureArm64:
u = fmt.Sprintf(runcVersionUrlArm64, version)
default:
return "", fmt.Errorf("unknown arch: %q", arch)
}
if u == "" {
return "", fmt.Errorf("unknown url for runc version: %s - %s", arch, version)
}View on GitHub (pinned to 4c8573c808)
Solutions
- Set containerd.runc.version to a valid semver string such as 1.1.4
- Strip non-semver suffixes like v-dirty or branch names from the version
- Alternatively pin the download directly via containerd.runc.packages URLs to bypass version parsing
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at pkg/nodemodel/wellknownassets/runc.go:78 when the library encounters an invalid state.
Common situations: See trigger scenarios.
Understand the failure class
- Parsing and encoding errors: unexpected token, malformed input — why parsers reject input and how to find the real culprit.
AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05).
Data as JSON: /api/errors/d5baea8fb5874a70.
Report an issue: GitHub.