kubesphere/kubesphere · error
failed to create or update extension version
Error message
failed to create or update extension version
What it means
syncExtensionsFromURL wraps any error from createOrUpdateExtensionVersion with 'failed to create or update extension version' using errors.Wrapf. It means an ExtensionVersion object for an extension from the repository index could not be created or updated in the cluster, typically a Kubernetes API failure.
Source
Thrown at pkg/controller/core/repository_controller.go:263
extensionVersions = append(extensionVersions, extensionVersion)
}
filteredVersions := filterExtensionVersions(extensionVersions, repo.Spec.Depth)
if len(filteredVersions) == 0 {
continue
}
// update extension of latest extensionVersion
extension, err := r.createOrUpdateExtension(ctx, repo, extensionName, ptr.To(filteredVersions[0]))
if err != nil {
if errors.Is(err, extensionRepoConflict) {
continue
}
return errors.Wrapf(err, "failed to create or update extension")
}
// create extensionVersions of filteredVersions
for _, extensionVersion := range filteredVersions {
if err := r.createOrUpdateExtensionVersion(ctx, extension, &extensionVersion); err != nil {
return errors.Wrapf(err, "failed to create or update extension version")
}
}
// remove extensionVersions of existVersions
if err := r.removeSuspendedExtensionVersion(ctx, repo.Name, extension.Name, extensionVersions); err != nil {
return errors.Wrapf(err, "failed to remove suspended extension version")
}
}
extensions := &corev1alpha1.ExtensionList{}
if err := r.List(ctx, extensions, client.MatchingLabels{corev1alpha1.RepositoryReferenceLabel: repo.Name}); err != nil {
return errors.Wrapf(err, "failed to list extensions")
}
for _, extension := range extensions.Items {
if _, ok := index.Entries[extension.Name]; !ok {
// remove all the extensionVersions if the extension is not in the index
if err := r.removeSuspendedExtensionVersion(ctx, repo.Name, extension.Name, []corev1alpha1.ExtensionVersion{}); err != nil {
return errors.Wrapf(err, "failed to remove suspended extension version")View on GitHub (pinned to 04a29b5c60)
Solutions
- Inspect the wrapped inner error to find the underlying API failure (not found, conflict, invalid)
- Verify the ExtensionVersion CRD is installed and matches the version the controller expects
- Check controller RBAC permissions to create/update extensionversions
- Validate the extension package metadata in the repo index for fields the API rejects
Defensive patterns
Strategy: try-catch
Validate before calling
// verify CRDs exist before sync
for _, gvk := range []string{"extensionversions.kubesphere.io"} {
if _, err := discoveryClient.ServerResourcesForGroupVersion(gvk); err != nil { return err }
} Try / catch
if err := r.createOrUpdateExtensionVersion(ctx, ext, &ev); err != nil {
if apierrors.IsConflict(err) || apierrors.IsAlreadyExists(err) { return retryOnConflict(...) }
return fmt.Errorf("extension version sync failed: %w", err)
} Prevention
- Pin controller RBAC to include create/update on extensions and extensionversions
- Validate extension package metadata before publishing to the index
- Install/upgrade Extension CRDs in lockstep with the controller
When it happens
Trigger: During repository reconcile, after filteredVersions are computed, r.createOrUpdateExtensionVersion fails — e.g. create/update API call rejected, validation webhook denial, RBAC denial, or invalid ExtensionVersion spec content from the index.
Common situations: Extension CRD not installed or CRD schema mismatch, admission webhook rejecting the spec, API server throttling/outage, corrupted version metadata (invalid labels/annotations) in the uploaded index.
Related errors
- failed to sync extensions from %s
- failed to remove suspended extension version
- failed to list extensions
- failed to update repository status
- failed to fetch extension version spec
AI-assisted analysis of kubesphere/kubesphere@04a29b5c60 (2026-09-03).
Data as JSON: /api/errors/a586cbe2ed11ae6d.
Report an issue: GitHub.