kubernetes/kops · error
parsing kops version %q: %w
Error message
parsing kops version %q: %w
What it means
GetPackageVersion (addon/package selection in CreateAddons) parses the *kOps binary's own version* (kopsbase.Version) with util.ParseVersion in order to test it against a package's kopsVersion range. This error means the running kOps binary's version string is not parseable, which happens with custom/patched builds whose version metadata was replaced with non-semver text (e.g. "dev" or an unresolved git describe placeholder).
Source
Thrown at pkg/apis/kops/channel.go:410
}
if pkg.KubernetesVersion != "" {
versionRange, err := semver.ParseRange(pkg.KubernetesVersion)
if err != nil {
klog.Warningf("cannot parse KubernetesVersion=%q", pkg.KubernetesVersion)
continue
}
if !versionRange(*kubernetesVersion) {
klog.V(6).Infof("Kubernetes version %q does not match range: %s", kubernetesVersion, pkg.KubernetesVersion)
continue
}
}
if pkg.KopsVersion != "" {
kopsVersion, err := util.ParseVersion(kopsbase.Version)
if err != nil {
return nil, fmt.Errorf("parsing kops version %q: %w", kopsbase.Version, err)
}
versionRange, err := semver.ParseRange(pkg.KopsVersion)
if err != nil {
klog.Warningf("cannot parse KopsVersion=%q", pkg.KopsVersion)
continue
}
if !kopsVersion.IsInRange(versionRange) {
klog.V(2).Infof("kOps version %q does not match range: %s", kopsVersion, pkg.KopsVersion)
continue
}
}
matches = append(matches, pkg)
}
if len(matches) == 0 {View on GitHub (pinned to 4c8573c808)
Solutions
- Rebuild kOps using `make kops` (or `make gomod`-driven release targets) so kopsbase.Version is stamped with a valid semver via ldflags.
- Check `kops version` output; if it prints non-semver text, locate the build flag that set it (VERSION variable / git tag) and fix it.
- As a packaging workaround, ensure the distro version string is normalized to semver-compatible form before stamping.
Example fix
// before go build -o kops ./cmd/kops/ // after make kops # stamps kopsbase.Version, e.g. 1.28.3, via -ldflags
Defensive patterns
Strategy: try-catch
Validate before calling
if _, err := util.ParseVersion(kopsbase.Version); err != nil {
return fmt.Errorf("kops binary version %q not parseable; rebuild with make kops", kopsbase.Version)
} Type guard
func kopsVersionParsable() bool { _, err := util.ParseVersion(kopsbase.Version); return err == nil } Try / catch
v, err := GetPackageVersion(channel, name)
if err != nil && strings.Contains(err.Error(), "parsing kops version") {
// custom build problem: log kops version and skip package resolution
klog.Warningf("skipping package %s: %v", name, err)
return nil, nil
} Prevention
- Always build kOps via `make kops` so version ldflags are applied
- Check `kops version` outputs valid semver before running addon operations
- In distro packaging, normalize stamped version strings to semver
When it happens
Trigger: CreateAddons -> GetPackageVersion where pkg.KopsVersion is set and util.ParseVersion(kopsbase.Version) fails — i.e. the binary was built without proper version ldflags or the version was overridden with a non-semver value.
Common situations: Hand-built kOps via `go build ./cmd/kops/...` without the Makefile's version ldflags; distro-packaged kOps with a modified version string like "1.28.0-1.el9" variants the parser rejects; CI builds stamping "+dirty" metadata.
Related errors
- cannot specify additional objects when multiple clusters are
- must specify a cluster when creating additional objects
- error parsing RecommendedVersion %q from channel
- error parsing RequiredVersion %q from channel
- found no packages in channel for name=%q
AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05).
Data as JSON: /api/errors/4c2af498dbb2f09f.
Report an issue: GitHub.