{"record":{"id":"a586cbe2ed11ae6d","repo":"kubesphere/kubesphere","slug":"failed-to-create-or-update-extension-version","errorCode":null,"errorMessage":"failed to create or update extension version","messagePattern":"failed to create or update extension version","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/controller/core/repository_controller.go","lineNumber":263,"sourceCode":"\t\t\textensionVersions = append(extensionVersions, extensionVersion)\n\t\t}\n\n\t\tfilteredVersions := filterExtensionVersions(extensionVersions, repo.Spec.Depth)\n\t\tif len(filteredVersions) == 0 {\n\t\t\tcontinue\n\t\t}\n\t\t// update extension of latest extensionVersion\n\t\textension, err := r.createOrUpdateExtension(ctx, repo, extensionName, ptr.To(filteredVersions[0]))\n\t\tif err != nil {\n\t\t\tif errors.Is(err, extensionRepoConflict) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\treturn errors.Wrapf(err, \"failed to create or update extension\")\n\t\t}\n\t\t// create extensionVersions of filteredVersions\n\t\tfor _, extensionVersion := range filteredVersions {\n\t\t\tif err := r.createOrUpdateExtensionVersion(ctx, extension, &extensionVersion); err != nil {\n\t\t\t\treturn errors.Wrapf(err, \"failed to create or update extension version\")\n\t\t\t}\n\t\t}\n\t\t// remove extensionVersions of existVersions\n\t\tif err := r.removeSuspendedExtensionVersion(ctx, repo.Name, extension.Name, extensionVersions); err != nil {\n\t\t\treturn errors.Wrapf(err, \"failed to remove suspended extension version\")\n\t\t}\n\t}\n\n\textensions := &corev1alpha1.ExtensionList{}\n\tif err := r.List(ctx, extensions, client.MatchingLabels{corev1alpha1.RepositoryReferenceLabel: repo.Name}); err != nil {\n\t\treturn errors.Wrapf(err, \"failed to list extensions\")\n\t}\n\n\tfor _, extension := range extensions.Items {\n\t\tif _, ok := index.Entries[extension.Name]; !ok {\n\t\t\t// remove all the extensionVersions if the extension is not in the index\n\t\t\tif err := r.removeSuspendedExtensionVersion(ctx, repo.Name, extension.Name, []corev1alpha1.ExtensionVersion{}); err != nil {\n\t\t\t\treturn errors.Wrapf(err, \"failed to remove suspended extension version\")","sourceCodeStart":245,"sourceCodeEnd":281,"githubUrl":"https://github.com/kubesphere/kubesphere/blob/04a29b5c601470fa6bc2f2e92358dcb802a0d414/pkg/controller/core/repository_controller.go#L245-L281","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"// verify CRDs exist before sync\nfor _, gvk := range []string{\"extensionversions.kubesphere.io\"} {\n    if _, err := discoveryClient.ServerResourcesForGroupVersion(gvk); err != nil { return err }\n}","typeGuard":null,"tryCatchPattern":"if err := r.createOrUpdateExtensionVersion(ctx, ext, &ev); err != nil {\n    if apierrors.IsConflict(err) || apierrors.IsAlreadyExists(err) { return retryOnConflict(...) }\n    return fmt.Errorf(\"extension version sync failed: %w\", err)\n}","preventionTips":["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"],"tags":["kubernetes","controller","reconcile","extension-version"],"backgroundTag":"resource-create-or-update-failed","analyzedSha":"04a29b5c601470fa6bc2f2e92358dcb802a0d414","analyzedAt":"2026-09-03T18:33:15.017Z","contentChangedAt":"2026-09-03T18:33:15.017Z","schemaVersion":2},"datasetVersion":"2026-09-11T00:17:11.886Z"}