kubernetes/kops · error
could not get spec.version from ClusterPackage
Error message
could not get spec.version from ClusterPackage
What it means
loadClusterPackage reads a ClusterPackage custom object from the cluster's AdditionalObjects; spec.version was absent, empty, or not a string (NestedString error), so kOps cannot locate packages/<name>/<version>/manifest.yaml in the channel.
Source
Thrown at pkg/wellknownoperators/operators.go:84
}
}
if keep {
keepObjects = append(keepObjects, object)
}
}
return packages, keepObjects, nil
}
func (b *Builder) loadClusterPackage(u *unstructured.Unstructured) (*Package, error) {
operatorKey := u.GetName()
if operatorKey == "" {
return nil, fmt.Errorf("could not get name from ClusterPackage")
}
operatorVersion, _, err := unstructured.NestedString(u.Object, "spec", "version")
if err != nil || operatorVersion == "" {
return nil, fmt.Errorf("could not get spec.version from ClusterPackage")
}
id := operatorVersion
location := path.Join("packages", operatorKey, operatorVersion, "manifest.yaml")
channelURL, err := kops.ResolveChannel(b.Cluster.Spec.Channel)
if err != nil {
return nil, fmt.Errorf("error resolving channel %q: %v", b.Cluster.Spec.Channel, err)
}
locationURL := channelURL.ResolveReference(&url.URL{Path: location}).String()
manifestBytes, err := b.VFSContext.ReadFile(locationURL)
if err != nil {
return nil, fmt.Errorf("error reading operator manifest %q: %v", locationURL, err)
}
addon := &Package{View on GitHub (pinned to 4c8573c808)
Solutions
- Set spec.version to a concrete version string on every ClusterPackage object
- Verify the ClusterPackage object's YAML types (version must be a quoted string, not a number)
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at pkg/wellknownoperators/operators.go:84 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05).
Data as JSON: /api/errors/0c7da6e69fbbbe77.
Report an issue: GitHub.